コード例 #1
0
        public async Task ReleaseVoiceChannel([Summary("The id of the observed voice channel")] ulong voiceChannelId)
        {
            IReadOnlyCollection <IVoiceChannel> guildVoiceChannels = await Context.Guild.GetVoiceChannelsAsync();

            IVoiceChannel voiceChannel = guildVoiceChannels.FirstOrDefault(currentVoiceChannel => currentVoiceChannel.Id == voiceChannelId);

            if (voiceChannel == null)
            {
                await Context.Channel.SendMessageAsync($"Voice channel with id {voiceChannelId} not found on this guild.");
            }
            else if (!_observedVoiceChannelsCache.TryGetValue(voiceChannelId, out ObservedVoiceChannel observedVoiceChannel))
            {
                await Context.Channel.SendMessageAsync($"Voice channel {voiceChannel.Name} hasn't been observed.");
            }
            else
            {
                if (observedVoiceChannel.IsMuted)
                {
                    IEnumerable <IGuildUser> voiceChannelUsers = await voiceChannel
                                                                 .GetUsersAsync()
                                                                 .FlattenAsync();

                    IEnumerable <Task> unmuteTasks = voiceChannelUsers
                                                     .Where(voiceChannelUser =>
                    {
                        SocketGuildUser socketGuildUser = voiceChannelUser as SocketGuildUser;
                        bool userIsMuted    = socketGuildUser.VoiceState?.IsMuted == true;
                        bool userNotOffline = socketGuildUser.Status != UserStatus.Offline;

                        return(userIsMuted && userNotOffline);
                    })
                                                     .Select(voiceChannelUser => voiceChannelUser.ModifyAsync(guildUserProperties => guildUserProperties.Mute = false));

                    await Task.WhenAll(unmuteTasks);
                }

                _observedVoiceChannelsCache.Remove(voiceChannelId);

                await Context.Channel.SendMessageAsync($"Voice channel {voiceChannel.Name} has been released from observation.");
            }
        }
コード例 #2
0
        public Task OnChannelDestroyed(SocketChannel socketChannel)
        {
            _observedVoiceChannelsCache.Remove(socketChannel.Id);

            return(Task.CompletedTask);
        }