示例#1
0
        private async void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            if (_waitingVoiceChannel == null || _activeVoiceChannel == null || userVoiceInfos.Count == 0)
            {
                return;
            }

            if (userVoiceInfos[0].ConnectedDateTime.AddSeconds(activeChatTimeMax) > DateTime.Now ||
                _guestInActiveDateTime.AddSeconds(activeChatTimeMax) > DateTime.Now)
            {
                return;
            }

            if (_guestInActive != null)
            {
                // ReSharper disable once PossibleNullReferenceException
                await(_guestInActive as IGuildUser)?.ModifyAsync(x => x.Channel = _waitingVoiceChannel);
                UserVoiceInfo u = new UserVoiceInfo();
                u.Set(_guestInActive, _waitingVoiceChannel, DateTime.Now);
                userVoiceInfos.Add(u);
                _guestInActive = null;
            }

            _guestInActive = userVoiceInfos[0].User;
            // ReSharper disable once PossibleNullReferenceException
            await(userVoiceInfos[0].User as IGuildUser)?.ModifyAsync(x => x.Channel = _activeVoiceChannel);
            _guestInActiveDateTime = DateTime.Now;
            userVoiceInfos.RemoveAt(0);
        }
示例#2
0
        private async Task _client_UserVoiceStateUpdated(SocketUser user, SocketVoiceState previousVoiceState, SocketVoiceState currentVoiceState)
        {
            Log.Info($"User: {user}, prev: {previousVoiceState}, curr: {currentVoiceState.VoiceChannel}");

            if (_activeVoiceChannel == null || _waitingVoiceChannel == null)
            {
                SocketGuild guild = _client.GetGuild(566158253474709505);

                IReadOnlyCollection <SocketVoiceChannel> voiceChannels = guild.VoiceChannels;

                foreach (SocketVoiceChannel channel in voiceChannels)
                {
                    if (channel.Name == "Active")
                    {
                        _activeVoiceChannel = channel;
                    }

                    if (channel.Name == "Waiting")
                    {
                        _waitingVoiceChannel = channel;
                    }
                }

                Log.Info($"{_activeVoiceChannel} {_waitingVoiceChannel}");
            }

            UserVoiceInfo userVoice = new UserVoiceInfo();

            userVoice.Set(user, currentVoiceState.VoiceChannel, DateTime.Now);

            if (currentVoiceState.VoiceChannel == _waitingVoiceChannel)
            {
                if (!userVoiceInfos.Any(u => u.User.Id == user.Id))
                {
                    userVoiceInfos.Add(userVoice);
                }

                Log.Info($"Waiting users");

                foreach (UserVoiceInfo info in userVoiceInfos)
                {
                    Log.Info($"{info.User} [{info.ConnectedDateTime}]", false);
                }
            }
            else if (currentVoiceState.VoiceChannel == _activeVoiceChannel || currentVoiceState.VoiceChannel == null)
            {
                foreach (UserVoiceInfo info in userVoiceInfos.Where(u => u.User.Id == user.Id))
                {
                    while (true)
                    {
                        if (!userVoiceInfos.Remove(info))
                        {
                            break;
                        }
                    }
                }

                Log.Info($"Waiting users");

                foreach (UserVoiceInfo info in userVoiceInfos)
                {
                    Log.Info($"{info.User} [{info.ConnectedDateTime}]", false);
                }
            }
        }