Discord.Net上传图片时SocketMessage.Attachments为空问题排查
问题排查与解决
检查网关意图配置:
Discord Bot需要启用MessageContent和对应场景的消息意图(服务器消息用GuildMessages、私聊用DirectMessages),否则无法获取消息内容和附件。先在Discord开发者门户的Bot页面,找到「Privileged Gateway Intents」开启对应权限,再在代码初始化客户端时指定这些意图:var config = new DiscordSocketConfig { GatewayIntents = GatewayIntents.GuildMessages | GatewayIntents.MessageContent | GatewayIntents.DirectMessages }; var client = new DiscordSocketClient(config);确认消息类型处理:
SocketMessage是所有消息的基类,可先判断是否为用户发送的SocketUserMessage类型再处理,同时建议忽略机器人自身消息避免干扰:private async Task Client_MessageReceived(SocketMessage arg) { if (arg.Author.IsBot) return; if (arg is SocketUserMessage userMsg) { Console.WriteLine(userMsg.Content); Console.WriteLine(userMsg.Attachments.Count); // 可遍历附件查看具体信息 foreach (var attachment in userMsg.Attachments) { Console.WriteLine($"附件地址:{attachment.Url},文件名:{attachment.Filename}"); } } }验证Bot权限:
确保Bot在对应服务器或私聊中拥有「读取消息历史」和「查看频道」的权限,缺少权限会导致无法获取完整消息数据。
内容的提问来源于stack exchange,提问作者Cobra_Fast
相关产品推荐
相关产品推荐

