发布于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'])
修复之后,在任何已授权的 Discord 文本频道里发 $inspire,Bot 就能实时返回一条随机哲理名言了。记住:意图启用 + API 地址正确 + 门户权限开启 = 命令可靠响应,缺一不可。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8