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); }
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); } } }