当前位置: 首页 > 面试题库 >

on_message()和@ bot.command问题

耿永寿
2023-03-14
问题内容

当我有on_message()代码时,它将停止所有其他@bot.command命令的工作。我试过了await bot.process_commands(message),但这也不起作用。这是我的代码:

@bot.event
@commands.has_role("Owner")
async def on_message(message):
    if message.content.startswith('/lockdown'):
        await bot.process_commands(message)
        embed = discord.Embed(title=":warning: Do you want to activate Lock Down?", description="Type 'confirm' to activate Lock Down mode", color=0xFFFF00)
        embed.add_field(name="\u200b", value="Lock Down mode is still in early development, expect some issues")
        channel = message.channel
        await bot.send_message(message.channel, embed=embed)
        msg = await bot.wait_for_message(author=message.author, content='confirm')
        embed = discord.Embed(title=":white_check_mark: Lock Down mode successfully activated", description="To deactivate type '/lockdownstop'", color=0x00ff00)
        embed.add_field(name="\u200b", value="Lock Down mode is still in early development, expect some issues")
        await bot.send_message(message.channel, embed=embed)

问题答案:

您必须放置await bot.process_commands(message)if语句范围之外,process_command无论消息是否以“ /
lockdown”开头,都应运行。

@bot.event
async def on_message(message):
    if message.content.startswith('/lockdown'):
       ...
    await bot.process_commands(message)

顺便说一下,@commands.has_role(...)不适用于on_message。尽管没有任何错误(因为已经进行了检查),has_role但实际上并没有按您期望的那样工作。

@has_role装饰器的替代方法是:

@bot.event
async def on_message(message):
    if message.channel.is_private or discord.utils.get(message.author.roles, name="Admin") is None:
        return False

    if message.content.startswith('/lockdown'):
       ...
    await bot.process_commands(message)


 类似资料:
  • 问题内容: 基本上,一切似乎都可以正常运行并启动,但是由于某些原因,我无法调用任何命令。我已经很轻松地环顾了一个小时,然后看了一些示例/观看视频,但我终生无法找出问题所在。代码如下: 我在中拥有的调试输出实际上可以正常工作并做出响应,并且整个bot都可以运行,没有任何异常,但是它只是不会调用命令。 问题答案: 覆盖提供的默认值将禁止运行任何其他命令。要解决此问题,请在的末尾添加一行。例如: 默认值

  • 我试图从aws上订阅的主题接收消息,我可以发布到该主题,但无法在paho mqtt应用程序上接收到消息。在AWS物联网客户端中,它工作得非常完美。 我的代码 我的物联网地址:{“版本”:“2012-10-17”,“声明”:[{“效果”:“允许”,“行动”:“物联网”,“资源”:“arn:aws:iot:us-west-2:account_-id:client/myNode”},{“效果”:“允许”

  • 问题内容: 我一直在学习redis和node.js。我有两个问题,找不到令人满意的答案。 我的第一个问题是关于在node.js中重用Redis客户端。我找到了这个问题和答案:如何在socket.io中重用Redis连接,但还不足以让我满意。 现在,如果我在连接事件中创建redis客户端,它将为每个连接生成。因此,如果我有2万个并发用户,那么将有2万个Redis客户端。 如果我将其放在连接事件之外,

  • 我试图在fabric rocket chat上联系,但没有得到太多帮助,因此在SO上发布了它。我有以下疑问: 我们是否可以在链码内访问块高度(我知道这在客户端是可行的,但在链码内是否可能) 可以从链码中的正在进行的事务调用新事务吗? 想知道hyperledger Fabric中存储的数据的历史记录在哪里 我们可以根据链码中的transactionid进行查询吗? 在fabric链码中编写调度程序是

  • 我正在为Minecraft服务器的discord制作一个机器人。我在下面有一个on_会员加入事件和on_消息事件。on_member_join工作得很好,但是当我在discord服务器中发送消息时,on_message事件内部不会发生任何事情。这是我的代码,如果有人有可能的解决方案,我会非常感激。

  • 问题内容: 我有一个ListView,并且在每个列表项中都有一些TextViews和一个CheckBox。当我检查一个CheckBox并触发onCheckedChangeListener时,一切都会正常进行。但是,一旦选中一个随机的其他复选框。这是一个例子。 如果我单击第一个CheckBox:选中8。检查15。已检查21。已检查27。检查33。检查41。然后,如果我一直向上滚动,则直到6都不会检查