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

Discord Bot的on_message方法无法识别'haki.'命令前缀问题

解决Discord Bot无法响应消息的问题

核心问题与修复步骤

1. 开启消息内容读取权限(Intents)

discord.py 2.0版本后,必须显式开启message_content意图才能读取用户消息内容,默认的Intents.default()不包含该权限。

修改Intents配置代码:

intents = discord.Intents.default()
intents.message_content = True  # 开启消息内容权限
client = discord.Client(intents=intents)

同时需要在Discord开发者门户的Bot页面,找到「Privileged Gateway Intents」,开启Message Content Intent开关,否则代码设置无效。

2. 修正消息发送逻辑

原代码中await message.channel.send(message)错误,send()方法需要传入字符串而非Message对象。需要提取前缀后的内容进行回复:

@client.event
async def on_message(message):
    if message.author == client.user:  # 跳过Bot自身消息
        return
    if message.content.startswith(command_prefix):
        # 截取前缀后的内容
        reply_content = message.content[len(command_prefix):].strip()
        await message.channel.send(reply_content)

完整可运行代码

import discord

token = "mydiscordbottoken"
# 配置Intents
intents = discord.Intents.default()
intents.message_content = True
client = discord.Client(intents=intents)
command_prefix = "haki."

@client.event
async def on_ready():
    print('{0.user} BOT is ready'.format(client))
    
@client.event
async def on_message(message):
    if message.author == client.user:
        return
    if message.content.startswith(command_prefix):
        reply_content = message.content[len(command_prefix):].strip()
        await message.channel.send(reply_content)

client.run(token)

额外检查项

  • 确保Bot在目标服务器拥有「发送消息」和「读取消息历史」的权限
  • 确认Discord开发者门户中已正确开启Message Content Intent

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 20:45:37