商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > 如何修复 Discord Bot 在频道中不响应 $inspire 命令的问题

如何修复 Discord Bot 在频道中不响应 $inspire 命令的问题

  发布于2026-07-12 阅读(0)

扫一扫,手机访问

Discord Bot 明明显示在线,可频道里发 $inspire 就是没反应?这个问题其实挺常见的,核心原因就两个:message_content 意图没开,以及 API 的 URL 写错了——把 random 拼成了 ranom。本文一次性把这两个坑都填上。

先说说现象:Bot 在 Discord 里显示 Online,但你发 $inspire 它就跟没看见一样,完全不搭理你。这其实不是 Bot 挂了,而是它压根没读到你的消息。

时间回到 2022 年,Discord 搞了个新规——Bot 必须明确声明自己要干什么,也就是所谓的“意图”(Intents)。尤其是想读取普通文本消息里的内容(比如检测 $inspire 这个命令),message_content 这个意图必须显式打开。否则,on_message 事件根本收不到非私聊消息的内容,命令自然就“静默失效”了。更火上浇油的是,代码里请求 ZenQuotes API 的地址也写错了:https://zenquotes.io/api/ranom 应该是 https://zenquotes.io/api/random,少写一个字母,请求直接返回 404 或者空数据,quote 当然拿不到。

下面是修复后的完整代码,基于 discord.py v2.3+,兼容 Replit 环境,直接替换就能用:

import os
import discord
import requests

# ✅ 启用 message_content 意图(必需!)
intents = discord.Intents.default()
intents.message_content = True  # 关键修复项
client = discord.Client(intents=intents)

def get_quote():
    try:
        # ✅ 修正 URL:'random' 而非 'ranom'
        response = requests.get("https://zenquotes.io/api/random")
        response.raise_for_status()  # 抛出 HTTP 错误(如 404)
        data = response.json()
        if not data or len(data) == 0:
            return "暂无可用名言,请稍后再试。"
        item = data[0]
        return f"{item['q']} — {item['a']}"
    except Exception as e:
        print(f"获取名言时出错:{e}")
        return "获取名言失败,请检查网络或 API 状态。"

@client.event
async def on_ready():
    print(f"We ha ve logged in as {client.user}")

@client.event
async def on_message(message):
    # 忽略 Bot 自身消息(防止自触发)
    if message.author == client.user:
        return

    # ✅ 正确监听频道消息(依赖 intents.message_content = True)
    if message.content.startswith('$inspire'):
        quote = get_quote()
        await message.channel.send(quote)

client.run(os.environ['TOKEN'])

⚠️ 关键注意事项:

  • 权限配置双重验证:代码里把 intents.message_content = True 打开只是第一步,你还得去 Discord Developer Portal,找到你的 Bot 应用 → Bot 标签页 → 把 MESSAGE CONTENT INTENT 开关拨到 ON。两边都打开,才能生效。少一个都不行。
  • Replit 环境提示:确保 .env 文件里的 TOKEN 变量设置正确,别有多余的空格或引号。另外,Replit 免费版对外部请求频率有限制,如果频繁调用 ZenQuotes API 遇到限流,建议加个简单缓存或者错误重试逻辑。
  • 进阶推荐:改用 commands.Bot
    如果打算扩展更多命令,强烈建议切换到 discord.ext.commands 框架。它自动处理命令前缀、参数解析和错误反馈,代码更健壮、维护起来也省心很多。

修复之后,在任何已授权的 Discord 文本频道里发 $inspire,Bot 就能实时返回一条随机哲理名言了。记住:意图启用 + API 地址正确 + 门户权限开启 = 命令可靠响应,缺一不可。

本文转载于:https://www.php.cn/faq/2812389.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注