Browse Source

removing user from channels when leave

Tigran 4 years ago
parent
commit
d875ed4f77

+ 24 - 24
MafiaTelegramBot/Game/GameRooms/GameRoom.GameProcess.cs

@@ -186,7 +186,7 @@ namespace MafiaTelegramBot.Game.GameRooms
                     await PlayersMessageChannel.Send($"{strings.now_turn} ({player.TurnOrder}) {player.NickName}");
                     if (TimerEnabled) await Bot.SendWithMarkdown2(player.ChatId, strings.you_turn_say);
                     await player.CurrentRole.SpeakAction();
-                    if (Players.ContainsKey(player.Id)) await player.CurrentRole.VotingAction(VoteUpList.Count == 0);
+                    if (Players.ContainsKey(player.Id)) await player.CurrentRole.VotingAction(_voteUpList.Count == 0);
                 }
                 if (toEndQueue != null) _turnOrder.Enqueue(player);
                 else toEndQueue = player;
@@ -292,7 +292,7 @@ namespace MafiaTelegramBot.Game.GameRooms
                 var resetEvent = new ManualResetEvent(false);
                 timer.Elapsed += async (_, _) =>
                 {
-                    foreach (var voter in votersPlayers.Where(p => !VoteKillList.ContainsKey(p.Id) && Players.ContainsKey(p.Id)))
+                    foreach (var voter in votersPlayers.Where(p => !_voteKillList.ContainsKey(p.Id) && Players.ContainsKey(p.Id)))
                         await voter.CurrentRole.RandomVoting();
                     resetEvent.Set();
                 };
