如何让我的机器人在命令前缀之后检测到消息?

时间:2021-05-16 10:23:56

标签: python discord.py

据我所知,from discord.ext import commands 是这样工作的:

bot = commands.Bot(command_prefix='John')


@bot.command
async def help(ctx):
      ctx.send.message('help_message')

如果我发送John help,机器人会向频道发送“帮助消息”。

但是,我也希望我的机器人使用 async def on_message 检测消息,并且我希望它检测每条消息,检查其中是否包含 John,以及是否包含 >John 在里面,检查消息的其余部分,如果它不是命令之一,并且它有某个词,我希望它发送一个预先分配的响应。

我希望它是这样的:

commandlist = ['help','command1','command2','command3']

input = ['Hi','Hello','Sup','Hey'] 

@bot.event
async def on_message(message):
      if 'John' in message:
            if all(commandlist) not in message and input in message:
                 await message.channel.send('Hi!')

如果我说John help,机器人会发送help_message,如果我说Hi JohnHey John,机器人会说

上面的代码有点像伪代码,所以可能有很多错误。

1 个答案:

答案 0 :(得分:0)

您需要检查 on_message 装饰器中发送的字符串的第一个单词。 我将使用 str.split() 方法获取字符串的第一个单词以检查它是否等于 John。

@bot.event()
async def on_message(message):
   x = message.split(' ', 1)[0]    # This splits the first word of the string
   x = "John":
   while True:
     try:
     if commandlist in message:
        await message.channel.send('Your string')    
         break
     else:
       if input in message:
         await message.channel.send('Other String')
          break

我希望这对您的需要有所帮助!