Await 在 if 语句中不起作用。有什么解决方法吗?我找了大约一个小时,没有发现任何信息。
源代码:
感谢您的帮助(如有)!
错误:
Ignoring exception in on_message
Traceback (most recent call last):
File "C:\Users\student\PycharmProjects\MyStuff\venv\lib\site-packages\discord\client.py", line 307, in _run_event
yield from getattr(self, event)(*args, **kwargs)
TypeError: on_message() missing 1 required positional argument: 'ctx'
我将解决您的代码中的一些逻辑错误。
@client.event
async def on_message(message) -> None:
ctx = await client.get_context(message) # get context
# prevents the bot from responding to its own messages
if message.author.bot:
return
commands = ['command']
prefix = message.content[0:3]
if prefix == 'syc':
print('Command Run')
if not message.content[4:] in commands:
await ctx.send("Sorry that isn't a command")
要将消息发送回与消息所在的通道相同的通道,您可以使用
ctx = await client.get_context(message)
获取消息的上下文。然后当你想发送消息时,只需使用 ctx.send('')
discord
message
对象不是用户发送的实际字符串消息。要获取实际消息,可以通过 message.content
完成。
无需循环查看命令列表,因为检查
for command in commands:
if prefix == 'syc':
print('Command run')
将为命令列表中的每个命令打印一次,而不是在调用命令时仅打印一次。
检查消息是否为有效命令时,无需这样做
if not message == 'syc '+ cmd:
如果您已检查消息的第一部分是前缀,则只需检查消息的其余部分是否是命令。
我不建议首先使用
on_message
作为命令,最好只使用 @client.command
并创建一个单独的异步函数,如下所示
@client.command
async def command_name(ctx):
await ctx.send('This is a command')
为此目的使用
on_message
会删除许多功能,例如使用命令处理错误的能力。
当您调用在 on_message
中创建的命令时,您可能没有收到任何错误的原因是因为 on_message
中没有命令处理。