Discord bot异步/等待错误处理

Posted

技术标签:

【中文标题】Discord bot异步/等待错误处理【英文标题】:Discord bot async/await in error handling 【发布时间】:2022-01-09 03:20:38 【问题描述】:

我对 Python 有点陌生,我一直在尝试了解异步函数的工作原理。话虽如此,我正在尝试使用一些用户输入制作一个 Discord 机器人,以便该机器人显示自定义嵌入。那是容易的部分,因为现在我被困在错误处理上。一旦机器人要求输入,我希望它回问该输入是否不正确或超出范围。

        while True:
          value = await bot.wait_for("message", check=check, timeout=150.0)
          try:
            value = int(value.content)
            if value > 0 or value < 10:
              raise ValueError('A very specific bad thing happened.')
            else:
              break
          except:
            ctx.reply("That's not a valid value")

我知道我的错误在于循环内的await,但我不知道该怎么做。我正在寻找的是机器人再次询问它是否不正确。 _我一直在做很多研究,但我没有发现任何与此相关的东西。提前致谢!

【问题讨论】:

你为什么使用while循环?做什么的?如果您使用的是discordpy 库,那么它只是一个@client.event async def on_message(message): ...。然后您可以检查消息内容并向客户端做出响应。如果您发现错误,您还可以在需要时将其文本发送给客户端。 【参考方案1】:

ctx.reply 是一个协程,它前面应该有一个await。 让命令看起来更好的一种方法是在每次迭代后发送一条消息,以确认您的输入是否不正确,或者是其他错误。

您的代码中还有一个逻辑错误,在if 中。每次输入大于 0 或小于 10 时,它都会引发 ValueError。这基本上是每次输入整数时。并且由于每次出现错误时都会运行 except 部分,因此这是一个无限循环。 我假设您希望输入不是整数来引发“不是有效值”错误,如果您没有,您可以将 except: 更改为 except ValueError: 以仅在出现 ValueError 时运行。

这是我写的代码

while True:
    await ctx.send("Enter a value:")
    value = await self.bot.wait_for("message", check=check, timeout=150.0)
    try:
        value = int(value.content)
        if value > 0 and value < 10:
            raise ValueError('A very specific bad thing happened.')
        else:
            break
    except:
        await ctx.reply("That's not a valid value")

【讨论】:

以上是关于Discord bot异步/等待错误处理的主要内容,如果未能解决你的问题,请参考以下文章

使用 Codeforces API 通过 discord bot (discord.py) 获取有关用户在 CF 问题上的所有 AC 的信息 - python 中的 json 文件处理错误

Discord bot youtube 搜索,等待异步函数的回答

Python36 Discord Bot:任务已被破坏,但处于待处理状态

异步 SQLAlchemy 无法创建引擎

discord.js bot await 仅在异步函数中有效

Discord bot 添加并等待问答游戏的反应