discord.py框架下@client.command命令无响应问题排查求助
discord.py 命令无响应修复方案
核心问题
你自定义了on_message事件后没有手动触发命令处理逻辑,discord.py原生的on_message会自动执行命令匹配,重写该事件后必须手动调用处理方法,否则所有@client.command装饰的命令都不会被触发。
此外还有两处配置错误也可能导致异常:
- 你从环境变量读取了
TOKEN变量,但调用client.run()时传入的是硬编码字符串"token",实际运行时应该传入读取到的变量值 - 若你使用的是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
相关产品推荐
相关产品推荐

