为何on_message()会导致Discord机器人命令失效?
嘿,来解决你的Discord机器人命令失效问题!
看你说机器人启动正常但没法调用任何命令,我从你给出的代码和常见坑点逐一帮你排查:
首先,你的代码缺了关键的命令定义!
目前你只写了on_ready启动事件,完全没定义任何可被调用的命令呀😅。要让机器人响应命令,必须用@bot.command()装饰器来创建命令,比如加一段:
@bot.command() async def hello(ctx): await ctx.send("嘿,我收到命令啦!")
这样用户在服务器里发-hello(你的前缀是-),机器人才会回复你。
然后,排查这些常见的隐形坑:
- 权限不够:确保机器人在服务器里有「发送消息」「读取消息历史」「查看频道」的权限,没权限的话它就算收到命令也没法回复,看起来就像没反应。
- 前缀输错了:你设的命令前缀是
-,要确认用户发的是-命令名,比如上面的例子得发-hello,不是直接发hello或者其他符号。 - 自定义了
on_message但没加关键代码:如果你后来加了on_message事件处理消息,一定要加上await bot.process_commands(message),不然机器人会只处理你写的消息逻辑,完全忽略命令!比如:
@bot.event async def on_message(message): # 必须加这行,不然命令全失效! await bot.process_commands(message) # 你的其他消息处理代码
- Intents没开全:现在Discord.py要求必须开启必要的Intents(在Discord开发者后台的Bot页面里,把Privileged Gateway Intents的三个开关都打开),不然机器人连消息都读不到,更别说命令了。
给你一个能直接跑的完整模板
你可以参考这个基础代码,替换成你的机器人Token就能测试:
import discord from discord.ext import commands # 开启所有必要的Intents,定义前缀为'-' bot = commands.Bot(command_prefix='-', intents=discord.Intents.all()) @bot.event async def on_ready(): print('Logged in as') print(bot.user.name) print(bot.user.id) print('------') # 测试用的ping命令 @bot.command() async def ping(ctx): await ctx.send(f'Pong!延迟 {round(bot.latency * 1000)}ms') # 替换成你的机器人Token bot.run('你的机器人Token')
内容的提问来源于stack exchange,提问作者Acemcbean
相关产品推荐
相关产品推荐

