c# - 语音频道用户有 UserStatus.Offline 虽然每个人都在线
问题描述
我正在使用 Discord.Net 并希望在语音频道中将用户静音/取消静音。我不确定是否
voiceChannelUser.ModifyAsync(guildUserProperties => guildUserProperties.Mute = true /* or false */)
如果用户不在线并且机器人尝试将他静音/取消静音,则会引发异常。因此,当我加入语音频道并且机器人从该语音频道获取所有用户时
IEnumerable<IGuildUser> voiceChannelUsers = await voiceChannel.GetUsersAsync().FlattenAsync();
正如预期的那样,该集合返回计数 1。在运行静音/取消静音任务之前,我不知道是否可能是用户已离线并且集合不知道。那么ModifyAsync
可能会因为用户现在离线而引发异常?
问题是,当通过检查我自己的状态时
bool iAmOffline = voiceChannelUsers.First().Status == UserStatus.Offline; // expected false, actual true
它返回true
虽然它应该是false
因为我在线。所以
- 是否需要进行检查以防止异常?
- 如果是,为什么它说我离线,虽然我没有?
我正在使用 Discord.Net v2.3。
解决方案
如本评论所述
语音频道用户有 UserStatus.Offline 虽然每个人都在线
我所要做的就是启用存在意图
因此,当取消静音用户静音时,我使用这样的代码
IGuildUser guildUser = null; // receive the user from somewhere
SocketGuildUser socketGuildUser = guildUser as SocketGuildUser;
bool userIsMuted = socketGuildUser.VoiceState?.IsMuted == true;
bool userNotOffline = socketGuildUser.Status != UserStatus.Offline;
if (userIsMuted && userNotOffline)
{
await guildUser.ModifyAsync(guildUserProperties => guildUserProperties.Mute = false);
}
看来我必须执行离线检查,否则该ModifyAsync
方法会为离线用户抛出异常。
推荐阅读
- typescript - 更改深度嵌套对象结构中的值类型
- c# - 如果它等于它的反转,如何反转布尔值
- python - 扩展两个列表并在一行中取中位数
- nativescript - NativeScript 无法启动 iOS 模拟器
- python - 读取在 SSH 服务器上执行的命令的输出,使用 Paramiko 作为字符串,而不是字节
- python - 为什么我的字符串反转 my_str[len(my_str)-1:-1:-1] 不产生输出?
- flutter - 基于 Firebase 云消息传递 (FCM) 的颤振状态下的食品配送?
- excel - VBA无法识别工作表激活
- symfony - Symfony - Sonata 管理员 - 覆盖验证
- python - Keras 模型未在 tensorflow 中运行