我正在研究机器人为我的不和服务器做一些简单的命令,而且我还没有弄清楚如何让机器人提及不是作者的人。
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
答案 0 :(得分:1)
您获得的具体错误是由于没有等待协程而导致的。 client.get_user_info
是协程,必须使用await
。
如果您希望通过用户名提及“+恶作剧”,您可以使用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 :(得分:0)
看起来您在没有实际使用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
一起使用。然后机器人将在同一频道@Johnny mention