Discord机器人无法获取消息内容,添加Intents后触发权限错误
解决Discord机器人特权意图错误及日志记录问题
一、修复PrivilegedIntentsRequired启动错误
你使用了discord.Intents.all(),这会包含Discord的特权网关意图(如成员列表、用户状态),这类意图必须在Discord开发者后台手动启用才能使用,或者你可以仅启用必要的非特权意图:
方案1:启用特权意图(若需相关功能)
- 打开Discord开发者应用管理页面,找到你的机器人应用
- 进入「Bot」选项卡,下拉找到「Privileged Gateway Intents」区域
- 开启需要的特权意图(如Server Members Intent、Presence Intent)
- 保存更改后重启机器人
方案2:仅启用必要非特权意图(推荐,无需特权功能时)
修改你的Astro机器人创建器代码,替换Intents.all()为仅需要的意图:
import discord from discord.ext import commands # 启用默认意图+消息内容权限(若需读取消息内容) intents = discord.Intents.default() intents.message_content = True class Astro: def __init__(self, token, prefix='/'): self.bot = commands.Bot(command_prefix=prefix, intents=intents) self.token = token async def on_ready(self): print(f'Bot is ready. @{self.bot.user}') def run(self): self.bot.run(self.token) def new(token, prefix='/'): bot = Astro(token, prefix) return bot
二、修复日志不记录内容的问题
你的on_message事件存在两处问题,修改如下:
@Bot.event async def on_message(message): # 必须调用此方法,确保命令和其他事件正常触发 await Bot.process_commands(message) msg = str(message.clean_content) author = message.author channel_name = message.channel.name # 添加换行符避免内容堆积,指定编码防止乱码 with open("messages.log", "a", encoding="utf-8") as f: f.write(f"{msg} | {author} | {channel_name}\n")
同时确保已在意图中启用message_content(对应上述代码中的设置),否则无法读取消息内容。
内容的提问来源于stack exchange,提问作者Arbitrary
相关产品推荐
相关产品推荐