@@ -305,47 +305,47 @@ namespace MafiaTelegramBot.Game.GameRooms
         {
             await Task.Run(async () =>
             {
-                switch (VoteUpList.Count)
+                switch (_voteUpList.Count)
                 {
                     case 0:
                         await PlayersMessageChannel.Send(strings.nothing_up_to_vote);
                         break;
                     case 1:
                     {
-                        await VoteUpList[0].CurrentRole.Dispatch();
+                        await _voteUpList[0].CurrentRole.Dispatch();
                         break;
                     }
                     default:
                     {
-                        await DefencePhase(VoteUpList);
-                        VoteUpList = await CalculateCandidates();
-                        switch (VoteUpList.Count)
+                        await DefencePhase(_voteUpList);
+                        _voteUpList = await CalculateCandidates();
+                        switch (_voteUpList.Count)
                         {
                             case 0:
                                 await PlayersMessageChannel.Send(strings.nothing_up_to_dispatch);
                                 break;
                             case 1:
-                                await VoteUpList[0].CurrentRole.Dispatch();
+                                await _voteUpList[0].CurrentRole.Dispatch();
                                 break;
                             case > 1:
-                                var copyVoteUpList = VoteUpList.ToList();
-                                await DefencePhase(VoteUpList);
-                                VoteUpList = await CalculateCandidates();
-                                var alivers = copyVoteUpList.Except(VoteUpList).ToList();
+                                var copyVoteUpList = _voteUpList.ToList();
+                                await DefencePhase(_voteUpList);
+                                _voteUpList = await CalculateCandidates();
+                                var alivers = copyVoteUpList.Except(_voteUpList).ToList();
                                 foreach (var alive in alivers)
                                     alive.ElderRoleAchievementEvent();   
                                 
-                                switch (VoteUpList.Count)
+                                switch (_voteUpList.Count)
                                 {
                                     case 0:
                                         await PlayersMessageChannel.Send(strings.nothing_up_to_dispatch);
                                         break;
                                     case 1:
-                                        await VoteUpList[0].CurrentRole.Dispatch();
+                                        await _voteUpList[0].CurrentRole.Dispatch();
                                         break;
                                     default:
                                         await PlayersMessageChannel.Send(strings.villagers_could_not_decide);
-                                        foreach (var alive in VoteUpList) 
+                                        foreach (var alive in _voteUpList) 
                                             alive.ElderRoleAchievementEvent();
                                         break;
                                 }
@@ -354,15 +354,15 @@ namespace MafiaTelegramBot.Game.GameRooms
                         break;
                     }
                 }
-                VoteUpList.Clear();
-                VoteKillList.Clear();
+                _voteUpList.Clear();
+                _voteKillList.Clear();
             });
         }
 
         private async Task<List<Player>> CalculateCandidates()
         {
             var message = strings.results_of_voting;
-            foreach (var (playerId, targetId) in VoteKillList)
+            foreach (var (playerId, targetId) in _voteKillList)
             {
                 message += Players.ContainsKey(playerId) && Players.ContainsKey(targetId)
                     ? $"\n({Players[playerId].TurnOrder}) {Players[playerId].NickName} {strings.vote_to} " +
@@ -371,7 +371,7 @@ namespace MafiaTelegramBot.Game.GameRooms
             if (message == strings.results_of_voting) message = strings.no_one_voted;
             await PlayersMessageChannel.Send(message);
             
-            var votes = VoteUpList.Where(p=>Players.ContainsKey(p.Id))
+            var votes = _voteUpList.Where(p=>Players.ContainsKey(p.Id))
                 .GroupBy(p => p.Id)
                 .Select(item => new {id = item.Key, count = item.Count()})
                 .ToList();
@@ -380,8 +380,8 @@ namespace MafiaTelegramBot.Game.GameRooms
             var max = votes.Max(item => item.count);
             var maxObjects = votes.Where(item => item.count == max);
             result.AddRange(from obj in maxObjects select Players[obj.id]);
-            VoteKillList.Clear();
-            VoteUpList.Clear();
+            _voteKillList.Clear();
+            _voteUpList.Clear();
             return result;
         }
 
@@ -400,7 +400,7 @@ namespace MafiaTelegramBot.Game.GameRooms
                     {
                         if (!toKill)
                         {
-                            if (VoteUpList.AddUnique(Players[targetId]))
+                            if (_voteUpList.AddUnique(Players[targetId]))
                             {
                                 if (playerId != targetId)
                                 {
@@ -414,9 +414,9 @@ namespace MafiaTelegramBot.Game.GameRooms
                                 }
                             }
                         } 
-                        else if (VoteKillList.AddUniqueByKey(playerId, targetId))
+                        else if (_voteKillList.AddUniqueByKey(playerId, targetId))
                         {
-                            VoteUpList.Add(Players[targetId]);
+                            _voteUpList.Add(Players[targetId]);
                             if (messageId != -1)
                             {
                                 if (playerId != targetId)

+ 1 - 1
MafiaTelegramBot/Game/GameRooms/GameRoom.Role.cs

@@ -132,7 +132,7 @@ namespace MafiaTelegramBot.Game.GameRooms
             public async Task VotingAction(bool isFirst = false)
             {
                 var voteTimer = new Timer(Constants.PUT_UP_VOTE_INTERVAL) {AutoReset = false};
-                var alivePlayers = Room.Players.Values.Where(p => p.IsAlive).Except(Room.VoteUpList).ToList();
+                var alivePlayers = Room.Players.Values.Where(p => p.IsAlive).Except(Room._voteUpList).ToList();
                 var message = await Room.PlayersMessageChannel.SendTo(Player.ChatId,
                     $"{strings.put_up_vote}\n{strings.you_have_twenty_seconds}{(isFirst ? "\n" + strings.user_not_choose : "")}",  
                     Keyboard.VoteKeyboard(alivePlayers, Player.Id, !isFirst));

+ 8 - 6
MafiaTelegramBot/Game/GameRooms/GameRoom.Structure.cs

@@ -21,8 +21,8 @@ namespace MafiaTelegramBot.Game.GameRooms
 
         private Timer _waitingPlayers;
 
-        private List<Player> VoteUpList = new();
-        private readonly Dictionary<long, long> VoteKillList = new();
+        private List<Player> _voteUpList = new();
+        private readonly Dictionary<long, long> _voteKillList = new();
 
         public readonly MessageHandler MHandler;
         public readonly QueryHandler QHandler;
@@ -63,6 +63,8 @@ namespace MafiaTelegramBot.Game.GameRooms
         public async Task Leave(Player player)
         {
             Players.Remove(player.Id);
+            PlayersMessageChannel.Remove(player.Id);
+            MafiaMessageChannel.Remove(player.Id);
             var message = Owner.Id == player.Id
                 ? $"{player.NickName} ({strings.room_owner}) {strings.leave_from_game}"
                 : $"{player.NickName} {strings.leave_from_game}";
@@ -72,11 +74,11 @@ namespace MafiaTelegramBot.Game.GameRooms
                 if (IsDay && player.IsSpeaker) player.CurrentRole.TalkingActionComplete.Set();
                 if (IsDay && !player.IsSpeaker) player.CurrentRole.VoteActionComplete.Set();
                 if (!IsDay) await player.CurrentRole.SetNightTarget(-1);
-                VoteUpList.RemoveAll(p=> p.Id == player.Id);
-                VoteKillList.Remove(player.Id);
-                var voteKillCopy = VoteKillList.ToList();
+                _voteUpList.RemoveAll(p=> p.Id == player.Id);
+                _voteKillList.Remove(player.Id);
+                var voteKillCopy = _voteKillList.ToList();
                 foreach (var (k, v) in voteKillCopy)
-                    if (v == player.Id) VoteKillList.Remove(k);
+                    if (v == player.Id) _voteKillList.Remove(k);
                 PlayersRole[player.CurrentRole.RoleKey].Remove(player);
                 player.ResetParasiteProgress();
                 if (PlayersRole.ContainsKey(Roles.Parasite)