【问题标题】:can you wait for multiple events in discord.py?你可以在 discord.py 中等待多个事件吗?
【发布时间】:2021-01-31 08:09:10
【问题描述】:

我正在尝试为我的机器人等待多个事件,我确实找到了一种方法并且它起作用了,但是突然间它无缘无故地崩溃了,没有错误

while True:
    done, pending = await asyncio.wait(
        [
            bot.wait_for("raw_reaction_add")
            bot.wait_for("raw_reacion_remove")
        ]
    )

    payload = done.pop().result()
    if payload.event_type == "REACTION_ADD":
        ...
    elif payload.event_type == "REACTION_REMOVE":
        ...

    for future in pending:
        future.cancel()

在我的主命令中这样做是行不通的,但我做了一个测试命令,一切都是一样的,它工作没有问题

【问题讨论】:

  • 你可以使用 on_reaction_add 事件吗?
  • 这是在命令中,bot事件不同

标签: python python-3.x discord.py python-asyncio discord.py-rewrite


【解决方案1】:

您可以使用带有on_reaction_addon_reacion_remove 的普通机器人事件或其原始版本来完成此操作。要在彼此之间共享数据,您可以使用 MongoDB/pymongo 或 MySQL/sqlite 等数据库。

如果您将此命令用于反应角色,那么数据库将是与主要机器人事件一起使用的更好选择。

这将使以后的调试变得更加容易。

【讨论】:

  • 我正在使用 bot.wait_for() 因为我在命令中需要它,但正如我上面所说:“我确实找到了一种方法并且它有效,但是突然之间它没有无缘无故的错误”
  • 建议不要使用,除非需要同时编辑
  • 我想我应该早就说过了,但是 nvm。这段代码用于交互式设置,我不认为使用“@bot.event”而不是“bot.wait_for()”会有所帮助
  • 这就像分页,但是当你删除你的反应时,会发生一些事情
  • 这通常由 on_reaction_add 完成。您可以通过存储要更改的消息的消息 ID 并从中添加/删除反应来做到这一点
猜你喜欢
  • 2020-04-13
  • 2017-09-30
  • 2021-06-27
  • 2019-08-22
  • 1970-01-01
  • 2014-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多