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

为何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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:16:02