Await 运算符在 if 语句中不起作用

问题描述 投票:0回答:1

Await 在 if 语句中不起作用。有什么解决方法吗?我找了大约一个小时,没有发现任何信息。

源代码:

https://pastebin.com/fCu1Txg9

感谢您的帮助(如有)!

错误:

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'

python python-3.x async-await discord discord.py
1个回答
0
投票

我将解决您的代码中的一些逻辑错误。

@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
中没有命令处理。

© www.soinside.com 2019 - 2024. All rights reserved.