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

开发Discord聊天机器人遇问题:无消息响应、控制台不打印用户消息

Discord机器人无法响应消息及打印问题的解决方案

问题根源

  • 事件嵌套错误:on_message事件被定义在on_ready事件内部,Discord.py无法识别嵌套的事件处理器,导致消息事件永远不会触发,自然不会执行打印或消息响应逻辑。
  • Intent权限不足:默认的discord.Intents.default()不包含message_content权限,即使事件注册正确,机器人也无法读取消息内容。
  • 无用参数冗余:discord.Client不需要command_prefix参数,这是commands.Bot类的专属配置项,应移除。

修复后的代码

import discord

# 配置所需的Intents,开启消息内容读取权限
intents = discord.Intents.default()
intents.message_content = True

client = discord.Client(intents=intents)

@client.event
async def on_ready():
    print('logged in as {0.user}'.format(client))

# 将on_message事件移至on_ready外部,作为独立的事件处理器
@client.event
async def on_message(message):
    # 过滤机器人自身的消息,避免循环触发
    if message.author == client.user:
        return
    
    username = str(message.author).split('#')[0]
    user_message = str(message.content)
    channel = str(message.channel.name)
    print(f'{username}: {user_message} ({channel})')

    if user_message == 'Hello':
          await message.channel.send('Howdy!')

# 替换为你的机器人TOKEN并启动
client.run('你的机器人TOKEN')

关键修复点说明

  • 事件解嵌套:把on_message从on_ready内部移出,作为单独的@client.event装饰函数,确保Discord.py能正确注册并触发该事件。
  • 开启message_content权限:先在Discord开发者门户的机器人页面开启"Message Content Intent"权限,再在代码中设置intents.message_content = True,保证机器人能读取消息内容。
  • 移除冗余参数:删除discord.Client()中的command_prefix='',消除无效配置。
  • 添加自消息过滤:增加if message.author == client.user: return,避免机器人响应自身发送的消息,防止逻辑循环。

内容的提问来源于stack exchange,提问作者Callmemartin_

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 03:54:29