首页 文章

让discord bot提及其他用户

提问于
浏览
0

我正在研究机器人为我的不和服务器做一些简单的命令,我还没弄清楚如何让机器人提到不是作者的人 .

if message.content.startswith("+prank"):
        user = client.get_user_info(id)
        await client.send_message(message.channel, user.mention + 'mention')

当我尝试运行该命令时,我想出了错误消息:

Ignoring exception in on_message
Traceback (most recent call last):
  File "C:\Users\user\AppData\Local\Programs\Python\Python36\lib\site-packages\discord\client.py", line 307, in _run_event
    yield from getattr(self, event)(*args, **kwargs)
  File "C:/Users/user/Desktop/Murk-Bot 2.0.py", line 130, in on_message
    await client.send_message(message.channel, user.mention + 'mention')
AttributeError: 'generator' object has no attribute 'mention'

如果我在之前,之后使用该命令并且根本不使用,则会发生这种情况 . 如果它给出了更多的上下文,那么我正在使用的是导入

import discord
from discord.ext.commands import Bot
from discord.ext import commands
import asyncio
import time
import random

2 回答

  • 0

    您获得的具体错误是由于没有等待协程而导致的 . client.get_user_info 是一个协程,必须使用 await .

    如果您希望通过用户名提及"+prank",则可以使用 server.get_member_named 找到成员对象 .

    示例代码如下 . 这将检查从指定用户名调用命令的服务器并返回 member 对象 .

    if message.content.startswith("+prank"):
        username = message.content[7:]
        member_object = message.server.get_member_named(username)
        await client.send_message(message.channel, member_object.mention + 'mention')
    
  • 1

    看起来你正试图在没有实际使用 commands 的情况下实现命令 . 不要将所有内容都放在 on_message 事件中 . 如果您不确定如何使用 discord.ext.commands 模块,可以查看documentation for the experimental rewrite branch .

    import discord
    from discord.ext.commands import Bot
    
    bot = Bot(command_prefix='+')
    
    @bot.command()
    async def prank(target: discord.Member):
        await bot.say(target.mention + ' mention')
    
    bot.run('token')
    

    您可以将此命令与 +prank Johnny 一起使用 . 机器人然后会在同一个 Channels 回复 @Johnny mention

相关问题