使用Discord.py开发机器人时所有附件显示为空的问题求助
Discord.py开发机器人时所有附件显示为空的问题求助
你好,我看了你的问题和代码,附件显示为空的情况大概率是Intent权限配置不完整或者代码里的小语法问题导致的,下面给你一步步分析和解决方法:
一、优先修复Intent配置(最可能的原因)
Discord现在的Intent系统对消息内容、附件这类敏感信息有严格的权限控制,你的代码里只开启了intents.messages = True,这不足以让机器人获取到附件数据,需要补充以下配置:
- 修改代码里的Intent设置:
把原来的Intent初始化代码改成这样:
intents = discord.Intents.default() intents.messages = True intents.message_content = True # 必须开启这个才能读取消息的附件和内容细节
解释:message_content属于「特权Intent」,默认是关闭状态,只有开启它,机器人才能访问消息里的附件、文本内容等信息。
- 在Discord开发者后台开启对应特权Intent:
登录Discord开发者门户,找到你的机器人应用,进入「Bot」页面,拉到「Privileged Gateway Intents」区域,开启「Message Content Intent」选项,记得点击保存更改。
二、修复代码里的语法错误
你代码的最后一行bot.run('YOUR_DISCORD_BOT_TOKEN'少了一个闭合括号,这会导致机器人无法正常启动,改成:
bot.run('YOUR_DISCORD_BOT_TOKEN')
三、额外的排查优化建议
- 检查机器人服务器权限:确保你的机器人在目标服务器中拥有「读取消息历史」「发送消息」「读取消息内容」这些核心权限,可以在服务器设置的「角色」面板里给机器人角色添加这些权限。
- 优化日志打印:把日志里的附件打印语句改成更详细的格式,方便排查:
这样能更直观看到是否真的没有获取到附件,还是只是打印格式的问题。logging.debug(f'附件数量: {len(message.attachments)}, 附件详情: {[att.filename for att in message.attachments]}') - 历史消息权限说明:如果是读取机器人加入服务器之前的历史消息附件,Discord API可能会限制访问,但你提到新消息也显示为空,所以主要还是Intent的问题。
调整后的关键代码片段
import discord import cv2 import numpy as np from PIL import Image import pytesseract from discord.ext import commands import aiohttp import logging logging.basicConfig(level=logging.DEBUG) # 修复后的Intent配置 intents = discord.Intents.default() intents.messages = True intents.message_content = True bot = commands.Bot(command_prefix="!", intents=intents) # ... 其余函数逻辑保持不变 ... # 修复后的启动语句 bot.run('YOUR_DISCORD_BOT_TOKEN')
备注:内容来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

