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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 19:15:28