You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 11:06:04