Discord.NET中SocketUser转SocketGuildUser返回null问题
Discord.Net机器人提及用户转换为SocketGuildUser返回null问题
问题现象
开发基于C#的Discord.Net机器人时,需要将消息内被提及的用户转换为SocketGuildUser类型:
- 读取自身用户对象时转换可正常执行
- 读取朋友的用户对象时转换失效:程序可获取到SocketUnknownUser类型对象,但无法转换得到SocketGuildUser,仅返回null
此前移除该朋友账号的某一角色后,机器人曾正常运行数日,但在相关业务代码未做任何修改的前提下,该问题突然复现。
复现代码
var userToModCheck = message.MentionedUsers.ElementAt(0); var userToMod = message.MentionedUsers.ElementAt(0) as SocketGuildUser;
代码运行表现:
userToModCheck可返回正确的用户名与用户ID,但对象类型为SocketUnknownUseruserToMod返回值为null
已完成排查操作
- 检查Discord开发者门户中机器人的
Privileged Gateway Intents权限配置 - 调用Context.Guild.GetUser方法,通过用户ID单独获取SocketGuildUser
- 调整相关用户的角色配置
- 重启机器人服务与本地设备
- 检索互联网相关解决方案
特殊现象说明
- 当被提及用户处于在线状态时,该异常不会出现
- 将配置项
AlwaysDownloadUsers设为true无法解决该问题
内容的提问来源于stack exchange,提问作者BurgerFanMan
相关产品推荐
相关产品推荐

