如何解决将 guildUserProperties.Mute 设置为 false 时,Bot 不会取消用户静音
我使用 discord.Net 创建了一个 discord 机器人,它观察来自多个公会的多个语音频道。我正在侦听 UserVoiceStateUpdated
事件,因为每当用户加入观察到的已静音的语音频道时,该用户应该被机器人静音。每当用户离开观察到的语音频道时,用户应该取消静音。
我有一个内存缓存,用于保存所有观察到的语音通道的信息。每个信息对象提供这些信息
public class ObservedVoiceChannelInfo
{
public ulong VoiceChannelId { get; set; }
public bool Muted { get; set; }
public List<ulong> MutedUserIds { get; set; } = new List<ulong>();
}
对于活动部分,我考虑了以下几点:
基本上我想要实现的是:如果有人加入观察到的静音语音频道,请将该用户静音。如果该用户离开此频道,则在状态为静音的情况下取消静音。
这是我当前的实现(observedVoiceChannelsCache
是具有观察语音通道的内存缓存字典)
private async Task OnUserVoiceStateUpdated(SocketUser socketUser,SocketVoiceState oldSocketVoiceState,SocketVoiceState newSocketVoiceState)
{
SocketGuildUser socketGuildUser = socketUser as SocketGuildUser;
if (newSocketVoiceState.IsMuted &&
newSocketVoiceState.VoiceChannel == null &&
_observedVoiceChannelsCache.TryGetValue(oldSocketVoiceState.VoiceChannel.Id,out ObservedVoiceChannelInfo oldobservedVoiceChannelInfo) &&
oldobservedVoiceChannelInfo.Muted)
{
bool userRemovedFromMuteList = oldobservedVoiceChannelInfo.MutedUserIds.Remove(socketGuildUser.Id);
if (userRemovedFromMuteList)
await SetUserVoiceState(socketGuildUser,false);
}
else if (!newSocketVoiceState.IsMuted &&
newSocketVoiceState.VoiceChannel != null &&
_observedVoiceChannelsCache.TryGetValue(newSocketVoiceState.VoiceChannel.Id,out ObservedVoiceChannelInfo newObservedVoiceChannelInfo) &&
newObservedVoiceChannelInfo.Muted)
{
await SetUserVoiceState(socketGuildUser,true);
newObservedVoiceChannelInfo.MutedUserIds.Add(socketGuildUser.Id);
}
}
private async Task SetUserVoiceState(SocketGuildUser socketGuildUser,bool muted)
{
await socketGuildUser.ModifyAsync(guildUserProperties => { guildUserProperties.Mute = muted; });
}
else 块似乎工作正常(加入观察到的静音频道)。但是第一个 if 块(离开观察到的静音通道)不起作用。用户从列表中删除,但当使用 SetUserVoiceState
调用 false
时,用户不会被机器人取消静音。我可以通过加入观察到的静音语音通道,离开它并加入另一个未观察到的语音通道来重现它。那我还是静音了。
有人知道这里缺少什么吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。