Python编写Discord Bot实现关键词列表匹配对应回复问题求助
问题原因分析
- 首次代码语法错误的原因:两个关键词遍历的
for循环完全缩进在on_message函数之外,无法访问函数内的message参数;同时elif语法要求必须紧跟同层级的if/elif代码块,不能直接作为for循环下的判断开头,因此触发SyntaxError。 - 二次修改后仅响应告别词的原因:discord.py的事件处理器为覆盖式注册,重复定义同名的
on_message事件时,只有最后注册的版本会生效,前两个处理逻辑被最后处理告别词的版本覆盖,因此仅能响应farewell列表的关键词。
正确实现方案
完整可运行代码如下:
import discord import os from keep_alive import keep_alive client = discord.Client() @client.event async def on_ready(): print('We have logged in as {0.user}'.format(client)) greetings = ['hi', 'hello'] farewells = ['bye', 'goodbye'] @client.event async def on_message(message): # 忽略机器人自身发送的消息 if message.author == client.user: return # 匹配问候关键词,统一转小写实现不区分大小写匹配 if any(word in message.content.lower() for word in greetings): await message.channel.send('Hey') # 匹配告别关键词 elif any(word in message.content.lower() for word in farewells): await message.channel.send('goodbye') keep_alive() client.run(os.getenv('TOKEN'))
补充说明:代码中添加的
.lower()用于实现不区分大小写匹配,用户发送Hi、HELLO、Bye等大小写混合的内容时也能正常触发回复,不需要该特性可以直接删除。
内容的提问来源于stack exchange,提问作者user17460788
相关产品推荐
相关产品推荐

