试图让 discord.py bot 在被提及时说些什么,但没有响应

时间:2021-05-12 19:13:18

标签: python discord discord.py

当有人提到机器人时,我希望它回应说:“嘿!有人提到过我。我的前缀是 >。你可以输入 >help 来查看我的命令。”我已经写出代码,但是当它被提及时,机器人根本没有响应。当我运行它或提到机器人时,我没有收到任何错误。我如何让这个工作?我的代码如下。提前致谢。

@bot.event
async def on_message(message):
  if message.author.id == bot.user.id:
       return
  msg_content = message.content.lower()

  mention = ['@830599839623675925', '@Ultimate Bot']
 
  if any(word in msg_content for word in mention):
    await message.channel.send("Hey! I've been mentioned. My prefix is `>`. You can type `>help` to see my commands.")
  else:
    await bot.process_commands(message)

2 个答案:

答案 0 :(得分:1)

您可以使用 mentioned_in() 方法。

所以在这种情况下是;

@bot.event
async def on_message(message):
  if message.author.id == bot.user.id: return
 
  if bot.user.mentioned_in(message):
    await message.channel.send("Hey! I've been mentioned.")
  
  await bot.process_commands(message)

注意事项:

  • mention 变量等值进行硬编码是不好的做法。这使得维护代码变得更加困难,并且当您的项目变得更大时,您可能会质疑这些看似随机的字符串所指的目的是什么。例如,如果您要更改机器人的名称,或者将您的代码转移到新的机器人,那么检查整个代码库并挑选并更改这些值将远非理想。

  • 我不知道您申请的其余部分,但您可能不希望 process_commands() 出现在 else 语句中。例如,如果用户在他们的消息中提到了机器人,但正在使用命令,则该命令将被阻止,因为您没有触发 process_commands()

希望这能回答您的问题

答案 1 :(得分:0)

您可以改为检查 bot.user 是否在消息提及中。

您还可以检查是否使用了机器人显示名称。

combine.keys