我只是与不和谐的机器人争吵,也没有使用python很长时间。我正在制作一个货币机器人,货币是ep,它可以跟踪用户的财富并将所有内容保存在json文件中。我以前曾做过这项工作,但想使用其他方式编写它。
我的最初方式-
@client.event
async def on_message(message):
if message.content.upper().startswith('EP.PING'):
await client.send_message(message.channel, "Ping.")
我的(希望更好)-
@client.command()
async def ping():
await client.say('Pong')
错误消息-
File "f:/Python Programs/EP Bot/EP Bot V2.py", line 19, in <module>
@client.command()
File "F:\Python 3.6.4\lib\site-packages\discord\client.py", line 296, in __getattr__
raise AttributeError(msg.format(self.__class__, name))
AttributeError: '<class 'discord.client.Client'>' object has no attribute 'command'
Unclosed client session
client_session: <aiohttp.client.ClientSession object at 0x000001E73CDBBDA0>
Unclosed client session
client_session: <aiohttp.client.ClientSession object at 0x000001E73CDCE0B8>
非常感谢您提供帮助,如果您认为我的初始方法更好,那也很好,我只是认为如果可行,这会容易得多。
如果您知道任何参考代码或模板,那就太好了!
答案 0 :(得分:1)
您需要使用discord.ext.commands.Bot
而不是discord.Client
。 Bot
是Client
的子类,因此您应该可以将其作为替代品使用,一切都会开始工作
from discord.ext.commands import Bot
client = Bot('!')
# Rest of your code is unchanged
请记住,如果您想拥有on_message
和command
,则需要修改on_message
以支持它们。参见Why does on_message stop commands from working?
答案 1 :(得分:1)
我知道我来晚了,但答案是您始终在自定义命令中需要ctx。您的代码应如下所示:
@client.command() async def ping(**ctx**): await client.say('Pong')