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

discord.py框架下@client.command命令无响应问题排查求助

discord.py 命令无响应修复方案

核心问题

你自定义了on_message事件后没有手动触发命令处理逻辑,discord.py原生的on_message会自动执行命令匹配,重写该事件后必须手动调用处理方法,否则所有@client.command装饰的命令都不会被触发。

此外还有两处配置错误也可能导致异常:

  1. 你从环境变量读取了TOKEN变量,但调用client.run()时传入的是硬编码字符串"token",实际运行时应该传入读取到的变量值
  2. 若你使用的是discord.py 2.0及以上版本,需要额外开启消息内容意图,否则无法读取普通消息内容做命令匹配

修复后的完整代码

import discord
import os
import random
import asyncio
from discord import channel
from dotenv import load_dotenv
from neuralintents import GenericAssistant
from discord.ext import commands

chatbot = GenericAssistant('intents.json')
chatbot.train_model()
chatbot.save_model()

print("Bot running...")

# 新增意图配置,适配高版本discord.py
intents = discord.Intents.default()
intents.message_content = True
client = commands.Bot(command_prefix="<", intents=intents)

load_dotenv()
TOKEN = os.getenv('token')

@client.event
async def on_ready():
    print("Bot is ready!")

@client.event 
async def on_message(message):
    if message.author == client.user:
        return
    if message.content.startswith("jag"):
        response = chatbot.request(message.content[4:])
        await message.channel.send(response)
    # 新增此行,手动触发命令处理逻辑
    await client.process_commands(message)

@client.command()
async def hello(ctx):
    await ctx.send("hi!")
    
# 修正传入的token为读取到的环境变量值
client.run(TOKEN)

额外操作提示

  • 若使用2.0及以上版本discord.py,需要先进入Discord开发者后台的对应Bot配置页面,开启Message Content Intent权限开关,否则无法正常读取用户发送的消息内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 22:15:04