当有人提到机器人时,我希望它回应说:“嘿!有人提到过我。我的前缀是 >
。你可以输入 >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)
答案 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