首页 > 解决方案 > 语音频道用户有 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。

标签: c#discord.net

解决方案


如本评论所述

语音频道用户有 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方法会为离线用户抛出异常。


推荐阅读