【问题标题】:Command Case Insensitve命令不区分大小写
【发布时间】:2018-11-04 15:35:43
【问题描述】:

如果成员在下部或上部或混合中使用以下命令,如何使以下命令起作用。 如果成员使用ping 它可以工作。 但如果成员使用Ping 则不起作用。

@bot.event
async def on_message(message):
    message.content = message.content.lower()
    await bot.process_commands(message)

    @bot.command(pass_context=True)
    async def ping(ctx):
        msg = 'Pong {0.author.mention}'.format(ctx.message)
        await bot.say(msg)

更新:

on_message 以上在单个文件中正常工作,但我将主文件拆分为多个文件。现在如何使它适用于所有文件中的 cog。

【问题讨论】:

  • 回复被删除了?
  • @Benjin Super bro 它真的很有效谢谢...但我还有另一个问题async def ping(ctx): 有效,但我如何使它适用于async def mobile phones(ctx):mobile phones 之间有一个空格,我们需要那个空格。
  • 我建议编辑此问题或创建一个新问题以包含您的新案例。但简而言之,on_message 事件应该是可能的。
  • @Benjin 好的,上面的代码如何为错误的命令添加返回消息。例如:如果有人输入ping,它会回复Pong,但是如果有人输入pinng 或任何错误的命令,它会在bash 中生成错误,但它仍然会继续运行脚本。所以我需要的是,如果有人输入错误的命令,他们应该在同一频道Please use correct command 中收到一条消息

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


【解决方案1】:

您可以在创建时将case_insensitive 选项传递给Bot

from discord.ext import commands

bot = commands.Bot('!', case_insensitive=True)

@bot.command(pass_context=True)
async def ping(ctx):
    msg = 'Pong {0.author.mention}'.format(ctx.message)
    await bot.say(msg)

【讨论】:

  • 你好帕特里克,这个对我不起作用。 @bot.event async def on_message(message): message.content = message.content.lower() await bot.process_commands(message) 这适用于单个文件,但如何使其适用于所有文件中的 cog。
  • 去掉装饰器,把签名改成on_message(self, message),把bot改成self.bot
  • 是的,我在它起作用之前尝试过。但如果使用命令,我会收到多个回复。如果我在所有 cogs 文件中添加 on_message
  • 如果您在多个 cog 上有许多 on_message 事件,那么所有这些 on_message 事件都将被触发。这意味着可能会为一条消息调用许多 process_commands
  • 没有。尽管您将逻辑拆分到多个文件中,但您将所有这些 cog 加载到一个机器人中。您无需复制任何代码。
猜你喜欢
  • 2018-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-21
  • 1970-01-01
  • 2014-09-25
  • 2021-06-01
  • 2021-04-12
相关资源
最近更新 更多