Browse Source

Add logs to project

Tigran 4 years ago
parent
commit
253ad058ff
100 changed files with 662 additions and 87 deletions
  1. 6 0
      MafiaTelegramBot/Commands/CallbackQueries/ApplyRolesChangeCallbackQueryHandler.cs
  2. 2 0
      MafiaTelegramBot/Commands/CallbackQueries/BackToProfileCallbackQueryHandler.cs
  3. 4 2
      MafiaTelegramBot/Commands/CallbackQueries/CallbackQueryHandler.cs
  4. 2 0
      MafiaTelegramBot/Commands/CallbackQueries/ChangeNickNameCallbackQueryHandler.cs
  5. 2 0
      MafiaTelegramBot/Commands/CallbackQueries/ChangeRolesCallbackQueryHandler.cs
  6. 2 0
      MafiaTelegramBot/Commands/CallbackQueries/ChooseGameModeCallbackQueryHandler.cs
  7. 2 0
      MafiaTelegramBot/Commands/CallbackQueries/ChooseGameTypeCallbackQueryHandler.cs
  8. 2 0
      MafiaTelegramBot/Commands/CallbackQueries/ChooseRoomViewCallbackQueryHandler.cs
  9. 2 0
      MafiaTelegramBot/Commands/CallbackQueries/ConnectToNotRankedCallbackQueryHandler.cs
  10. 2 0
      MafiaTelegramBot/Commands/CallbackQueries/ConnectToPrivateRoomCallbackQueryHandler.cs
  11. 2 0
      MafiaTelegramBot/Commands/CallbackQueries/ConnectToPublicRoomCallbackQueryHandler.cs
  12. 2 0
      MafiaTelegramBot/Commands/CallbackQueries/ConnectToRankedCallbackQueryHandler.cs
  13. 2 0
      MafiaTelegramBot/Commands/CallbackQueries/ConnectToSelectedRoomCallbackQueryHandler.cs
  14. 2 0
      MafiaTelegramBot/Commands/CallbackQueries/ContinueCallbackQueryHandler.cs
  15. 2 0
      MafiaTelegramBot/Commands/CallbackQueries/GiveRoleCallbackQueryHandler.cs
  16. 2 0
      MafiaTelegramBot/Commands/CallbackQueries/GiveToAllCallbackQueryHandler.cs
  17. 2 0
      MafiaTelegramBot/Commands/CallbackQueries/GiveToSelectedCallbackQueryHandler.cs
  18. 2 0
      MafiaTelegramBot/Commands/CallbackQueries/KickSelectedPlayerCallbackQueryHandler.cs
  19. 2 0
      MafiaTelegramBot/Commands/CallbackQueries/PackInfoCallbackQueryHandler.cs
  20. 6 0
      MafiaTelegramBot/Commands/CallbackQueries/PackOpenCallbackQueryHandler.cs
  21. 3 3
      MafiaTelegramBot/Commands/CallbackQueries/PlayersCountSettingsCallbackQueryHandler.cs
  22. 2 0
      MafiaTelegramBot/Commands/CallbackQueries/SetPlayersMaximumCallbackQueryHandler.cs
  23. 2 0
      MafiaTelegramBot/Commands/CallbackQueries/SettingsProfileCallbackQueryHandler.cs
  24. 2 0
      MafiaTelegramBot/Commands/CallbackQueries/SettingsRoomCallbackQueryHandler.cs
  25. 2 0
      MafiaTelegramBot/Commands/CallbackQueries/ShopMenuCallbackQueryHandler.cs
  26. 2 0
      MafiaTelegramBot/Commands/CallbackQueries/ShowMyExtendedStatsCallbackQueryHandler.cs
  27. 2 0
      MafiaTelegramBot/Commands/CallbackQueries/ShowMyPacksCallbackQueryHandler.cs
  28. 4 0
      MafiaTelegramBot/Commands/CallbackQueries/ShowMyRolesCallbackQueryHandler.cs
  29. 2 0
      MafiaTelegramBot/Commands/CallbackQueries/StartGameCallbackQueryHandler.cs
  30. 2 0
      MafiaTelegramBot/Commands/CallbackQueries/SwitchTimerCallbackQueryHandler.cs
  31. 4 0
      MafiaTelegramBot/Commands/CallbackQueries/UnblockUserCallbackQueryHandler.cs
  32. 4 0
      MafiaTelegramBot/Commands/CallbackQueries/UserInGameCallbackQueryHandler.cs
  33. 4 0
      MafiaTelegramBot/Commands/ChannelPost/ChannelPost.cs
  34. 6 0
      MafiaTelegramBot/Commands/ChannelPost/GiveawayChannelPost.cs
  35. 6 2
      MafiaTelegramBot/Commands/ChatMember/MyChatMemberHandler.cs
  36. 5 1
      MafiaTelegramBot/Commands/CommandNotFound.cs
  37. 4 0
      MafiaTelegramBot/Commands/Messages/AdminPanelMessageHandler.cs
  38. 6 0
      MafiaTelegramBot/Commands/Messages/ChangeNicknameMessageHandler.cs
  39. 2 0
      MafiaTelegramBot/Commands/Messages/ConnectGameMessageHandler.cs
  40. 2 0
      MafiaTelegramBot/Commands/Messages/CreateGameMessageHandler.cs
  41. 6 0
      MafiaTelegramBot/Commands/Messages/CreateRoomMessageHandler.cs
  42. 3 1
      MafiaTelegramBot/Commands/Messages/DissolveRoomMessageHandler.cs
  43. 6 0
      MafiaTelegramBot/Commands/Messages/EnterCodeMessageHandler.cs
  44. 2 0
      MafiaTelegramBot/Commands/Messages/FastGameMessageHandler.cs
  45. 6 0
      MafiaTelegramBot/Commands/Messages/GiveRoleToPlayerMessageHandler.cs
  46. 2 0
      MafiaTelegramBot/Commands/Messages/KickPlayerMessageHandler.cs
  47. 2 0
      MafiaTelegramBot/Commands/Messages/LeaveMessageHandler.cs
  48. 2 0
      MafiaTelegramBot/Commands/Messages/LookPlayersListMessageHandler.cs
  49. 2 0
      MafiaTelegramBot/Commands/Messages/MessageHandler.cs
  50. 2 0
      MafiaTelegramBot/Commands/Messages/RoomSettingsMessageHandler.cs
  51. 2 0
      MafiaTelegramBot/Commands/Messages/ShowProfileMessageHandler.cs
  52. 2 0
      MafiaTelegramBot/Commands/Messages/StartGameMessageHandler.cs
  53. 8 0
      MafiaTelegramBot/Commands/Messages/StartMessageHandler.cs
  54. 6 0
      MafiaTelegramBot/Commands/Messages/UnblockUserMessageHandler.cs
  55. 4 0
      MafiaTelegramBot/Commands/Messages/UserInGameMessageHandler.cs
  56. 26 9
      MafiaTelegramBot/Commands/UpdateHandler.cs
  57. 21 0
      MafiaTelegramBot/Controllers/MessageController.cs
  58. 21 1
      MafiaTelegramBot/Controllers/RoomController.cs
  59. 6 0
      MafiaTelegramBot/DataBase/Entity/OpenedRolesEntity.cs
  60. 2 0
      MafiaTelegramBot/DataBase/Entity/StatisticsEntity.cs
  61. 5 1
      MafiaTelegramBot/DataBase/EntityDao/AchievementsDao.cs
  62. 4 2
      MafiaTelegramBot/DataBase/EntityDao/OpenedRolesDao.cs
  63. 4 0
      MafiaTelegramBot/DataBase/EntityDao/StatisticsDao.cs
  64. 14 2
      MafiaTelegramBot/DataBase/EntityDao/UserDao.cs
  65. 8 0
      MafiaTelegramBot/DataBase/MafiaDataBase.cs
  66. 6 0
      MafiaTelegramBot/Extensions/DictionaryExtension.cs
  67. 8 5
      MafiaTelegramBot/Extensions/ListExtension.cs
  68. 6 0
      MafiaTelegramBot/Game/GameRoles/BodyguardRole.cs
  69. 6 0
      MafiaTelegramBot/Game/GameRoles/CopRole.cs
  70. 8 0
      MafiaTelegramBot/Game/GameRoles/DameRole.cs
  71. 8 0
      MafiaTelegramBot/Game/GameRoles/DetectiveRole.cs
  72. 6 0
      MafiaTelegramBot/Game/GameRoles/DoctorRole.cs
  73. 8 0
      MafiaTelegramBot/Game/GameRoles/DonRole.cs
  74. 2 0
      MafiaTelegramBot/Game/GameRoles/ElderRole.cs
  75. 6 0
      MafiaTelegramBot/Game/GameRoles/FoolRole.cs
  76. 8 0
      MafiaTelegramBot/Game/GameRoles/HookerRole.cs
  77. 8 2
      MafiaTelegramBot/Game/GameRoles/JournalistRole.cs
  78. 6 0
      MafiaTelegramBot/Game/GameRoles/LawyerRole.cs
  79. 6 0
      MafiaTelegramBot/Game/GameRoles/MafiaRole.cs
  80. 6 0
      MafiaTelegramBot/Game/GameRoles/NecromancerRole.cs
  81. 10 0
      MafiaTelegramBot/Game/GameRoles/ParasiteRole.cs
  82. 8 0
      MafiaTelegramBot/Game/GameRoles/WerewolfRole.cs
  83. 10 36
      MafiaTelegramBot/Game/GameRooms/ExtendedGameRoom.cs
  84. 6 0
      MafiaTelegramBot/Game/GameRooms/FastGameRoom.cs
  85. 32 0
      MafiaTelegramBot/Game/GameRooms/GameRoom.GameProcess.cs
  86. 24 0
      MafiaTelegramBot/Game/GameRooms/GameRoom.MessageChannels.cs
  87. 10 0
      MafiaTelegramBot/Game/GameRooms/GameRoom.MessageHandler.cs
  88. 10 0
      MafiaTelegramBot/Game/GameRooms/GameRoom.PrepareRoom.cs
  89. 4 0
      MafiaTelegramBot/Game/GameRooms/GameRoom.QueryHandler.cs
  90. 55 6
      MafiaTelegramBot/Game/GameRooms/GameRoom.Role.cs
  91. 16 0
      MafiaTelegramBot/Game/GameRooms/GameRoom.Structure.cs
  92. 10 0
      MafiaTelegramBot/Game/GameRooms/GameRoom.Timer.cs
  93. 2 0
      MafiaTelegramBot/Game/GameRooms/NormalGameRoom.cs
  94. 52 0
      MafiaTelegramBot/Game/Player.cs
  95. 8 0
      MafiaTelegramBot/Game/RoomEncrypter.cs
  96. 8 0
      MafiaTelegramBot/Logs.cs
  97. 0 4
      MafiaTelegramBot/MafiaTelegramBot.csproj
  98. 12 0
      MafiaTelegramBot/Other/GiveAway.cs
  99. 3 10
      MafiaTelegramBot/Resources/Constants.cs
  100. 2 0
      MafiaTelegramBot/Utilities.cs

+ 6 - 0
MafiaTelegramBot/Commands/CallbackQueries/ApplyRolesChangeCallbackQueryHandler.cs

@@ -15,6 +15,8 @@ namespace MafiaTelegramBot.Commands.CallbackQueries
         private ExtendedGameRoom _room;
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+            
             var data = update.CallbackQuery.Data.Split('|');
             var roomKey = data[1];
             _room = (ExtendedGameRoom) RoomController.GetRoom(roomKey);
@@ -32,6 +34,8 @@ namespace MafiaTelegramBot.Commands.CallbackQueries
 
         private void MafiaVillager(Roles role, string action)
         {
+            Logs.LogOut(GetType(), "MafiaVillager");
+            
             switch (action)
             {
                 case "+":
@@ -65,6 +69,8 @@ namespace MafiaTelegramBot.Commands.CallbackQueries
 
         private void SwitchRole(Roles role)
         {
+            Logs.LogOut(GetType(), "SwitchRole");
+            
             if (_room.CustomRoomSettings.ContainsKey(role)) _room.CustomRoomSettings.Remove(role);
             else
             {

+ 2 - 0
MafiaTelegramBot/Commands/CallbackQueries/BackToProfileCallbackQueryHandler.cs

@@ -13,6 +13,8 @@ namespace MafiaTelegramBot.Commands.CallbackQueries
         protected override string Command => Callback.BackToProfile.ToString();
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+            
             var rolesList = Enum.GetValues(typeof(Roles)).Cast<Roles>().ToList();
             rolesList.Remove(Roles.None);
             rolesList.Remove(Roles.All);

+ 4 - 2
MafiaTelegramBot/Commands/CallbackQueries/CallbackQueryHandler.cs

@@ -51,6 +51,8 @@ namespace MafiaTelegramBot.Commands.CallbackQueries
         
         public static async Task<UpdateHandler> Factory(User user, string message)
         {
+            Logs.LogOut(typeof(CallbackQueryHandler), "Factory");
+
             // Объект пользователя
             var player = await UserDao.GetPlayerById(user.Id) ?? await UserDao.AddNew(user);
             
@@ -68,7 +70,7 @@ namespace MafiaTelegramBot.Commands.CallbackQueries
             // Ничего не делаем, если код дошел до сюда
             return new CommandNotFound(player, message);
         }
-        
-        public CallbackQueryHandler(Player player) : base(player) { }
+
+        protected CallbackQueryHandler(Player player) : base(player) { }
     }
 }

+ 2 - 0
MafiaTelegramBot/Commands/CallbackQueries/ChangeNickNameCallbackQueryHandler.cs

@@ -13,6 +13,8 @@ namespace MafiaTelegramBot.Commands.CallbackQueries
 
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             ChangeNicknameHandler.AddToQueue(User.Info.Id);
             return await MessageController.EditMessage(User.Info,
                 update.CallbackQuery.Message.MessageId, strings.enter_your_name);

+ 2 - 0
MafiaTelegramBot/Commands/CallbackQueries/ChangeRolesCallbackQueryHandler.cs

@@ -12,6 +12,8 @@ namespace MafiaTelegramBot.Commands.CallbackQueries
         protected override string Command => Callback.ChangeRoles.ToString();
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             var roomKey = RoomEncrypter.GetCode(User.GetRoomName());
             var room = (ExtendedGameRoom) RoomController.GetRoom(roomKey);
             if(room == null) return await MessageController.EditMessage(User.Info,

+ 2 - 0
MafiaTelegramBot/Commands/CallbackQueries/ChooseGameModeCallbackQueryHandler.cs

@@ -12,6 +12,8 @@ namespace MafiaTelegramBot.Commands.CallbackQueries
 
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             if (User.GetRoomName() != "")
                 return await MessageController.EditMessage(User.Info, update.CallbackQuery.Message.MessageId, strings.user_already_in_game);
             var data = update.CallbackQuery.Data;

+ 2 - 0
MafiaTelegramBot/Commands/CallbackQueries/ChooseGameTypeCallbackQueryHandler.cs

@@ -13,6 +13,8 @@ namespace MafiaTelegramBot.Commands.CallbackQueries
 
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             if (User.GetRoomName() != "")
                 return await MessageController.EditMessage(User.Info,
                     update.CallbackQuery.Message.MessageId, strings.user_already_in_game);

+ 2 - 0
MafiaTelegramBot/Commands/CallbackQueries/ChooseRoomViewCallbackQueryHandler.cs

@@ -12,6 +12,8 @@ namespace MafiaTelegramBot.Commands.CallbackQueries
 
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             if (User.GetRoomName() != "")
                 return await MessageController.EditMessage(User.Info,
                     update.CallbackQuery.Message.MessageId, strings.user_already_in_game);

+ 2 - 0
MafiaTelegramBot/Commands/CallbackQueries/ConnectToNotRankedCallbackQueryHandler.cs

@@ -12,6 +12,8 @@ namespace MafiaTelegramBot.Commands.CallbackQueries
 
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             if (User.GetRoomName() != "")
                 return await MessageController.EditMessage(User.Info,
                     update.CallbackQuery.Message.MessageId, strings.user_already_in_game);

+ 2 - 0
MafiaTelegramBot/Commands/CallbackQueries/ConnectToPrivateRoomCallbackQueryHandler.cs

@@ -13,6 +13,8 @@ namespace MafiaTelegramBot.Commands.CallbackQueries
 
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             EnterCodeHandler.AddToQueue(User.Info.Id);
             return await MessageController.EditMessage(User.Info,
                 update.CallbackQuery.Message.MessageId, strings.enter_private_code);

+ 2 - 0
MafiaTelegramBot/Commands/CallbackQueries/ConnectToPublicRoomCallbackQueryHandler.cs

@@ -12,6 +12,8 @@ namespace MafiaTelegramBot.Commands.CallbackQueries
 
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             var data = update.CallbackQuery.Data.Split('|');
             var rooms = await RoomController.GetPublicNotRankedRooms();
             if (rooms.Count == 0) return await MessageController.EditMessage(User.Info,

+ 2 - 0
MafiaTelegramBot/Commands/CallbackQueries/ConnectToRankedCallbackQueryHandler.cs

@@ -12,6 +12,8 @@ namespace MafiaTelegramBot.Commands.CallbackQueries
 
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             if (User.GetRoomName() != "")
                 return await MessageController.EditMessage(User.Info,
                     update.CallbackQuery.Message.MessageId, strings.user_already_in_game);

+ 2 - 0
MafiaTelegramBot/Commands/CallbackQueries/ConnectToSelectedRoomCallbackQueryHandler.cs

@@ -12,6 +12,8 @@ namespace MafiaTelegramBot.Commands.CallbackQueries
 
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             var data = update.CallbackQuery.Data;
             var param = data.Split('|');
             var roomKey = param[1];

+ 2 - 0
MafiaTelegramBot/Commands/CallbackQueries/ContinueCallbackQueryHandler.cs

@@ -13,6 +13,8 @@ namespace MafiaTelegramBot.Commands.CallbackQueries
         protected override string Command => Callback.Continue.ToString();
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             var roomKey = RoomEncrypter.GetCode(User.GetRoomName());
             var room = RoomController.GetRoom(roomKey);
             if (room is not FastGameRoom r)

+ 2 - 0
MafiaTelegramBot/Commands/CallbackQueries/GiveRoleCallbackQueryHandler.cs

@@ -14,6 +14,8 @@ namespace MafiaTelegramBot.Commands.CallbackQueries
 
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             var data = update.CallbackQuery.Data.Split('|');
             var targetId = long.Parse(data[1]);
             if (!Enum.TryParse(data[2], out Roles role))

+ 2 - 0
MafiaTelegramBot/Commands/CallbackQueries/GiveToAllCallbackQueryHandler.cs

@@ -13,6 +13,8 @@ namespace MafiaTelegramBot.Commands.CallbackQueries
         protected override string Command => Callback.GiveToAll.ToString();
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             await MessageController.DeleteMessage(User.Info.ChatId, update.CallbackQuery.Message.MessageId);
             
             var msg1 = string.Format(strings.giveaway_sample_message, keywords.giveaway,

+ 2 - 0
MafiaTelegramBot/Commands/CallbackQueries/GiveToSelectedCallbackQueryHandler.cs

@@ -13,6 +13,8 @@ namespace MafiaTelegramBot.Commands.CallbackQueries
         
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             GiveRoleToPlayerHandler.AddToQueue(User.Info.Id);
             return await MessageController.EditMessage(User.Info,
                 update.CallbackQuery.Message.MessageId, strings.enter_username);

+ 2 - 0
MafiaTelegramBot/Commands/CallbackQueries/KickSelectedPlayerCallbackQueryHandler.cs

@@ -11,6 +11,8 @@ namespace MafiaTelegramBot.Commands.CallbackQueries
         protected override string Command => Callback.KickUser.ToString();
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             var resultCode = await RoomController.LeaveFromGame(User);
             if (resultCode != ResultCode.CodeOk) return await MessageController.EditMessage(User.Info,
                 update.CallbackQuery.Message.MessageId, Utilities.GetResultCodeMessage(resultCode));

+ 2 - 0
MafiaTelegramBot/Commands/CallbackQueries/PackInfoCallbackQueryHandler.cs

@@ -11,6 +11,8 @@ namespace MafiaTelegramBot.Commands.CallbackQueries
         protected override string Command => Callback.PackInfo.ToString();
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             return await MessageController.EditMessage(User.Info, update.CallbackQuery.Message.MessageId,
                 strings.pack_information.Replace("\\n", "\n"));
         }

+ 6 - 0
MafiaTelegramBot/Commands/CallbackQueries/PackOpenCallbackQueryHandler.cs

@@ -13,6 +13,8 @@ namespace MafiaTelegramBot.Commands.CallbackQueries
         protected override string Command => Callback.PackOpen.ToString();
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             if (User.Info.PackCount <= 0) return await MessageController.EditMessage(User.Info,
                 update.CallbackQuery.Message.MessageId, strings.you_havent_pack);
             User.Info.PackCount--;
@@ -38,6 +40,8 @@ namespace MafiaTelegramBot.Commands.CallbackQueries
         
         private static Task<Roles> GetRandomBaseRole(OpenedRolesEntity openedRoles)
         {
+            Logs.LogOut(typeof(PackOpenCallbackQueryHandler), "GetRandomBaseRole");
+
             return Task.Run(() =>
             {
                 var allOpened = openedRoles.Hooker && openedRoles.Bodyguard && openedRoles.Elder && openedRoles.Werewolf;
@@ -50,6 +54,8 @@ namespace MafiaTelegramBot.Commands.CallbackQueries
 
         private static Task<Roles> GetRandomRole()
         {
+            Logs.LogOut(typeof(PackOpenCallbackQueryHandler), "GetRandomRole");
+
             return Task.Run(() =>
             {
                 var chance = Utilities.Rnd.Next(100);

+ 3 - 3
MafiaTelegramBot/Commands/CallbackQueries/PlayersCountSettingsCallbackQueryHandler.cs

@@ -12,6 +12,8 @@ namespace MafiaTelegramBot.Commands.CallbackQueries
         
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             var roomKey = RoomEncrypter.GetCode(User.GetRoomName());
             var room = RoomController.GetRoom(roomKey);
             if(room == null)
@@ -22,8 +24,6 @@ namespace MafiaTelegramBot.Commands.CallbackQueries
                 $"{strings.max_capacity_message}: {roomMaxCapacity}", Keyboard.SetMaximumKeyboard());
         }
 
-        public PlayersCountSettingsCallbackQueryHandler(Player player) : base(player)
-        {
-        }
+        public PlayersCountSettingsCallbackQueryHandler(Player player) : base(player) { }
     }
 }

+ 2 - 0
MafiaTelegramBot/Commands/CallbackQueries/SetPlayersMaximumCallbackQueryHandler.cs

@@ -12,6 +12,8 @@ namespace MafiaTelegramBot.Commands.CallbackQueries
 
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             var data = update.CallbackQuery.Data;
             var count = int.Parse(data.Split('|')[1]);
             var roomKey = RoomEncrypter.GetCode(User.GetRoomName());

+ 2 - 0
MafiaTelegramBot/Commands/CallbackQueries/SettingsProfileCallbackQueryHandler.cs

@@ -12,6 +12,8 @@ namespace MafiaTelegramBot.Commands.CallbackQueries
 
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             return await MessageController.EditMessage(User.Info, update.CallbackQuery.Message.MessageId, 
                 $"{strings.your_name} {User.Info.NickName}", Keyboard.ChangeNameKeyboard());
         }

+ 2 - 0
MafiaTelegramBot/Commands/CallbackQueries/SettingsRoomCallbackQueryHandler.cs

@@ -12,6 +12,8 @@ namespace MafiaTelegramBot.Commands.CallbackQueries
 
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             return await MessageController.EditMessage(User.Info,
                 update.CallbackQuery.Message.MessageId, strings.settings_room);
         }

+ 2 - 0
MafiaTelegramBot/Commands/CallbackQueries/ShopMenuCallbackQueryHandler.cs

@@ -12,6 +12,8 @@ namespace MafiaTelegramBot.Commands.CallbackQueries
 
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             // var user = await UserDao.GetPlayerById(UserId);
             // if (user.OpenedRoles.AllRolesOpened())
             //     return await Bot.SendWithMarkdown2(ChatId, strings.you_already_open_all_roles);

+ 2 - 0
MafiaTelegramBot/Commands/CallbackQueries/ShowMyExtendedStatsCallbackQueryHandler.cs

@@ -14,6 +14,8 @@ namespace MafiaTelegramBot.Commands.CallbackQueries
 
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             var rolesList = Enum.GetValues(typeof(Roles)).Cast<Roles>().ToList();
             rolesList.Remove(Roles.None);
             rolesList.Remove(Roles.All);

+ 2 - 0
MafiaTelegramBot/Commands/CallbackQueries/ShowMyPacksCallbackQueryHandler.cs

@@ -11,6 +11,8 @@ namespace MafiaTelegramBot.Commands.CallbackQueries
         protected override string Command => Callback.ShowMyPacks.ToString();
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             await MessageController.DeleteMessage(User.Info.ChatId, update.CallbackQuery.Message.MessageId);
             await MessageController.SendSticker(User.Info, Stickers.Sticker["Pool"]);
             return await MessageController.SendText(User.Info, $"{strings.your_packs} {User.Info.PackCount}", Keyboard.PackKeyboard());

+ 4 - 0
MafiaTelegramBot/Commands/CallbackQueries/ShowMyRolesCallbackQueryHandler.cs

@@ -14,6 +14,8 @@ namespace MafiaTelegramBot.Commands.CallbackQueries
 
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             var opened = User.OpenedRoles.ToList();
             var tier2 = Utilities.TierDictionary[2].Intersect(opened).ToList();
             var tier3 = Utilities.TierDictionary[3].Intersect(opened).ToList();
@@ -36,6 +38,8 @@ namespace MafiaTelegramBot.Commands.CallbackQueries
 
         private static string AddMessage(List<Roles> list, string rarity)
         {
+            Logs.LogOut(typeof(ShowMyRolesCallbackQueryHandler), "AddMessage");
+
             var result = $"\n\n{strings.rarity}: {rarity}";
             foreach (var role in list)
                 result += $"\n{roles.ResourceManager.GetString(role.ToString())}";

+ 2 - 0
MafiaTelegramBot/Commands/CallbackQueries/StartGameCallbackQueryHandler.cs

@@ -11,6 +11,8 @@ namespace MafiaTelegramBot.Commands.CallbackQueries
         protected override string Command => Callback.StartGame.ToString();
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             var roomKey = RoomEncrypter.GetCode(User.GetRoomName());
             var room = RoomController.GetRoom(roomKey);
             if(room == null)

+ 2 - 0
MafiaTelegramBot/Commands/CallbackQueries/SwitchTimerCallbackQueryHandler.cs

@@ -11,6 +11,8 @@ namespace MafiaTelegramBot.Commands.CallbackQueries
         protected override string Command => Callback.SwitchTimer.ToString();
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             var roomName = User.GetRoomName();
             var roomKey = RoomEncrypter.GetCode(roomName);
             var room = RoomController.GetRoom(roomKey);

+ 4 - 0
MafiaTelegramBot/Commands/CallbackQueries/UnblockUserCallbackQueryHandler.cs

@@ -13,12 +13,16 @@ namespace MafiaTelegramBot.Commands.CallbackQueries
 
         public override Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             UnblockUserMessageHandler.AddToQueue(User.Info.Id);
             return MessageController.SendText(User.Info, strings.enter_username);
         }
         
         public override bool IsMatches(string command)
         {
+            Logs.LogOut(GetType(), "IsMatches");
+
             return User != null ? base.IsMatches(command) && User.Info.IsAdmin : base.IsMatches(command);
         }
         

+ 4 - 0
MafiaTelegramBot/Commands/CallbackQueries/UserInGameCallbackQueryHandler.cs

@@ -11,6 +11,8 @@ namespace MafiaTelegramBot.Commands.CallbackQueries
 
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             var room = RoomController.GetRoom(RoomEncrypter.GetCode(User.GetRoomName()));
             return room == null
                 ? await MessageController.SendText(User.Info, strings.room_does_not_exists)
@@ -19,6 +21,8 @@ namespace MafiaTelegramBot.Commands.CallbackQueries
 
         public override bool IsMatches(string command)
         {
+            Logs.LogOut(GetType(), "IsMathes");
+
             if (User == null) return base.IsMatches(command);
             if (User.GetRoomName() == "") return false;
             var room = RoomController.GetRoom(RoomEncrypter.GetCode(User.GetRoomName()));

+ 4 - 0
MafiaTelegramBot/Commands/ChannelPost/ChannelPost.cs

@@ -20,6 +20,8 @@ namespace MafiaTelegramBot.Commands.ChannelPost
 
         protected async Task<Message> SendErrorAndDelete(string message)
         {
+            Logs.LogOut(GetType(), "SendErrorAndDelete");
+
             var error = await MessageController.SendText(User.Info, message);
             var timer = new Timer { AutoReset = false, Interval = 10 * 1000 };
 
@@ -35,6 +37,8 @@ namespace MafiaTelegramBot.Commands.ChannelPost
         
         public static async Task<UpdateHandler> Factory(User user, string message)
         {
+            Logs.LogOut(typeof(ChannelPost), "Factory");
+
             // Объект пользователя
             var player = await UserDao.GetPlayerById(user.Id) ?? await UserDao.AddNew(user);
             

+ 6 - 0
MafiaTelegramBot/Commands/ChannelPost/GiveawayChannelPost.cs

@@ -14,6 +14,8 @@ namespace MafiaTelegramBot.Commands.ChannelPost
         protected override string Command => keywords.giveaway;
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             await MessageController.DeleteMessage(User.Info.ChatId, update.ChannelPost.MessageId);
             var structure = ParseMessage(update.ChannelPost.Text);
             if (structure[keywords.message] == "" && structure[keywords.picture] == "") return await SendErrorAndDelete(strings.message_could_contain_text_or_image);
@@ -31,8 +33,12 @@ namespace MafiaTelegramBot.Commands.ChannelPost
 
         private Dictionary<string, string> ParseMessage(string text)
         {
+            Logs.LogOut(GetType(), "ParseMessage");
+
             string GetPart(string keyword)
             {
+                Logs.LogOut(GetType(), "GetPart");
+
                 if (!text.Contains(keyword)) return "";
                 var start = text.IndexOf(keyword, StringComparison.Ordinal);
                 start = text.IndexOf('<', start) + 1;

+ 6 - 2
MafiaTelegramBot/Commands/ChatMember/MyChatMemberHandler.cs

@@ -10,6 +10,8 @@ namespace MafiaTelegramBot.Commands.ChatMember
     {
         public override Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             switch (update.MyChatMember.NewChatMember.Status)
             {
                 case ChatMemberStatus.Kicked:
@@ -27,6 +29,8 @@ namespace MafiaTelegramBot.Commands.ChatMember
 
         public static async Task<UpdateHandler> Factory(User user)
         {
+            Logs.LogOut(typeof(MyChatMemberHandler), "Factory");
+
             // Объект пользователя или канала
             var player = await UserDao.GetPlayerById(user.Id) ?? await UserDao.AddNew(user);
 
@@ -35,7 +39,7 @@ namespace MafiaTelegramBot.Commands.ChatMember
             
             return new MyChatMemberHandler(player);
         }
-        
-        public MyChatMemberHandler(Player user) : base(user) { }
+
+        private MyChatMemberHandler(Player user) : base(user) { }
     }
 }

+ 5 - 1
MafiaTelegramBot/Commands/CommandNotFound.cs

@@ -9,15 +9,19 @@ namespace MafiaTelegramBot.Commands
     public class CommandNotFound : MessageHandler
     {
         protected override string Command => "";
-        private string _command;
+        private readonly string _command;
         
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             return await MessageController.SendText(User.Info, $"{strings.command_not_found} {_command}");
         }
 
         public CommandNotFound(Player player, string command) : base(player)
         {
+            Logs.LogOut(GetType(), "CommandNotFound");
+
             _command = command;
         }
     }

+ 4 - 0
MafiaTelegramBot/Commands/Messages/AdminPanelMessageHandler.cs

@@ -11,11 +11,15 @@ namespace MafiaTelegramBot.Commands.Messages
         protected override string Command => keyboard.admin_panel;
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             return await MessageController.SendText(User.Info, strings.start_message, Keyboard.AdminPanelKeyboard());
         }
 
         public override bool IsMatches(string command)
         {
+            Logs.LogOut(GetType(), "IsMatches");
+
             return User != null ? base.IsMatches(command) && User.Info.IsAdmin : base.IsMatches(command);
         }
 

+ 6 - 0
MafiaTelegramBot/Commands/Messages/ChangeNicknameMessageHandler.cs

@@ -15,16 +15,22 @@ namespace MafiaTelegramBot.Commands.Messages
 
         public static void AddToQueue(long id)
         {
+            Logs.LogOut(typeof(ChangeNicknameHandler), "AddToQueue");
+
             Queue.AddUnique(id);
         }
 
         public override bool IsMatches(string command)
         {
+            Logs.LogOut(GetType(), "IsMatches");
+
             return User != null ? Queue.Contains(User.Info.Id) : base.IsMatches(command);
         }
 
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             Queue.Remove(User.Info.Id);
             User.Info.NickName = update.Message.Text;
             return await MessageController.SendText(User.Info,$"{strings.name_updated} {update.Message.Text}");

+ 2 - 0
MafiaTelegramBot/Commands/Messages/ConnectGameMessageHandler.cs

@@ -12,6 +12,8 @@ namespace MafiaTelegramBot.Commands.Messages
 
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             if (User.GetRoomName() != "")
                 return await MessageController.SendText(User.Info, strings.user_already_in_game);
             return await MessageController.SendText(User.Info, strings.choose_type_room, Keyboard.RoomTypeKeyboard());

+ 2 - 0
MafiaTelegramBot/Commands/Messages/CreateGameMessageHandler.cs

@@ -12,6 +12,8 @@ namespace MafiaTelegramBot.Commands.Messages
 
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             if (User.GetRoomName() != "")
                 return await MessageController.SendText(User.Info, strings.user_already_in_game);
             return await MessageController.SendText(User.Info, strings.choose_game_view, Keyboard.ChooseRoomView());

+ 6 - 0
MafiaTelegramBot/Commands/Messages/CreateRoomMessageHandler.cs

@@ -16,16 +16,22 @@ namespace MafiaTelegramBot.Commands.Messages
 
         public static void AddToQueue(long id, string param)
         {
+            Logs.LogOut(typeof(CreateRoomHandler), "AddToQueue");
+
             Queue.AddUniqueOrReplaceByKey(id, param);
         }
 
         public override bool IsMatches(string command)
         {
+            Logs.LogOut(GetType(), "IsMatches");
+
             return User != null ? Queue.ContainsKey(User.Info.Id) : base.IsMatches(command);
         }
 
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             var param = Queue[User.Info.Id];
             Queue.Remove(User.Info.Id);
             var isPrivate = param[0] == Constants.PRIVATE + '0';

+ 3 - 1
MafiaTelegramBot/Commands/Messages/DissolveRoomMessageHandler.cs

@@ -10,7 +10,9 @@ namespace MafiaTelegramBot.Commands.Messages
     {
         protected override string Command => keyboard.dissolve_room;
         public override async Task<Message> Execute(Update update) 
-        { 
+        {
+            Logs.LogOut(GetType(), "Execute");
+
             var roomKey = RoomEncrypter.GetCode(User.GetRoomName());
             var room = RoomController.GetRoom(roomKey);
             if(room == null)

+ 6 - 0
MafiaTelegramBot/Commands/Messages/EnterCodeMessageHandler.cs

@@ -16,16 +16,22 @@ namespace MafiaTelegramBot.Commands.Messages
 
         public static void AddToQueue(long id)
         {
+            Logs.LogOut(typeof(EnterCodeHandler), "AddToQueue");
+
             Queue.AddUnique(id);
         }
 
         public override bool IsMatches(string command)
         {
+            Logs.LogOut(GetType(), "IsMatches");
+
             return User != null ? Queue.Contains(User.Info.Id) : base.IsMatches(command);
         }
         
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             Queue.Remove(User.Info.Id);
             var roomKey = update.Message.Text;
             var resultCode = await RoomController.ConnectToGame(User, roomKey);

+ 2 - 0
MafiaTelegramBot/Commands/Messages/FastGameMessageHandler.cs

@@ -11,6 +11,8 @@ namespace MafiaTelegramBot.Commands.Messages
         protected override string Command => keyboard.fast_game;
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             if (User.GetRoomName() != "")
                 return await MessageController.SendText(User.Info, strings.user_already_in_game);
             await RoomController.ConnectToFastGame(User);

+ 6 - 0
MafiaTelegramBot/Commands/Messages/GiveRoleToPlayerMessageHandler.cs

@@ -17,16 +17,22 @@ namespace MafiaTelegramBot.Commands.Messages
 
         public static void AddToQueue(long id)
         {
+            Logs.LogOut(typeof(GiveRoleToPlayerHandler), "AddToQueue");
+
             Queue.AddUnique(id);
         }
 
         public override bool IsMatches(string command)
         {
+            Logs.LogOut(GetType(), "IsMatches");
+
             return User != null ? Queue.Contains(User.Info.Id) : base.IsMatches(command);
         }
         
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             Queue.Remove(User.Info.Id);
             var targetId = await UserDao.GetIdByUsername(update.Message.Text);
             if (targetId == -1) return await MessageController.SendText(User.Info, strings.user_not_exists);

+ 2 - 0
MafiaTelegramBot/Commands/Messages/KickPlayerMessageHandler.cs

@@ -11,6 +11,8 @@ namespace MafiaTelegramBot.Commands.Messages
         protected override string Command => keyboard.kick_player;
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             var roomKey = RoomEncrypter.GetCode(User.GetRoomName());
             var room = RoomController.GetRoom(roomKey);
             if(room == null)

+ 2 - 0
MafiaTelegramBot/Commands/Messages/LeaveMessageHandler.cs

@@ -12,6 +12,8 @@ namespace MafiaTelegramBot.Commands.Messages
 
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             var resultCode = await RoomController.LeaveFromGame(User);
             return resultCode == ResultCode.CodeOk
                 ? await MessageController.SendText(User.Info, strings.you_leave_from_game, User.Info.IsAdmin ? Keyboard.AdminMainMenu : Keyboard.MainMenu)

+ 2 - 0
MafiaTelegramBot/Commands/Messages/LookPlayersListMessageHandler.cs

@@ -13,6 +13,8 @@ namespace MafiaTelegramBot.Commands.Messages
 
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             var roomKey = RoomEncrypter.GetCode(User.GetRoomName());
             var room = RoomController.GetRoom(roomKey);
             if(room == null)

+ 2 - 0
MafiaTelegramBot/Commands/Messages/MessageHandler.cs

@@ -39,6 +39,8 @@ namespace MafiaTelegramBot.Commands.Messages
         
         public static async Task<UpdateHandler> Factory(User user, string message)
         {
+            Logs.LogOut(typeof(MessageHandler), "Factory");
+
             // Объект пользователя
             var player = await UserDao.GetPlayerById(user.Id) ?? await UserDao.AddNew(user);
             

+ 2 - 0
MafiaTelegramBot/Commands/Messages/RoomSettingsMessageHandler.cs

@@ -12,6 +12,8 @@ namespace MafiaTelegramBot.Commands.Messages
 
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             var roomKey = RoomEncrypter.GetCode(User.GetRoomName());
             var room = RoomController.GetRoom(roomKey);
             if(room == null)

+ 2 - 0
MafiaTelegramBot/Commands/Messages/ShowProfileMessageHandler.cs

@@ -14,6 +14,8 @@ namespace MafiaTelegramBot.Commands.Messages
 
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             var rolesList = Enum.GetValues(typeof(Roles)).Cast<Roles>().ToList();
             rolesList.Remove(Roles.None);
             rolesList.Remove(Roles.All);

+ 2 - 0
MafiaTelegramBot/Commands/Messages/StartGameMessageHandler.cs

@@ -11,6 +11,8 @@ namespace MafiaTelegramBot.Commands.Messages
         protected override string Command => keyboard.begin_game;
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             var roomKey = RoomEncrypter.GetCode(User.GetRoomName());
             var room = RoomController.GetRoom(roomKey);
             if(room == null)

+ 8 - 0
MafiaTelegramBot/Commands/Messages/StartMessageHandler.cs

@@ -14,6 +14,8 @@ namespace MafiaTelegramBot.Commands.Messages
 
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             var command = update.Message.Text.Split(' ');
             if (command.Length == 2)
             {
@@ -33,6 +35,8 @@ namespace MafiaTelegramBot.Commands.Messages
 
         private static async Task<Message> GiveawayCommand(Player player, int id)
         {
+            Logs.LogOut(typeof(StartMessageHandler), "GiveawayCommand");
+
             try
             {
                 var giveaway = GiveAway.OpenedGiveaways[id];
@@ -48,6 +52,8 @@ namespace MafiaTelegramBot.Commands.Messages
 
         private static async Task<Message> ConnectToGameCommand(Player player, string roomKey)
         {
+            Logs.LogOut(typeof(StartMessageHandler), "ConnectToGameCommand");
+
             if (player.GetRoomName() != "")
                 return await MessageController.SendText(player.Info, strings.prefer_leave_from_room);
             var code = await RoomController.ConnectToGame(player, roomKey);
@@ -58,6 +64,8 @@ namespace MafiaTelegramBot.Commands.Messages
 
         private static async Task<Message> ConnectToFastGameCommand(Player player, string roomKey)
         {
+            Logs.LogOut(typeof(StartMessageHandler), "ConnectToFastGameCommand");
+
             if (player.GetRoomName() != "")
                 return await MessageController.SendText(player.Info, strings.prefer_leave_from_room);
             var code = await RoomController.ConnectToFastGame(player, roomKey);

+ 6 - 0
MafiaTelegramBot/Commands/Messages/UnblockUserMessageHandler.cs

@@ -17,16 +17,22 @@ namespace MafiaTelegramBot.Commands.Messages
 
         public static void AddToQueue(long id)
         {
+            Logs.LogOut(typeof(UnblockUserMessageHandler), "AddToQueue");
+
             Queue.AddUnique(id);
         }
 
         public override bool IsMatches(string command)
         {
+            Logs.LogOut(GetType(), "IsMatches");
+
             return User != null ? Queue.Contains(User.Info.Id) : base.IsMatches(command);
         }
         
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             Queue.Remove(User.Info.Id);
             var targetId = await UserDao.GetIdByUsername(update.Message.Text);
             if (targetId == -1) return await MessageController.SendText(User.Info, strings.user_not_exists);

+ 4 - 0
MafiaTelegramBot/Commands/Messages/UserInGameMessageHandler.cs

@@ -11,11 +11,15 @@ namespace MafiaTelegramBot.Commands.Messages
 
         public override bool IsMatches(string command)
         {
+            Logs.LogOut(GetType(), "IsMatches");
+
             return User != null ? User.GetRoomName() != "" : base.IsMatches(command);
         }
 
         public override async Task<Message> Execute(Update update)
         {
+            Logs.LogOut(GetType(), "Execute");
+
             var room = RoomController.GetRoom(RoomEncrypter.GetCode(User.GetRoomName()));
             return room == null
                 ? await MessageController.SendText(User.Info, strings.room_does_not_exists)

+ 26 - 9
MafiaTelegramBot/Commands/UpdateHandler.cs

@@ -1,7 +1,4 @@
-using System;
-using System.Collections.Generic;
 using System.Threading.Tasks;
-using MafiaTelegramBot.DataBase.EntityDao;
 using MafiaTelegramBot.Game;
 using Telegram.Bot.Types;
 
@@ -12,13 +9,33 @@ namespace MafiaTelegramBot.Commands
         protected virtual string Command => "";
         
         protected Player User { get; }
-        
-        public virtual Task<Message> Execute(Update update) { return Task.FromResult(new Message()); }
 
-        public virtual bool IsMatches(string command) { return command.Contains(Command); }
+        public virtual Task<Message> Execute(Update update)
+        {
+            Logs.LogOut(GetType(), "Execute");
 
-        protected UpdateHandler(Player player) { User = player; }
-        
-        public UpdateHandler() { }
+            return Task.FromResult(new Message());
+        }
+
+        public virtual bool IsMatches(string command)
+        {
+            Logs.LogOut(GetType(), "IsMatches");
+
+            return command.Contains(Command);
+        }
+
+        protected UpdateHandler(Player player)
+        {
+            Logs.LogOut(GetType(), "UpdateHandler");
+
+            User = player;
+        }
+
+        public UpdateHandler()
+        {
+            
+            Logs.LogOut(GetType(), "UpdateHandler2");
+
+        }
     }
 }

+ 21 - 0
MafiaTelegramBot/Controllers/MessageController.cs

@@ -22,6 +22,8 @@ namespace MafiaTelegramBot.Controllers
     {
         public static async Task HandleUpdateAsync(ITelegramBotClient bot, Update update, CancellationToken ct)
         {
+            LogOut(typeof(MessageController), "HandleUpdateAsync");
+
             User ChatToUser(Chat chat)
             {
                 return new User
@@ -58,12 +60,16 @@ namespace MafiaTelegramBot.Controllers
 
         private static async Task<UpdateHandler> UnknownUpdateHandlerAsync(Update update)
         {
+            LogOut(typeof(MessageController), "UnknownUpdateHandlerAsync");
+
             LogOut(update.Type.ToString());
             return new UpdateHandler();
         }
 
         public static Task HandleErrorAsync(ITelegramBotClient bot, Exception e, CancellationToken ct)
         {
+            LogOut(typeof(MessageController), "HandleErrorAsync");
+
             switch (e)
             {
                 case ApiRequestException apiRequestException:
@@ -79,6 +85,8 @@ namespace MafiaTelegramBot.Controllers
 
         public static async Task<Message> SendText(UserEntity info, string message, IReplyMarkup keyboard = null)
         {
+            LogOut(typeof(MessageController), "SendText");
+
             try
             {
                 if (!info.IsBlocked)
@@ -93,6 +101,8 @@ namespace MafiaTelegramBot.Controllers
         
         public static async Task<Message> SendTextWithHtml(UserEntity info, string message, IReplyMarkup keyboard = null)
         {
+            LogOut(typeof(MessageController), "SendTextWithHtml");
+
             try
             {
                 if (!info.IsBlocked)
@@ -107,6 +117,8 @@ namespace MafiaTelegramBot.Controllers
         
         public static async Task<Message> SendSticker(UserEntity info, string fileId)
         {
+            LogOut(typeof(MessageController), "SendSticker");
+
             try
             {
                 if (!info.IsBlocked)
@@ -121,6 +133,8 @@ namespace MafiaTelegramBot.Controllers
 
         public static async Task<Message> EditMessage(UserEntity info, int messageId, string message, InlineKeyboardMarkup keyboard = null)
         {
+            LogOut(typeof(MessageController), "EditMessage");
+
             try
             {
                 if (!info.IsBlocked)
@@ -129,12 +143,15 @@ namespace MafiaTelegramBot.Controllers
             catch (Exception e)
             {
                 LogOutWarning(e.Message);
+                await SendText(info, message, keyboard);
             }
             return new Message();
         }
 
         public static async Task<Message> EditReplyMarkup(UserEntity info, int messageId, InlineKeyboardMarkup keyboard)
         {
+            LogOut(typeof(MessageController), "EditReplyMarkup");
+
             try
             {
                 if (!info.IsBlocked)
@@ -149,6 +166,8 @@ namespace MafiaTelegramBot.Controllers
         
         public static async Task DeleteMessage(long chatId, int messageId)
         {
+            LogOut(typeof(MessageController), "DeleteMessage");
+
             try
             {
                 await Bot.Client.DeleteMessageAsync(chatId, messageId);
@@ -161,6 +180,8 @@ namespace MafiaTelegramBot.Controllers
 
         public static async Task<Message> SendImage(UserEntity info, InputOnlineFile inputOnlineFile, string message, InlineKeyboardMarkup replyMarkup)
         {
+            LogOut(typeof(MessageController), "SendImage");
+
             try
             {
                 if (!info.IsBlocked)

+ 21 - 1
MafiaTelegramBot/Controllers/RoomController.cs

@@ -14,6 +14,8 @@ namespace MafiaTelegramBot.Controllers
 
         public static async Task<ResultCode> CreateNewGame(Player creator, string roomName, bool isExtended, bool isPrivate, bool isRanking)
         {
+            Logs.LogOut(typeof(RoomController), "CreateNewGame");
+
             return await Task.Run(() =>
             {
                 var roomKey = RoomEncrypter.GetCode(roomName);
@@ -33,6 +35,8 @@ namespace MafiaTelegramBot.Controllers
 
         public static async Task<ResultCode> ConnectToFastGame(Player player)
         {
+            Logs.LogOut(typeof(RoomController), "ConnectToFastGame");
+
             return await Task.Run(async () =>
             {
                 async Task<FastGameRoom> GetMax(List<FastGameRoom> rooms)
@@ -78,6 +82,8 @@ namespace MafiaTelegramBot.Controllers
 
         public static async Task<ResultCode> ConnectToFastGame(Player player, string roomKey)
         {
+            Logs.LogOut(typeof(RoomController), "ConnectToFastGame2");
+
             return await Task.Run(async () =>
             {
                 var result = await ConnectToGame(player, roomKey);
@@ -95,6 +101,8 @@ namespace MafiaTelegramBot.Controllers
 
         public static async Task<ResultCode> ConnectToGame(Player player, string roomKey)
         {
+            Logs.LogOut(typeof(RoomController), "ConnectToGame");
+
             return await Task.Run(async () =>
             {
                 var room = GetRoom(roomKey);
@@ -115,11 +123,15 @@ namespace MafiaTelegramBot.Controllers
 
         public static List<Player> GetPlayers(string roomKey)
         {
-                return GetRoom(roomKey).Players.Values.ToList();
+            Logs.LogOut(typeof(RoomController), "GetPlayers");
+
+            return GetRoom(roomKey).Players.Values.ToList();
         }
         
         public static async Task<ResultCode> LeaveFromGame(Player player)
         {
+            Logs.LogOut(typeof(RoomController), "LeaveFromGame");
+
             return await Task.Run(async () =>
             {
                 var roomName = player.GetRoomName();
@@ -139,6 +151,8 @@ namespace MafiaTelegramBot.Controllers
         
         public static async Task DissolveRoom(string roomKey)
         {
+            Logs.LogOut(typeof(RoomController), "DissolveRoom");
+
             await Task.Run(async () =>
             {
                 var room = GetRoom(roomKey);
@@ -161,6 +175,8 @@ namespace MafiaTelegramBot.Controllers
 
         public static async Task<List<GameRoom>> GetPublicNotRankedRooms()
         {
+            Logs.LogOut(typeof(RoomController), "GetPublicNotRankedRooms");
+
             return await Task.Run(() =>
             {
                 async Task<int> Comparison(GameRoom room, GameRoom room2)
@@ -180,6 +196,8 @@ namespace MafiaTelegramBot.Controllers
 
         public static async Task<List<GameRoom>> GetPublicRankedRooms(char rank)
         {
+            Logs.LogOut(typeof(RoomController), "GetPublicRankedRooms");
+
             return await Task.Run(() =>
             {
                 async Task<int> Comparison(GameRoom room, GameRoom room2)
@@ -205,6 +223,8 @@ namespace MafiaTelegramBot.Controllers
         
         public static GameRoom GetRoom(string roomKey)
         {
+            Logs.LogOut(typeof(RoomController), "GetRoom");
+
             return OpenedGames.ContainsKey(roomKey)
                 ? OpenedGames[roomKey]
                 : FastGames.ContainsKey(roomKey)

+ 6 - 0
MafiaTelegramBot/DataBase/Entity/OpenedRolesEntity.cs

@@ -26,6 +26,8 @@ namespace MafiaTelegramBot.DataBase.Entity
         
         public List<Roles> ToList()
         {
+            Logs.LogOut(GetType(), "ToList");
+
             var list = new List<Roles> {Roles.Don, Roles.Doctor, Roles.Cop};
             if(Bodyguard) list.Add(Roles.Bodyguard);
             if(Dame) list.Add(Roles.Dame);
@@ -43,6 +45,8 @@ namespace MafiaTelegramBot.DataBase.Entity
 
         public bool AllRolesOpened()
         {
+            Logs.LogOut(GetType(), "AllRolesOpened");
+
             return Bodyguard && Dame && Detective
                    && Elder && Fool && Hooker && Journalist
                    && Lawyer && Necromancer && Parasite && Werewolf;
@@ -105,6 +109,8 @@ namespace MafiaTelegramBot.DataBase.Entity
 
         public bool TryOpenRole(Roles role)
         {
+            Logs.LogOut(GetType(), "TryOpenRole");
+
             switch (role)
             {
                 case Roles.All or Roles.Doctor or Roles.Mafia or Roles.Don or Roles.Cop or Roles.Villager or Roles.None: return false;

+ 2 - 0
MafiaTelegramBot/DataBase/Entity/StatisticsEntity.cs

@@ -20,6 +20,8 @@ namespace MafiaTelegramBot.DataBase.Entity
 
         public double GetWinrate()
         {
+            Logs.LogOut(GetType(), "GetWinrate");
+
             if (Games == 0) return 0.00;
             var wins = Convert.ToDouble(Wins);
             var games = Convert.ToDouble(Games);

+ 5 - 1
MafiaTelegramBot/DataBase/EntityDao/AchievementsDao.cs

@@ -5,12 +5,14 @@ using Microsoft.EntityFrameworkCore;
 
 namespace MafiaTelegramBot.DataBase.EntityDao
 {
-    public class AchievementsDao
+    public static class AchievementsDao
     {
         private static readonly MafiaDataBase DataBase = MafiaDataBase.GetInstance();
 
         public static async Task<AchievementsEntity> GetAchievementsProgressById(long id)
         {
+            Logs.LogOut(typeof(AchievementsDao), "GetAchievementsProgressById");
+
             if (await UserDataExists(id))
                 return await Task.Run(() => DataBase.Achievements.First(entity => entity.PlayerId == id));
             await DataBase.Achievements.AddAsync(new AchievementsEntity {PlayerId = id});
@@ -20,6 +22,8 @@ namespace MafiaTelegramBot.DataBase.EntityDao
 
         private static async Task<bool> UserDataExists(long id)
         {
+            Logs.LogOut(typeof(AchievementsDao), "UserDataExists");
+
             return await DataBase.Achievements.AnyAsync(entity => entity.PlayerId == id);
         }
     }

+ 4 - 2
MafiaTelegramBot/DataBase/EntityDao/OpenedRolesDao.cs

@@ -1,8 +1,6 @@
-using System.Collections.Generic;
 using System.Linq;
 using System.Threading.Tasks;
 using MafiaTelegramBot.DataBase.Entity;
-using MafiaTelegramBot.Resources;
 using Microsoft.EntityFrameworkCore;
 
 namespace MafiaTelegramBot.DataBase.EntityDao
@@ -13,6 +11,8 @@ namespace MafiaTelegramBot.DataBase.EntityDao
 
         public static async Task<OpenedRolesEntity> GetOpenedRolesById(long id)
         {
+            Logs.LogOut(typeof(OpenedRolesDao), "GetOpenedRolesById");
+
             if (await UserDataExists(id))
                 return await Task.Run(() => DataBase.OpenedRoles.First(entity => entity.Id == id));
             await DataBase.OpenedRoles.AddAsync(new OpenedRolesEntity {Id = id});
@@ -22,6 +22,8 @@ namespace MafiaTelegramBot.DataBase.EntityDao
 
         private static async Task<bool> UserDataExists(long id)
         {
+            Logs.LogOut(typeof(OpenedRolesDao), "UserDataExists");
+
             return await DataBase.OpenedRoles.AnyAsync(entity => entity.Id == id);
         }
     }

+ 4 - 0
MafiaTelegramBot/DataBase/EntityDao/StatisticsDao.cs

@@ -14,6 +14,8 @@ namespace MafiaTelegramBot.DataBase.EntityDao
         
         public static async Task<Dictionary<Roles, StatisticsEntity>> GetStatisticsListById(long userId)
         {
+            Logs.LogOut(typeof(StatisticsDao), "GetStatisticsListById");
+            
             if (await UserDataExists(userId))
             {
                 var list = await DataBase.Statistics.Where(s => s.UserId == userId).ToListAsync();
@@ -32,6 +34,8 @@ namespace MafiaTelegramBot.DataBase.EntityDao
         
         private static async Task<bool> UserDataExists(long id)
         {
+            Logs.LogOut(typeof(StatisticsDao), "UserDataExists");
+
             return await DataBase.Statistics.AnyAsync(entity => entity.UserId == id);
         }
     }

+ 14 - 2
MafiaTelegramBot/DataBase/EntityDao/UserDao.cs

@@ -15,10 +15,12 @@ namespace MafiaTelegramBot.DataBase.EntityDao
     public static class UserDao
     {
         public static readonly MafiaDataBase DataBase = MafiaDataBase.GetInstance();
-        public static readonly Dictionary<long, Player> ActiveUsers = new();
+        private static readonly Dictionary<long, Player> ActiveUsers = new();
 
         static UserDao()
         {
+            LogOut(typeof(UserDao), "UserDao");
+
             var memoryCleaner = new Timer
             {
                 Interval = Constants.MEMORY_CLEANER_INTERVAL,
@@ -30,6 +32,8 @@ namespace MafiaTelegramBot.DataBase.EntityDao
 
         public static async Task<Player> GetPlayerById(long id)
         {
+            LogOut(typeof(UserDao), "GetPlayerById");
+
             if (!await UserExists(id)) return null;
             if (ActiveUsers.ContainsKey(id)) return ActiveUsers[id];
             var player = new Player
@@ -45,6 +49,8 @@ namespace MafiaTelegramBot.DataBase.EntityDao
         
         public static async Task<Player> AddNew(User user)
         {
+            LogOut(typeof(UserDao), "AddNew");
+
             var newUser = new UserEntity
             {
                 Id = user.Id,
@@ -67,12 +73,16 @@ namespace MafiaTelegramBot.DataBase.EntityDao
 
         public static async Task<bool> UserExists(long id)
         {
+            LogOut(typeof(UserDao), "UserExists");
+
             if (ActiveUsers.ContainsKey(id)) return true;
             return await DataBase.Users.AnyAsync(user => user.Id == id);
         }
 
         private static async void CleanupMemory(object o, ElapsedEventArgs elapsedEventArgs)
         {
+            LogOut(typeof(UserDao), "CleanupMemory");
+
             try
             {
                 await DataBase.SaveChangesAsync();
@@ -81,12 +91,14 @@ namespace MafiaTelegramBot.DataBase.EntityDao
             }
             catch (Exception e)
             {
-                LogOutWarning(e.ToString());
+                LogOutWarning(e);
             }
         }
 
         public static async Task<long> GetIdByUsername(string username)
         {
+            LogOut(typeof(UserDao), "GetIdByUsername");
+
             var player = ActiveUsers.Values.FirstOrDefault(p=> p.Info.Username == username);
             if (player != null) return player.Info.Id;
             var user = await DataBase.Users.FirstOrDefaultAsync(p => p.Username == username);

+ 8 - 0
MafiaTelegramBot/DataBase/MafiaDataBase.cs

@@ -8,12 +8,16 @@ namespace MafiaTelegramBot.DataBase
     {
         private MafiaDataBase()
         {
+            Logs.LogOut(typeof(MafiaDataBase), "MafiaDataBase");
+
             Database.EnsureCreated();
         }
         private static MafiaDataBase _instance;
 
         public static MafiaDataBase GetInstance()
         {
+            Logs.LogOut(typeof(MafiaDataBase), "GetInstance");
+
             if(_instance!=null) return _instance;
             _instance = new MafiaDataBase();
             
@@ -27,6 +31,8 @@ namespace MafiaTelegramBot.DataBase
 
         protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
         {
+            Logs.LogOut(GetType(), "OnConfiguring");
+
             optionsBuilder.UseMySQL(
                 $"server={AppSettings.IpAddress};" +
                 $"port={AppSettings.Port};" +
@@ -38,6 +44,8 @@ namespace MafiaTelegramBot.DataBase
         
         protected override void OnModelCreating(ModelBuilder modelBuilder)
         {
+            Logs.LogOut(GetType(), "OnModelCreating");
+
             modelBuilder.Entity<StatisticsEntity>()
                 .HasKey(s => new {s.UserId, s.Role});
 

+ 6 - 0
MafiaTelegramBot/Extensions/DictionaryExtension.cs

@@ -6,6 +6,8 @@ namespace MafiaTelegramBot.Extensions
     {
         public static bool IsEquals<TK, TV>(this Dictionary<TK,TV> dictionary, Dictionary<TK,TV> obj)
         {
+            Logs.LogOut(typeof(DictionaryExtension), "IsEquals");
+
             if (dictionary.Count != obj.Count) return false;
             foreach (var (k, v) in dictionary)
             {
@@ -17,6 +19,8 @@ namespace MafiaTelegramBot.Extensions
         
         public static bool AddUniqueByKey<TK, TV>(this Dictionary<TK,TV> dictionary, TK k, TV v)
         {
+            Logs.LogOut(typeof(DictionaryExtension), "AddUniqueByKey");
+
             if (dictionary.ContainsKey(k)) return false;
             dictionary.Add(k, v);
             return true;
@@ -24,6 +28,8 @@ namespace MafiaTelegramBot.Extensions
         
         public static void AddUniqueOrReplaceByKey<TK, TV>(this Dictionary<TK,TV> dictionary, TK k, TV v)
         {
+            Logs.LogOut(typeof(DictionaryExtension), "AddUniqueOrReplaceByKey");
+
             if (dictionary.ContainsKey(k)) dictionary[k] = v;
             else dictionary.Add(k, v);
         }

+ 8 - 5
MafiaTelegramBot/Extensions/ListExtension.cs

@@ -7,6 +7,8 @@ namespace MafiaTelegramBot.Extensions
     {
         public static T GetAndRemove<T>(this List<T> list, int index)
         {
+            Logs.LogOut(typeof(ListExtension), "GetAndRemove");
+
             var value = list[index];
             list.RemoveAt(index);
             return value;
@@ -14,16 +16,15 @@ namespace MafiaTelegramBot.Extensions
 
         public static void AddTimes<T>(this List<T> list, T item, int times)
         {
-            for (var i = 0; i < times; ++i) list.Add(item);
-        }
+            Logs.LogOut(typeof(ListExtension), "AddTimes");
 
-        public static List<T> Copy<T>(this List<T> list)
-        {
-            return new(list);
+            for (var i = 0; i < times; ++i) list.Add(item);
         }
 
         public static bool AddUnique<T>(this List<T> list, T item)
         {
+            Logs.LogOut(typeof(ListExtension), "AddUnique");
+
             if (list.Contains(item)) return false;
             list.Add(item);
             return true;
@@ -31,6 +32,8 @@ namespace MafiaTelegramBot.Extensions
 
         public static void ConcatenateUnique<T>(this List<T> list, List<T> list2)
         {
+            Logs.LogOut(typeof(ListExtension), "ConcatenateUnique");
+
             foreach (var item in list2.Where(item => !list.Contains(item))) list.Add(item);
         }
     }

+ 6 - 0
MafiaTelegramBot/Game/GameRoles/BodyguardRole.cs

@@ -21,6 +21,8 @@ namespace MafiaTelegramBot.Game.GameRoles
 
         public override async Task NightAction()
         {
+            Logs.LogOut(GetType(), "NightAction");
+
             if (Player.IsAlive)
             {
                 NightTargetList = Room.Players.Values.Where(p => p.IsAlive && p.Info.Id != Player.Info.Id && p.Info.Id != NightTargetId).ToList();
@@ -33,6 +35,8 @@ namespace MafiaTelegramBot.Game.GameRoles
 
         public override async Task ApplyNightActionResult()
         {
+            Logs.LogOut(GetType(), "ApplyNightActionResult");
+
             if (NightTargetId != -2 && NightTargetId != -3)
             {
                 if (NightTargetId == -1) await SetRandomNightTarget();
@@ -48,6 +52,8 @@ namespace MafiaTelegramBot.Game.GameRoles
         }
         public override async Task SetNightTarget(long userId)
         {
+            Logs.LogOut(GetType(), "SetNightTarget");
+
             if (!Room.Players.ContainsKey(userId)) await Room.PlayersMessageChannel.SendTo(Player.Info, strings.this_player_left_from_game);
             else
             {

+ 6 - 0
MafiaTelegramBot/Game/GameRoles/CopRole.cs

@@ -22,6 +22,8 @@ namespace MafiaTelegramBot.Game.GameRoles
         }
         public override async Task NightAction()
         {
+            Logs.LogOut(GetType(), "NightAction");
+
             NightTargetId = -1;
             if (Player.IsAlive)
             {
@@ -35,6 +37,8 @@ namespace MafiaTelegramBot.Game.GameRoles
 
         public override async Task ApplyNightActionResult()
         {
+            Logs.LogOut(GetType(), "ApplyNightActionResult");
+
             if (NightTargetId != -2 && NightTargetId != -3)
             {
                 if (NightTargetId == -1) await SetRandomNightTarget();
@@ -58,6 +62,8 @@ namespace MafiaTelegramBot.Game.GameRoles
 
         public override async Task SetNightTarget(long userId)
         {
+            Logs.LogOut(GetType(), "SetNightTarget");
+
             if (!Room.Players.ContainsKey(userId)) await Room.PlayersMessageChannel.SendTo(Player.Info, strings.this_player_left_from_game);
             else
             {

+ 8 - 0
MafiaTelegramBot/Game/GameRoles/DameRole.cs

@@ -20,6 +20,8 @@ namespace MafiaTelegramBot.Game.GameRoles
         
         public override async Task NightAction()
         {
+            Logs.LogOut(GetType(), "NightAction");
+
             NightTargetId = -1;
             MafiaTargetId = -1;
             if (Player.IsAlive)
@@ -39,6 +41,8 @@ namespace MafiaTelegramBot.Game.GameRoles
 
         public override async Task ApplyNightActionResult()
         {
+            Logs.LogOut(GetType(), "ApplyNightActionResult");
+
             Player.IsSpeaker = false;
             if (NightTargetId != -2 && MafiaTargetId != -2 && NightTargetId != -3)
             {
@@ -60,6 +64,8 @@ namespace MafiaTelegramBot.Game.GameRoles
 
         public override async Task SetNightTarget(long userId)
         {
+            Logs.LogOut(GetType(), "SetNightTarget");
+
             if (!Room.Players.ContainsKey(userId)) await Room.PlayersMessageChannel.SendTo(Player.Info, strings.this_player_left_from_game);
             else
             {
@@ -70,6 +76,8 @@ namespace MafiaTelegramBot.Game.GameRoles
 
         public override async Task SetMafiaTarget(long userId)
         {
+            Logs.LogOut(GetType(), "SetMafiaTarget");
+
             MafiaTargetId = userId;
             if (userId == -4) await Room.PlayersMessageChannel.EditTo(Player.Info, MafiaMessageId, strings.you_skip_vote);
             else if(!Room.Players.ContainsKey(userId)) await Room.PlayersMessageChannel.SendTo(Player.Info, strings.this_player_left_from_game);

+ 8 - 0
MafiaTelegramBot/Game/GameRoles/DetectiveRole.cs

@@ -20,6 +20,8 @@ namespace MafiaTelegramBot.Game.GameRoles
         }
         public override async Task NightAction()
         {
+            Logs.LogOut(GetType(), "NightAction");
+
             NightTargetId = -1;
             if (Player.IsAlive)
             {
@@ -33,6 +35,8 @@ namespace MafiaTelegramBot.Game.GameRoles
 
         public override async Task ApplyNightActionResult()
         {
+            Logs.LogOut(GetType(), "ApplyNightActionResul");
+
             if (NightTargetId != -2 && NightTargetId != -3)
             {
                 if (NightTargetId == -1)
@@ -66,6 +70,8 @@ namespace MafiaTelegramBot.Game.GameRoles
 
         public override async Task SetNightTarget(long userId)
         {
+            Logs.LogOut(GetType(), "SetNightTarget");
+
             if (!Room.Players.ContainsKey(userId)) await Room.PlayersMessageChannel.SendTo(Player.Info, strings.this_player_left_from_game);
             else
             {
@@ -76,6 +82,8 @@ namespace MafiaTelegramBot.Game.GameRoles
 
         public async Task SetNightTarget(long userId, string action)
         {
+            Logs.LogOut(GetType(), "SetNightTarget2");
+
             if (!Room.Players.ContainsKey(userId)) await Room.PlayersMessageChannel.SendTo(Player.Info, strings.this_player_left_from_game);
             else
             {

+ 6 - 0
MafiaTelegramBot/Game/GameRoles/DoctorRole.cs

@@ -19,6 +19,8 @@ namespace MafiaTelegramBot.Game.GameRoles
         }
         public override async Task NightAction()
         {
+            Logs.LogOut(GetType(), "NightAction");
+
             NightTargetId = -1;
             if (Player.IsAlive)
             {
@@ -31,6 +33,8 @@ namespace MafiaTelegramBot.Game.GameRoles
 
         public override async Task ApplyNightActionResult()
         {
+            Logs.LogOut(GetType(), "ApplyNightActionResult");
+
             if (NightTargetId != -2 && NightTargetId != -3)
             {
                 if (NightTargetId == -1) await SetRandomNightTarget();
@@ -49,6 +53,8 @@ namespace MafiaTelegramBot.Game.GameRoles
 
         public override async Task SetNightTarget(long userId)
         {
+            Logs.LogOut(GetType(), "SetNightTarget");
+
             if (!Room.Players.ContainsKey(userId)) await Room.PlayersMessageChannel.SendTo(Player.Info, strings.this_player_left_from_game);
             else
             {

+ 8 - 0
MafiaTelegramBot/Game/GameRoles/DonRole.cs

@@ -18,6 +18,8 @@ namespace MafiaTelegramBot.Game.GameRoles
         }
         public override async Task NightAction()
         {
+            Logs.LogOut(GetType(), "NightAction");
+
             NightTargetId = -1;
             MafiaTargetId = -1;
             if (Player.IsAlive)
@@ -38,6 +40,8 @@ namespace MafiaTelegramBot.Game.GameRoles
 
         public override async Task ApplyNightActionResult()
         {
+            Logs.LogOut(GetType(), "ApplyNightActionResult");
+
             Player.IsSpeaker = false;
             if (NightTargetId != -2 && MafiaTargetId != -2 && NightTargetId != -3)
             {
@@ -60,6 +64,8 @@ namespace MafiaTelegramBot.Game.GameRoles
 
         public override async Task SetNightTarget(long userId)
         {
+            Logs.LogOut(GetType(), "SetNightTarget");
+
             if (!Room.Players.ContainsKey(userId)) await Room.PlayersMessageChannel.SendTo(Player.Info, strings.this_player_left_from_game);
             else
             {
@@ -70,6 +76,8 @@ namespace MafiaTelegramBot.Game.GameRoles
 
         public override async Task SetMafiaTarget(long userId)
         {
+            Logs.LogOut(GetType(), "SetMafiaTarget");
+
             MafiaTargetId = userId;
             if (userId == -4) await Room.PlayersMessageChannel.EditTo(Player.Info, MafiaMessageId, strings.you_skip_vote);
             else if(!Room.Players.ContainsKey(userId)) await Room.PlayersMessageChannel.SendTo(Player.Info, strings.this_player_left_from_game);

+ 2 - 0
MafiaTelegramBot/Game/GameRoles/ElderRole.cs

@@ -17,6 +17,8 @@ namespace MafiaTelegramBot.Game.GameRoles
         }
         public override async Task Dispatch()
         {
+            Logs.LogOut(GetType(), "Dispatch");
+
             await Room.PlayersMessageChannel.Send( $"{strings.villagers_want_dispatch} {Player.Info.NickName}, {strings.but_he_is_elder}");
         }
 

+ 6 - 0
MafiaTelegramBot/Game/GameRoles/FoolRole.cs

@@ -20,6 +20,8 @@ namespace MafiaTelegramBot.Game.GameRoles
         public bool _isWinner = false; 
         public override async Task<string> IsWon()
         {
+            Logs.LogOut(GetType(), "IsWon");
+
             return await Task.Run(() =>
             {
                 if (_isWinner) return strings.the_fool_won;
@@ -29,6 +31,8 @@ namespace MafiaTelegramBot.Game.GameRoles
 
         public override async Task Dispatch()
         { 
+            Logs.LogOut(GetType(), "Dispatch");
+
             await base.Dispatch();
             if (!Player.IsAlive)
             {
@@ -38,6 +42,8 @@ namespace MafiaTelegramBot.Game.GameRoles
 
         public override async Task Kill()
         {
+            Logs.LogOut(GetType(), "Kill");
+
              await base.Kill();
              _isWinner = false;
         }

+ 8 - 0
MafiaTelegramBot/Game/GameRoles/HookerRole.cs

@@ -19,6 +19,8 @@ namespace MafiaTelegramBot.Game.GameRoles
         }
         public override async Task NightAction()
         {
+            Logs.LogOut(GetType(), "NightAction");
+
             NightTargetId = -1;
             if (Player.IsAlive)
             {
@@ -32,6 +34,8 @@ namespace MafiaTelegramBot.Game.GameRoles
 
         public override async Task ApplyNightActionResult()
         {
+            Logs.LogOut(GetType(), "ApplyNightActionResult");
+
             if (NightTargetId != -3)
             {
                 if (NightTargetId == -1)
@@ -50,6 +54,8 @@ namespace MafiaTelegramBot.Game.GameRoles
 
         public override async Task SetNightTarget(long userId)
         {
+            Logs.LogOut(GetType(), "SetNightTarget");
+
             if(Room.Players.ContainsKey(userId))
             {
                 NightTargetId = userId;
@@ -62,6 +68,8 @@ namespace MafiaTelegramBot.Game.GameRoles
 
         public override async Task Kill()
         {
+            Logs.LogOut(GetType(), "Kill");
+
             await base.Kill();
             if (!Room.IsDay && Room.Players.ContainsKey(NightTargetId))
             {

+ 8 - 2
MafiaTelegramBot/Game/GameRoles/JournalistRole.cs

@@ -19,8 +19,10 @@ namespace MafiaTelegramBot.Game.GameRoles
             set => _color = (int) value;
         }
         public long NightTargetTwoId = -1;
-        public override async Task NightAction() { 
-            
+        public override async Task NightAction()
+        { 
+            Logs.LogOut(GetType(), "NightAction");
+
             NightTargetId = -1;
             NightTargetTwoId = -1;
             if (Player.IsAlive)
@@ -35,6 +37,8 @@ namespace MafiaTelegramBot.Game.GameRoles
 
         public override async Task ApplyNightActionResult()
         {
+            Logs.LogOut(GetType(), "ApplyNightActionResult");
+
             if (NightTargetId != -2 && NightTargetId != -3)
             {
                 if (NightTargetId == -1) await SetRandomNightTarget();
@@ -70,6 +74,8 @@ namespace MafiaTelegramBot.Game.GameRoles
 
         public override async Task SetNightTarget(long userId)
         {
+            Logs.LogOut(GetType(), "SetNightTarget");
+
             if (!Room.Players.ContainsKey(userId)) await Room.PlayersMessageChannel.SendTo(Player.Info, strings.this_player_left_from_game);
             else
             {

+ 6 - 0
MafiaTelegramBot/Game/GameRoles/LawyerRole.cs

@@ -19,6 +19,8 @@ namespace MafiaTelegramBot.Game.GameRoles
         }
         public override async Task NightAction()
         {
+            Logs.LogOut(GetType(), "NightAction");
+
             NightTargetId = -1;
             if(Player.IsAlive)
             {
@@ -32,6 +34,8 @@ namespace MafiaTelegramBot.Game.GameRoles
 
         public override async Task ApplyNightActionResult()
         {
+            Logs.LogOut(GetType(), "ApplyNightActionResult");
+
             if (NightTargetId != -2 && NightTargetId != -3)
             {
                 if (NightTargetId == -1) await SetRandomNightTarget();
@@ -53,6 +57,8 @@ namespace MafiaTelegramBot.Game.GameRoles
 
         public override async Task SetNightTarget(long userId)
         {
+            Logs.LogOut(GetType(), "SetNightTarget");
+
             if (!Room.Players.ContainsKey(userId)) await Room.PlayersMessageChannel.SendTo(Player.Info, strings.this_player_left_from_game);
             else
             {

+ 6 - 0
MafiaTelegramBot/Game/GameRoles/MafiaRole.cs

@@ -18,6 +18,8 @@ namespace MafiaTelegramBot.Game.GameRoles
         }
         public override async Task NightAction()
         {
+            Logs.LogOut(GetType(), "NightAction");
+
             MafiaTargetId = -1;
             if(Player.IsAlive)
             {
@@ -32,6 +34,8 @@ namespace MafiaTelegramBot.Game.GameRoles
 
         public override async Task ApplyNightActionResult()
         {
+            Logs.LogOut(GetType(), "ApplyNightActionResult");
+
             Player.IsSpeaker = false;
             if (MafiaTargetId == -1)
                 await Room.PlayersMessageChannel.EditTo(Player.Info, MafiaMessageId, strings.you_have_not_choosen_target);
@@ -39,6 +43,8 @@ namespace MafiaTelegramBot.Game.GameRoles
 
         public override async Task SetMafiaTarget(long userId)
         {
+            Logs.LogOut(GetType(), "SetMafiaTarget");
+
             MafiaTargetId = userId;
             if (userId == -4) await Room.PlayersMessageChannel.EditTo(Player.Info, MafiaMessageId, strings.you_skip_vote);
             else if(!Room.Players.ContainsKey(userId)) await Room.PlayersMessageChannel.SendTo(Player.Info, strings.this_player_left_from_game);

+ 6 - 0
MafiaTelegramBot/Game/GameRoles/NecromancerRole.cs

@@ -20,6 +20,8 @@ namespace MafiaTelegramBot.Game.GameRoles
         private bool _actionApplied;
         public override async Task NightAction()
         {
+            Logs.LogOut(GetType(), "NightAction");
+
             NightTargetId = -1;
             if (Player.IsAlive)
             {
@@ -38,6 +40,8 @@ namespace MafiaTelegramBot.Game.GameRoles
 
         public override async Task ApplyNightActionResult()
         {
+            Logs.LogOut(GetType(), "ApplyNightActionResult");
+
             if (_actionApplied || NightTargetId == -2) { }
             else if (NightTargetId == -1) await Room.PlayersMessageChannel.EditTo(Player.Info, MessageId, strings.you_have_not_choosen_target);
             else if (NightTargetId != -3)
@@ -57,6 +61,8 @@ namespace MafiaTelegramBot.Game.GameRoles
 
         public override async Task SetNightTarget(long userId)
         {
+            Logs.LogOut(GetType(), "SetNightTarget");
+
             if (!Room.Players.ContainsKey(userId)) await Room.PlayersMessageChannel.SendTo(Player.Info, strings.this_player_left_from_game);
             else if (userId != -1)
             {

+ 10 - 0
MafiaTelegramBot/Game/GameRoles/ParasiteRole.cs

@@ -21,6 +21,8 @@ namespace MafiaTelegramBot.Game.GameRoles
         public long ParentId;
         public override async Task NightAction()
         {
+            Logs.LogOut(GetType(), "NightAction");
+
             NightTargetId = -1;
             if (Player.IsAlive)
             {
@@ -42,11 +44,15 @@ namespace MafiaTelegramBot.Game.GameRoles
 
         public override async Task CancelNightActionResult(string message)
         {
+            Logs.LogOut(GetType(), "CancelNightActionResult");
+
             if (!_actionApplied) await base.CancelNightActionResult(message);
         }
 
         public override async Task ApplyNightActionResult()
         {
+            Logs.LogOut(GetType(), "ApplyNightActionResult");
+
             if (!_actionApplied && NightTargetId != -2 && NightTargetId != -3)
             {
                 _actionApplied = true;
@@ -69,6 +75,8 @@ namespace MafiaTelegramBot.Game.GameRoles
 
         public override async Task<string> IsWon()
         {
+            Logs.LogOut(GetType(), "IsWon");
+
             return await Task.Run(() =>
             {
                 if (!Room.Players.ContainsKey(ParentId)) return "";
@@ -78,6 +86,8 @@ namespace MafiaTelegramBot.Game.GameRoles
 
         public override async Task SetNightTarget(long userId)
         {
+            Logs.LogOut(GetType(), "SetNightTarget");
+
             if (!Room.Players.ContainsKey(userId)) await Room.PlayersMessageChannel.SendTo(Player.Info, strings.this_player_left_from_game);
             else
             {

+ 8 - 0
MafiaTelegramBot/Game/GameRoles/WerewolfRole.cs

@@ -20,6 +20,8 @@ namespace MafiaTelegramBot.Game.GameRoles
         }
         public override async Task NightAction()
         {
+            Logs.LogOut(GetType(), "NightAction");
+
             MafiaTargetId = -1;
             if (Player.IsAlive)
             {
@@ -37,6 +39,8 @@ namespace MafiaTelegramBot.Game.GameRoles
 
         public override async Task ApplyNightActionResult()
         {
+            Logs.LogOut(GetType(), "ApplyNightActionResult");
+
             if (IsMafia && NightTargetId != -3)
             {
                 Player.IsSpeaker = false;
@@ -47,6 +51,8 @@ namespace MafiaTelegramBot.Game.GameRoles
 
         public async Task TransformToMafia()
         {
+            Logs.LogOut(GetType(), "TransformToMafia");
+
             if (IsMafia) return;
             ColorRole = 2;
             IsMafia = true;
@@ -69,6 +75,8 @@ namespace MafiaTelegramBot.Game.GameRoles
 
         public override async Task SetMafiaTarget(long userId)
         {
+            Logs.LogOut(GetType(), "SetMafiaTarget");
+
             if (IsMafia)
             {
                 if (userId == -1) await Room.PlayersMessageChannel.EditTo(Player.Info, MafiaMessageId, strings.you_skip_vote);

+ 10 - 36
MafiaTelegramBot/Game/GameRooms/ExtendedGameRoom.cs

@@ -11,45 +11,15 @@ namespace MafiaTelegramBot.Game.GameRooms
 
         public Dictionary<Roles, int> CustomRoomSettings = new();
 
-        public Dictionary<int, int> Min = new Dictionary<int, int>
+        public Dictionary<int, int> Min = new()
             {
-                [1] = 1,
-                [2] = 1,
-                [3] = 1,
-                [4] = 1,
-                [5] = 1,
-                
-                [6] = 2,
-                [7] = 2,
-                [8] = 2,
-                [9] = 2,
-                [10] = 3,
-                [11] = 3,
-                [12] = 4,
-                [13] = 4,
-                [14] = 4,
-                [15] = 5,
-                [16] = 5
+                [1] = 1, [2] = 1, [3] = 1, [4] = 1, [5] = 1,
+                [6] = 2, [7] = 2, [8] = 2, [9] = 2, [10] = 3, [11] = 3, [12] = 4, [13] = 4, [14] = 4, [15] = 5, [16] = 5
             },
-            Max = new Dictionary<int, int>
+            Max = new()
             {
-                [1] = 1,
-                [2] = 2,
-                [3] = 3,
-                [4] = 4,
-                [5] = 5,
-                
-                [6] = 2,
-                [7] = 2,
-                [8] = 3,
-                [9] = 3,
-                [10] = 3,
-                [11] = 4,
-                [12] = 4,
-                [13] = 4,
-                [14] = 5,
-                [15] = 5,
-                [16] = 5
+                [1] = 1, [2] = 2, [3] = 3, [4] = 4, [5] = 5,
+                [6] = 2, [7] = 2, [8] = 3, [9] = 3, [10] = 3, [11] = 4, [12] = 4, [13] = 4, [14] = 5, [15] = 5, [16] = 5
             };
 
         public override Dictionary<Roles, List<Player>> PlayersRole { get; set; } = new()
@@ -76,6 +46,8 @@ namespace MafiaTelegramBot.Game.GameRooms
 
         protected override async Task<ResultCode> ReadSettings()
         {
+            Logs.LogOut(GetType(), "ReadSettings");
+
             return await Task.Run(() =>
             {
                 var rolesCount = CustomRoomSettings.Values.Sum();
@@ -92,6 +64,8 @@ namespace MafiaTelegramBot.Game.GameRooms
 
         public async Task InitSettings()
         {
+            Logs.LogOut(GetType(), "InitSettings");
+
             await Task.Run(() =>
             {
                 CustomRoomSettings.Add(Roles.Villager, Players.Count);

+ 6 - 0
MafiaTelegramBot/Game/GameRooms/FastGameRoom.cs

@@ -13,6 +13,8 @@ namespace MafiaTelegramBot.Game.GameRooms
 
         public async Task RunContinueVote()
         {
+            Logs.LogOut(GetType(), "RunContinueVote");
+
             var result = await PlayersMessageChannel.SendAndReturn(strings.press_button_to_continue_game, Keyboard.ContinueButton());
             var timer = new Timer { Interval = Constants.TIME_TO_DECIDE, AutoReset = false, Enabled = true};
 
@@ -27,6 +29,8 @@ namespace MafiaTelegramBot.Game.GameRooms
 
         private async Task ApplyResults()
         {
+            Logs.LogOut(GetType(), "ApplyResults");
+
             foreach (var player in Players.Values)
                 if (!ContinuePlayers.Contains(player))
                 {
@@ -46,6 +50,8 @@ namespace MafiaTelegramBot.Game.GameRooms
         }
         protected override async Task<ResultCode> ReadSettings()
         {
+            Logs.LogOut(GetType(), "ReadSettings");
+
             return await Task.Run(() =>
             {
                 Settings.Clear();

+ 32 - 0
MafiaTelegramBot/Game/GameRooms/GameRoom.GameProcess.cs

@@ -17,8 +17,12 @@ namespace MafiaTelegramBot.Game.GameRooms
     {
         public void Start()
         {
+            Logs.LogOut(GetType(), "Start");
+
             async void Action()
             {
+                Logs.LogOut(GetType(), "Action");
+
                 IsRunning = true;
                 await FirstNight();
                 await FirstDay();
@@ -31,6 +35,8 @@ namespace MafiaTelegramBot.Game.GameRooms
 
         private async Task FirstDay()
         {
+            Logs.LogOut(GetType(), "FirstDay");
+
             IsDay = true;
             await PlayersMessageChannel.SendSticker(Stickers.Sticker["Day"]);
             await PlayersMessageChannel.Send(strings.first_day_message);
@@ -55,6 +61,8 @@ namespace MafiaTelegramBot.Game.GameRooms
 
         private async Task FirstNight()
         {
+            Logs.LogOut(GetType(), "FirstNight");
+
             IsDay = false;
             await Task.Run(async () =>
             {
@@ -100,6 +108,8 @@ namespace MafiaTelegramBot.Game.GameRooms
 
         private async Task GameCycle()
         {
+            Logs.LogOut(GetType(), "GameCycle");
+
             await Task.Run(async () =>
             {
                 while (GameNotEnded())
@@ -116,6 +126,8 @@ namespace MafiaTelegramBot.Game.GameRooms
 
         private bool GameNotEnded()
         {
+            Logs.LogOut(GetType(), "GameNotEnded");
+
             if (Constants.INFINITY_GAME) return true;
             var playersCount = Players.Values.Count(p => p.IsAlive);
             var mafiaCount = Players.Values.Count(p => p.IsAlive && p.CurrentRole.ColorRole is 2);
@@ -125,6 +137,8 @@ namespace MafiaTelegramBot.Game.GameRooms
 
         private async Task DayPhase()
         {
+            Logs.LogOut(GetType(), "DayPhase");
+
             IsDay = true;
 
             var discussionTimer = new Timer { AutoReset = false, Interval = Constants.DISCUSSION_INTERVAL };
@@ -164,6 +178,8 @@ namespace MafiaTelegramBot.Game.GameRooms
 
         private async Task NightPhase()
         {
+            Logs.LogOut(GetType(), "NightPhase");
+
             IsDay = false;
             await PlayersMessageChannel.SendSticker(Stickers.Sticker["Night"]);
             await PlayersMessageChannel.Send(strings.city_falls_asleep);
@@ -190,6 +206,8 @@ namespace MafiaTelegramBot.Game.GameRooms
 
         public async Task SummingUpPhase()
         {
+            Logs.LogOut(GetType(), "SummingUpPhase");
+
             await Task.Run(async () =>
             {
                 var beforeKill = Players.Values.ToDictionary(p => p.Info.Id, p => p.IsAlive);
@@ -259,6 +277,8 @@ namespace MafiaTelegramBot.Game.GameRooms
 
         private async Task DefencePhase(List<Player> contenders)
         {
+            Logs.LogOut(GetType(), "DefencePhase");
+
             await Task.Run(async () =>
             {
                 var contendersCopy = contenders.ToList();
@@ -287,6 +307,8 @@ namespace MafiaTelegramBot.Game.GameRooms
 
         private async Task DispatchPhase()
         {
+            Logs.LogOut(GetType(), "DispatchPhase");
+
             await Task.Run(async () =>
             {
                 switch (VoteUpList.Count)
@@ -348,6 +370,8 @@ namespace MafiaTelegramBot.Game.GameRooms
 
         private async Task<List<Player>> CalculateCandidates()
         {
+            Logs.LogOut(GetType(), "CalculateCandidates");
+
             var message = strings.results_of_voting;
             foreach (var (playerId, targetId) in _voteKillList)
             {
@@ -376,6 +400,8 @@ namespace MafiaTelegramBot.Game.GameRooms
 
         private async Task<Message> PutUpVote(long playerId, long targetId, int messageId = -1, bool toKill = false)
         {
+            Logs.LogOut(GetType(), "PutUpVote");
+
             if (!Players.ContainsKey(playerId)) return new Message();
             
             if (targetId == 0)
@@ -416,6 +442,8 @@ namespace MafiaTelegramBot.Game.GameRooms
 
         private async Task EndOfGame()
         {
+            Logs.LogOut(GetType(), "EndOfGame");
+
             await Task.Run(async () =>
             {
                 if (Players.Values.Any(p => p.IsAlive)) await CalculateGameResults();
@@ -444,6 +472,8 @@ namespace MafiaTelegramBot.Game.GameRooms
 
         private async Task CalculateDrawResults()
         {
+            Logs.LogOut(GetType(), "CalculateDrawResults");
+
             foreach (var player in Players.Values)
             {
                 await MessageController.SendText(player.Info, strings.game_ended_with_draw);
@@ -455,6 +485,8 @@ namespace MafiaTelegramBot.Game.GameRooms
 
         private async Task CalculateGameResults()
         {
+            Logs.LogOut(GetType(), "CalculateGameResults");
+
             var aliveMafia = Players.Values.Count(p => p.CurrentRole.ColorRole is 2 && p.IsAlive);
             var aliveVillagers = Players.Values.Count(p => p.CurrentRole.ColorRole is 1 or 3 && p.IsAlive);
             var mafiaWins = aliveMafia >= aliveVillagers;

+ 24 - 0
MafiaTelegramBot/Game/GameRooms/GameRoom.MessageChannels.cs

@@ -19,24 +19,32 @@ namespace MafiaTelegramBot.Game.GameRooms
             
             public async Task<Message> SendTo(UserEntity info, string message, IReplyMarkup replyMarkup = null)
             {
+                Logs.LogOut(GetType(), "SendTo");
+
                 if (Room.Players.ContainsKey(info.Id)) return await MessageController.SendText(info, message, replyMarkup);
                 return new Message();
             }
             
             public async Task<Message> EditTo(UserEntity info, int messageId, string message, InlineKeyboardMarkup replyMarkup = null)
             {
+                Logs.LogOut(GetType(), "EditTo");
+
                 if (Room.Players.ContainsKey(info.Id))  return await MessageController.EditMessage(info, messageId, message, replyMarkup);
                 return new Message();
             }
             
             public async Task Send(string message, IReplyMarkup replyMarkup = null)
             {
+                Logs.LogOut(GetType(), "Send");
+
                 foreach (var info in Players)
                     await MessageController.SendText(info, message, replyMarkup);
             }
             
             public async Task<Dictionary<long, int>> SendAndReturn(string message, IReplyMarkup keyboard)
             {
+                Logs.LogOut(GetType(), "SendAndReturn");
+
                 var messages = new Dictionary<long, int>();
                 foreach (var info in Players)
                 {
@@ -49,6 +57,8 @@ namespace MafiaTelegramBot.Game.GameRooms
 
             public async Task<Message> SendExcept(UserEntity user, string message, IReplyMarkup replyMarkup = null)
             {
+                Logs.LogOut(GetType(), "SendExcept");
+
                 foreach (var info in Players)
                     if (info.Id != user.Id) await MessageController.SendText(info, message, replyMarkup);
                 return new Message();
@@ -56,17 +66,23 @@ namespace MafiaTelegramBot.Game.GameRooms
 
             public async Task SendSticker(string fileId)
             {
+                Logs.LogOut(GetType(), "SendSticker");
+
                 foreach (var info in Players)
                     await MessageController.SendSticker(info, fileId);
             }
 
             public void Remove(long playerId)
             {
+                Logs.LogOut(GetType(), "Remove");
+
                 Players = Players.Where(id => id.Id != playerId);
             }
 
             public void AddPerson(UserEntity user)
             {
+                Logs.LogOut(GetType(), "AddPerson");
+
                 var list = Players.ToList();
                 list.AddUnique(user);
                 Players = list;
@@ -74,11 +90,15 @@ namespace MafiaTelegramBot.Game.GameRooms
 
             public virtual async Task UpdateList(IEnumerable<Player> players)
             {
+                Logs.LogOut(GetType(), "UpdateList");
+
                 Players = await Task.FromResult(players.Select(p => p.Info));
             }
 
             public Channel(GameRoom room)
             {
+                Logs.LogOut(GetType(), "Channel");
+
                 Room = room;
                 Players = room.Players.Values.Select(p=>p.Info);
             }
@@ -88,11 +108,15 @@ namespace MafiaTelegramBot.Game.GameRooms
         {
             public MafiaChannel(GameRoom room) : base(room)
             {
+                Logs.LogOut(GetType(), "MafiaChannel");
+
                 Players = room.Players.Values.Where(p => p.CurrentRole.ColorRole is 2).Select(p=>p.Info);
             }
 
             public override async Task UpdateList(IEnumerable<Player> players)
             {
+                Logs.LogOut(GetType(), "UpdateList");
+
                 Players = await Task.FromResult(players.Where(p=>p.CurrentRole.ColorRole == 2).Select(p => p.Info));
             }
         }

+ 10 - 0
MafiaTelegramBot/Game/GameRooms/GameRoom.MessageHandler.cs

@@ -38,11 +38,15 @@ namespace MafiaTelegramBot.Game.GameRooms
 
             public MessageHandler(GameRoom room)
             {
+                Logs.LogOut(GetType(), "MessageHandler");
+
                 _room = room;
             }
 
             public async Task<Message> Handle(Update update, Player player)
             {
+                Logs.LogOut(GetType(), "Handle");
+
                 var text = update.Message.Text;
                 if (_room.IsRunning)
                 {
@@ -67,6 +71,8 @@ namespace MafiaTelegramBot.Game.GameRooms
             
             private async Task<Message> ForwardMessage(Player player, string message)
             {
+                Logs.LogOut(GetType(), "ForwardMessage");
+
                 if(!_room.IsRunning) return await _room.PlayersMessageChannel.SendExcept(player.Info, $"{player.Info.NickName}: {message}");
                 if (!player.IsAlive) return await _room.PlayersMessageChannel.SendTo(player.Info, strings.you_now_died);
                 if (player.IsBlocked) return await _room.PlayersMessageChannel.SendTo(player.Info, strings.you_blocked);
@@ -88,6 +94,8 @@ namespace MafiaTelegramBot.Game.GameRooms
 
             private async Task<Message> LookPlayers(Player player)
             {
+                Logs.LogOut(GetType(), "LookPlayers");
+
                 var players = _room.Players.Values.ToArray();
                 var nextPlayer = _room._turnOrder.Peek();
                 var knownRoles = player.CurrentRole.KnownRoles;
@@ -113,6 +121,8 @@ namespace MafiaTelegramBot.Game.GameRooms
 
             private async Task<Message> Leave(Player player, string text = "")
             {
+                Logs.LogOut(GetType(), "Leave");
+
                 var roomName = player.GetRoomName();
                 if (_exitingPlayers.Remove(player.Info.Id))
                 {

+ 10 - 0
MafiaTelegramBot/Game/GameRooms/GameRoom.PrepareRoom.cs

@@ -12,6 +12,8 @@ namespace MafiaTelegramBot.Game.GameRooms
     {
         private ResultCode CanStartGame()
         {
+            Logs.LogOut(GetType(), "CanStartGame");
+
             if (Players.Count < _minPlayers) return ResultCode.TooFewPlayers;
             if (Players.Count > MaxPlayers) return ResultCode.TooManyPlayers;
             return IsRunning ? ResultCode.GameAlreadyRunning : ResultCode.CodeOk;
@@ -19,6 +21,8 @@ namespace MafiaTelegramBot.Game.GameRooms
 
         public async Task<ResultCode> Prepare()
         {
+            Logs.LogOut(GetType(), "Prepare");
+
             var resultCode = CanStartGame();
             if (resultCode != ResultCode.CodeOk) return resultCode;
             resultCode = await ReadSettings();
@@ -32,6 +36,8 @@ namespace MafiaTelegramBot.Game.GameRooms
         
         private async Task AssignRoles()
         {
+            Logs.LogOut(GetType(), "AssignRoles");
+
             await Task.Run(async () =>
             {
                 var message = strings.in_this_game_we_have;
@@ -62,6 +68,8 @@ namespace MafiaTelegramBot.Game.GameRooms
 
         private async Task GenerateTurnOrder()
         {
+            Logs.LogOut(GetType(), "GenerateTurnOrder");
+
             await Task.Run(() =>
             {
                 var random = new Random();
@@ -80,6 +88,8 @@ namespace MafiaTelegramBot.Game.GameRooms
         
         public async Task SendRolesToUsers()
         {
+            Logs.LogOut(GetType(), "SendRolesToUsers");
+
             foreach (var player in Players.Values)
             {
                 await MessageController.SendSticker(player.Info, Stickers.Sticker[player.GetRole().ToString()]);

+ 4 - 0
MafiaTelegramBot/Game/GameRooms/GameRoom.QueryHandler.cs

@@ -14,11 +14,15 @@ namespace MafiaTelegramBot.Game.GameRooms
 
             public QueryHandler(GameRoom room)
             {
+                Logs.LogOut(GetType(), "QueryHandler");
+
                 _room = room;
             }
             
             public async Task<Message> Handle(Update update, Player player)
             {
+                Logs.LogOut(GetType(), "Handle");
+
                 var data = update.CallbackQuery.Data.Split('|');
                 var command = Enum.Parse<Callback>(data[0]);
                 switch (command)

+ 55 - 6
MafiaTelegramBot/Game/GameRooms/GameRoom.Role.cs

@@ -32,14 +32,39 @@ namespace MafiaTelegramBot.Game.GameRooms
             protected List<Player> NightTargetList = null;
             public abstract Roles RoleKey { get; }
             public abstract int RankingCost { get; }
-            
-            public virtual Task NightAction() { return Task.CompletedTask; }
-            public virtual Task SetMafiaTarget(long userId) { return Task.CompletedTask; }
-            public virtual Task ApplyNightActionResult() { return Task.CompletedTask; }
-            public virtual Task SetNightTarget(long userId) { return Task.CompletedTask; }
+
+            public virtual Task NightAction()
+            {
+                Logs.LogOut(GetType(), "NightAction");
+
+                return Task.CompletedTask;
+            }
+
+            public virtual Task SetMafiaTarget(long userId)
+            {
+                Logs.LogOut(GetType(), "SetMafiaTarget");
+
+                return Task.CompletedTask;
+            }
+
+            public virtual Task ApplyNightActionResult()
+            {
+                Logs.LogOut(GetType(), "ApplyNightActionResult");
+
+                return Task.CompletedTask;
+            }
+
+            public virtual Task SetNightTarget(long userId)
+            {
+                Logs.LogOut(GetType(), "SetNightTarget");
+
+                return Task.CompletedTask;
+            }
 
             public virtual async Task CancelNightActionResult(string message)
             {
+                Logs.LogOut(GetType(), "CancelNightActionResult");
+
                 if (MessageId != -1)
                 {
                     await Room.PlayersMessageChannel.EditTo(Player.Info, MessageId, strings.activity_blocked);
@@ -56,10 +81,14 @@ namespace MafiaTelegramBot.Game.GameRooms
 
             public virtual async Task<string> IsWon()
             {
-                return await Task.Run(() => "");
+                Logs.LogOut(GetType(), "IsWon");
+
+                return await Task.FromResult("");
             }
             public virtual async Task Dispatch()
             {
+                Logs.LogOut(GetType(), "Dispatch");
+
                 if (Room.PlayersRole.ContainsKey(Roles.Hooker)
                     && Room.PlayersRole[Roles.Hooker].Count == 1 
                     && Room.PlayersRole[Roles.Hooker][0].CurrentRole.NightTargetId == Player.Info.Id)
@@ -82,6 +111,8 @@ namespace MafiaTelegramBot.Game.GameRooms
 
             public virtual async Task Kill()
             {
+                Logs.LogOut(GetType(), "Kill");
+
                 Player.IsAlive = false;
                 if (Room.PlayersRole.ContainsKey(Roles.Parasite)
                     && Room.PlayersRole[Roles.Parasite].Count == 1
@@ -96,6 +127,8 @@ namespace MafiaTelegramBot.Game.GameRooms
 
             protected async Task SetRandomNightTarget()
             {
+                Logs.LogOut(GetType(), "SetRandomNightTarget");
+
                 var inGamePlayers = NightTargetList.Where(p => Room.Players.ContainsKey(p.Info.Id)).ToArray();
                 if (inGamePlayers.Length == 0)
                 {
@@ -112,12 +145,16 @@ namespace MafiaTelegramBot.Game.GameRooms
 
             protected Role(GameRoom room, Player player)
             {
+                Logs.LogOut(GetType(), "Role");
+
                 Room = room;
                 Player = player;
             }
 
             public async Task SpeakAction(int interval, bool enableTimer = false)
             {
+                Logs.LogOut(GetType(), "SpeakAction");
+
                 await Room.PlayersMessageChannel.SendTo(Player.Info, $"{strings.your_turn}", Keyboard.InGamePlayerMenuWithEndTurn);
                 Player.IsSpeaker = true;
                 var timer = new Timer(interval) {AutoReset = false};
@@ -132,6 +169,8 @@ namespace MafiaTelegramBot.Game.GameRooms
 
             public async Task VotingAction(bool isFirst = false)
             {
+                Logs.LogOut(GetType(), "VotingAction");
+
                 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 message = await Room.PlayersMessageChannel.SendTo(Player.Info,
@@ -140,6 +179,8 @@ namespace MafiaTelegramBot.Game.GameRooms
 
                 async void OnVoteTimerOnElapsed(object o, ElapsedEventArgs elapsedEventArgs)
                 {
+                    Logs.LogOut(GetType(), "OnVoteTimerElapsed");
+
                     if (isFirst)
                         await Room.PutUpVote(Player.Info.Id, Player.Info.Id, message.MessageId);
                     else
@@ -159,12 +200,16 @@ namespace MafiaTelegramBot.Game.GameRooms
             private List<Player> _votingTargetsList;
             public async Task VotingAction(List<Player> targets)
             {
+                Logs.LogOut(GetType(), "VotingAction2");
+
                 _votingMessageId = (await Room.PlayersMessageChannel.SendTo(Player.Info, strings.you_have_ten_seconds_to_vote, 
                     Keyboard.VoteKeyboard(targets, false, Callback.VoteToKill))).MessageId;
                 _votingTargetsList = targets;
             }
             public async Task RandomVoting()
             {
+                Logs.LogOut(GetType(), "RandomVoting");
+
                 var players = _votingTargetsList.Where(p => Room.Players.ContainsKey(p.Info.Id)).ToArray();
                 if(players.Length == 0) await Room.PlayersMessageChannel.EditTo(Player.Info, _votingMessageId, strings.nothing_to_choose);
                 else
@@ -177,12 +222,16 @@ namespace MafiaTelegramBot.Game.GameRooms
 
             public async Task DefenceAction()
             {
+                Logs.LogOut(GetType(), "DefenceAction");
+
                 await Room.PlayersMessageChannel.SendExcept(Player.Info, $"{strings.now_defence} ({Player.TurnOrder}) {Player.Info.NickName}");
                 await Room.PlayersMessageChannel.SendTo(Player.Info, strings.you_have_thirty_seconds_to_defence);
                 await SpeakAction(Constants.DEFENCE_INTERVAL);
             }
             public static Role GetNewRoleInstance(Roles roleKey, GameRoom room, Player player)
             {
+                Logs.LogOut(typeof(GameRoom), "GetNewRoleInstance");
+
                 return roleKey switch
                 {
                     Roles.All => new NoneRole(),

+ 16 - 0
MafiaTelegramBot/Game/GameRooms/GameRoom.Structure.cs

@@ -42,6 +42,8 @@ namespace MafiaTelegramBot.Game.GameRooms
         
         protected GameRoom()
         {
+            Logs.LogOut(GetType(), "GameRoom");
+
             IsDay = false;
             MHandler = new MessageHandler(this);
             QHandler = new QueryHandler(this);
@@ -50,6 +52,8 @@ namespace MafiaTelegramBot.Game.GameRooms
         }
         public async Task<List<Player>> GetPlayers()
         {
+            Logs.LogOut(GetType(), "GetPlayers");
+
             return await Task.Run(() =>
             {
                 var players = Players.Values.ToList();
@@ -60,11 +64,15 @@ namespace MafiaTelegramBot.Game.GameRooms
 
         public bool IsFilled()
         {
+            Logs.LogOut(GetType(), "IsFilled");
+
             return Players.Count >= MaxPlayers;
         }
 
         public async Task Leave(Player player)
         {
+            Logs.LogOut(GetType(), "Leave");
+
             Players.Remove(player.Info.Id);
             PlayersMessageChannel.Remove(player.Info.Id);
             MafiaMessageChannel.Remove(player.Info.Id);
@@ -96,21 +104,29 @@ namespace MafiaTelegramBot.Game.GameRooms
 
         public async Task<int> GetCapacity()
         {
+            Logs.LogOut(GetType(), "GetCapacity");
+
             return await Task.FromResult(Players.Count);
         }
 
         public async Task<int> GetMaximum()
         {
+            Logs.LogOut(GetType(), "GetMaximum");
+
             return await Task.FromResult(MaxPlayers);
         }
 
         public async Task<char> GetRoomRank()
         {
+            Logs.LogOut(GetType(), "GetRoomRank");
+
             return await Task.FromResult(Owner.GetRank());
         }
 
         private static Task<Message> SumRankingPoints(Player player, bool mafiaWins)
         {
+            Logs.LogOut(typeof(GameRoom), "SumRankingPoints");
+
             return player.CurrentRole.ColorRole switch
             {
                 3 when player.CurrentRole.IsWon().Result != "" => MessageController.SendText(player.Info,

+ 10 - 0
MafiaTelegramBot/Game/GameRooms/GameRoom.Timer.cs

@@ -10,6 +10,8 @@ namespace MafiaTelegramBot.Game.GameRooms
         private int _minutes;
         public void SetTimer()
         {
+            Logs.LogOut(GetType(), "SetTimer");
+
             _minutes = 0;
             _waitingPlayers = new System.Timers.Timer(60000);
             _waitingPlayers.Elapsed += async (_ , _) => { await Remove(); };
@@ -18,17 +20,23 @@ namespace MafiaTelegramBot.Game.GameRooms
         
         public void StopTimer()
         {
+            Logs.LogOut(GetType(), "StopTimer");
+
             _waitingPlayers.Stop();
         }
 
         public void StartTimer()
         {
+            Logs.LogOut(GetType(), "StartTimer");
+
             _minutes = 0;
             _waitingPlayers.Start();
         }
         
         private async Task Remove()
         {
+            Logs.LogOut(GetType(), "Remove");
+
             try
             {
                 switch (_minutes)
@@ -57,6 +65,8 @@ namespace MafiaTelegramBot.Game.GameRooms
         
         public void DeleteTimer()
         {
+            Logs.LogOut(GetType(), "DeleteTimer");
+
             _waitingPlayers.Stop();
             _waitingPlayers.Dispose();    
         }

+ 2 - 0
MafiaTelegramBot/Game/GameRooms/NormalGameRoom.cs

@@ -21,6 +21,8 @@ namespace MafiaTelegramBot.Game.GameRooms
 
         protected override async Task<ResultCode> ReadSettings()
         {
+            Logs.LogOut(GetType(), "ReadSettings");
+
             await Task.Run(() =>
             {
                 Settings.Add(Roles.Villager, Players.Count);

+ 52 - 0
MafiaTelegramBot/Game/Player.cs

@@ -31,26 +31,36 @@ namespace MafiaTelegramBot.Game
 
         public void SetActive()
         {
+            Logs.LogOut(GetType(), "SetActive");
+
             _lastActivity = DateTime.Now;
         }
 
         private TimeSpan GetLastActivityInterval()
         {
+            Logs.LogOut(GetType(), "GetLastActivityInterval");
+
             return DateTime.Now.Subtract(_lastActivity);
         }
 
         public bool IsInactive()
         {
+            Logs.LogOut(GetType(), "IsInactive");
+
             return GetLastActivityInterval().CompareTo(Constants.PLAYER_INACTIVE_INTERVAL) == 1 && !IsPlaying;
         }
 
         public string GetRoomName()
         {
+            Logs.LogOut(GetType(), "GetRoomName");
+
             return _roomName;
         }
 
         public bool SetRoomName(string roomName)
         {
+            Logs.LogOut(GetType(), "SetRoomName");
+
             if (_roomName != "") return false;
             _roomName = roomName;
             return true;
@@ -58,6 +68,8 @@ namespace MafiaTelegramBot.Game
 
         public bool RemoveGame()
         {
+            Logs.LogOut(GetType(), "RemoveGame");
+
             if (_roomName == "") return false;
             _roomName = "";
             return true;
@@ -65,21 +77,29 @@ namespace MafiaTelegramBot.Game
 
         public override bool Equals(object? obj)
         {
+            Logs.LogOut(GetType(), "Equals");
+
             return obj is Player player && player.Info.Id == Info.Id;
         }
 
         public Roles GetRole()
         {
+            Logs.LogOut(GetType(), "GetRole");
+
             return CurrentRole.RoleKey;
         }
 
         public string GetRoleName()
         {
+            Logs.LogOut(GetType(), "GetRoleName");
+
             return roles.ResourceManager.GetString(CurrentRole.RoleKey.ToString())!;
         }
 
         public void ResetState()
         {
+            Logs.LogOut(GetType(), "ResetState");
+
             CurrentRole = new NoneRole();
             IsAlive = true;
             IsSpeaker = true;
@@ -91,6 +111,8 @@ namespace MafiaTelegramBot.Game
 
         public void BodyguardRoleAchievementEvent()
         {
+            Logs.LogOut(GetType(), "BodyguardRoleAchievementEvent");
+
             if (!OpenedRoles.Bodyguard)
             {
                 Task.Run(async () =>
@@ -108,6 +130,8 @@ namespace MafiaTelegramBot.Game
 
         public void NecromancerRoleAchievementEvent()
         {
+            Logs.LogOut(GetType(), "NecromancerRoleAchievementEvent");
+
             if (!OpenedRoles.Necromancer)
             {
                 Task.Run(async () =>
@@ -125,6 +149,8 @@ namespace MafiaTelegramBot.Game
 
         public void FoolRoleAchievementEvent()
         {
+            Logs.LogOut(GetType(), "FoolRoleAchievementEvent");
+
             if (!OpenedRoles.Fool)
             {
                 Task.Run(async () =>
@@ -142,6 +168,8 @@ namespace MafiaTelegramBot.Game
 
         public void JournalistAchievementEvent()
         {
+            Logs.LogOut(GetType(), "JournalistAchievementEvent");
+
             if (!OpenedRoles.Journalist)
             {
                 Task.Run(async () =>
@@ -156,6 +184,8 @@ namespace MafiaTelegramBot.Game
 
         public void DetectiveAchievementEvent()
         {
+            Logs.LogOut(GetType(), "DetectiveAchievementEvent");
+
             if (!OpenedRoles.Detective)
             {
                 Task.Run(async () =>
@@ -174,6 +204,8 @@ namespace MafiaTelegramBot.Game
 
         public void DameRoleAchievementEvent()
         {
+            Logs.LogOut(GetType(), "DameRoleAchievementEvent");
+
             Task.Run(async () =>
             {
                 if (!OpenedRoles.Dame)
@@ -192,6 +224,8 @@ namespace MafiaTelegramBot.Game
 
         public void ElderRoleAchievementEvent()
         {
+            Logs.LogOut(GetType(), "ElderRoleAchievementEvent");
+
             Task.Run(async () =>
             {
                 if (!OpenedRoles.Elder)
@@ -210,6 +244,8 @@ namespace MafiaTelegramBot.Game
 
         public void LawyerRoleAchievementEvent()
         {
+            Logs.LogOut(GetType(), "LawyerRoleAchievementEvent");
+
             if (!OpenedRoles.Lawyer)
             {
                 Task.Run(async () =>
@@ -228,6 +264,8 @@ namespace MafiaTelegramBot.Game
 
         public void WerewolfRoleAchievementEvent(int color, bool reset = false)
         {
+            Logs.LogOut(GetType(), "WerewolfRoleAchievementEvent");
+
             if (!OpenedRoles.Werewolf)
             {
                 Task.Run(async () =>
@@ -254,6 +292,8 @@ namespace MafiaTelegramBot.Game
 
         public void HookerRoleAchievementEvent()
         {
+            Logs.LogOut(GetType(), "HookerRoleAchievementEvent");
+
             if (!OpenedRoles.Hooker)
             {
                 Task.Run(async () =>
@@ -268,6 +308,8 @@ namespace MafiaTelegramBot.Game
 
         public async Task ParasiteRoleAchievementEvent(List<long> team)
         {
+            Logs.LogOut(GetType(), "ParasiteRoleAchievementEvent");
+
             if (!OpenedRoles.Parasite)
             {
                 await Task.Run(async () =>
@@ -314,6 +356,8 @@ namespace MafiaTelegramBot.Game
 
             string BuildString(List<long> list)
             {
+                Logs.LogOut(GetType(), "BuildString");
+
                 if (list.Count == 0) return "";
                 var result = "";
                 foreach (var item in list) result += $"{item}|";
@@ -323,12 +367,16 @@ namespace MafiaTelegramBot.Game
 
         public void ResetParasiteProgress()
         {
+            Logs.LogOut(GetType(), "ResetParasiteProgress");
+
             Achievements.PlayerWinTeam = "";
             Achievements.PlayerWinTeamTwo = "";
         }
 
         public char GetRank()
         {
+            Logs.LogOut(GetType(), "GetRank");
+
             return Info.RankNumber switch
             {
                 <100 => 'a',
@@ -340,6 +388,8 @@ namespace MafiaTelegramBot.Game
 
         public int AddRankPoints()
         {
+            Logs.LogOut(GetType(), "AddRankPoints");
+
             switch (GetRank())
             {
                 case 'a':
@@ -368,6 +418,8 @@ namespace MafiaTelegramBot.Game
 
         public int SubtractRankPoints()
         {
+            Logs.LogOut(GetType(), "SubtractRankPoints");
+
             switch (GetRank())
             {
                 case 'b':

+ 8 - 0
MafiaTelegramBot/Game/RoomEncrypter.cs

@@ -12,6 +12,8 @@ namespace MafiaTelegramBot.Game
         
         public static string GetCode(string roomName)
         {
+            Logs.LogOut(typeof(RoomEncrypter), "GetCode");
+
             if (ShortName.ContainsKey(roomName)) return ShortName[roomName];
             var shortName = RandomString();
             while (ShortName.ContainsKey(shortName)) shortName = RandomString();
@@ -22,11 +24,15 @@ namespace MafiaTelegramBot.Game
 
         public static string GetName(string roomKey)
         {
+            Logs.LogOut(typeof(RoomEncrypter), "GetName");
+
             return FullName[roomKey];
         }
         
         public static void RemoveCode(string roomName)
         {
+            Logs.LogOut(typeof(RoomEncrypter), "RemoveCode");
+
             FullName.Remove(GetCode(roomName));
             ShortName.Remove(roomName);
         }
@@ -35,6 +41,8 @@ namespace MafiaTelegramBot.Game
 
         private static string RandomString(int length = Constants.ROOM_CODE_LENGTH)
         {
+            Logs.LogOut(typeof(RoomEncrypter), "RandomString");
+
             const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
             return new string(Enumerable.Repeat(chars, length)
                 .Select(s => s[Random.Next(s.Length)]).ToArray());

+ 8 - 0
MafiaTelegramBot/Logs.cs

@@ -1,5 +1,8 @@
 using System;
 using System.Globalization;
+using MafiaTelegramBot.Commands.CallbackQueries;
+using MafiaTelegramBot.Resources;
+
 // ReSharper disable LocalizableElement
 
 namespace MafiaTelegramBot
@@ -18,5 +21,10 @@ namespace MafiaTelegramBot
         {
             Console.WriteLine($"[ERROR] [{DateTime.Now.ToString(CultureInfo.CurrentCulture)}] {message}");
         }
+
+        public static void LogOut(Type className, string methodName)
+        {
+            if (Constants.LOG_OUT_ALL) Console.WriteLine($"[DEBUG INFO] {className} {methodName}");
+        }
     }
 }

+ 0 - 4
MafiaTelegramBot/MafiaTelegramBot.csproj

@@ -56,8 +56,4 @@
       </Compile>
     </ItemGroup>
 
-    <ItemGroup>
-      <Folder Include="CustomCollections\Extensions" />
-    </ItemGroup>
-
 </Project>

+ 12 - 0
MafiaTelegramBot/Other/GiveAway.cs

@@ -26,6 +26,8 @@ namespace MafiaTelegramBot.Other
 
         public GiveAway(int count, Roles prize)
         {
+            Logs.LogOut(GetType(), "GiveAway");
+
             _id = Utilities.Rnd.Next();
             _count = count;
             _prize = prize;
@@ -35,6 +37,8 @@ namespace MafiaTelegramBot.Other
 
         public async Task<Message> PostGiveAway(UserEntity info, string buttonText, string message = null, string imageUrl = null, string userName = null)
         {
+            Logs.LogOut(GetType(), "PostGiveAway");
+
             _buttonText = buttonText;
             _chatInfo = info;
             var keyboard = new InlineKeyboardMarkup(InlineKeyboardButton.WithUrl(_buttonText + $" ({_count})", _url));
@@ -51,6 +55,8 @@ namespace MafiaTelegramBot.Other
 
         private async Task<bool> TryDecreaseCount(long id)
         {
+            Logs.LogOut(GetType(), "TryDecreaseCount");
+
             if (_awardedIdList.Contains(id)) return false;
             _count--;
             await UpdateGiveAwayMessageOrDelete();
@@ -60,6 +66,8 @@ namespace MafiaTelegramBot.Other
 
         public async Task<ResultCode> GivePrizeTo(Player player)
         {
+            Logs.LogOut(GetType(), "GivePrizeTo");
+
             if (!await TryDecreaseCount(player.Info.Id)) return ResultCode.NowYouGetPrizeFromThisGiveaway;
             if (_prize is Roles.All) return await GivePackToUser(player);
             var firstPrize = _prize;
@@ -74,6 +82,8 @@ namespace MafiaTelegramBot.Other
 
         private static async Task<ResultCode> GivePackToUser(Player player)
         {
+            Logs.LogOut(typeof(GiveAway), "GivePackToUser");
+
             player.Info.PackCount++;
             await MessageController.SendSticker(player.Info, Stickers.Sticker["Pool"]);
             await MessageController.SendText(player.Info, $"{strings.your_packs} {player.Info.PackCount}", Keyboard.PackKeyboard());
@@ -82,6 +92,8 @@ namespace MafiaTelegramBot.Other
 
         private async Task UpdateGiveAwayMessageOrDelete()
         {
+            Logs.LogOut(GetType(), "UpdateGiveAwayMessageOrDelete");
+
             if (_count == 0)
             {
                 await MessageController.EditMessage(_chatInfo, _messageId, strings.giveaway_ended);

+ 3 - 10
MafiaTelegramBot/Resources/Constants.cs

@@ -1,6 +1,4 @@
 using System;
-using System.Collections.Generic;
-using Telegram.Bot.Types.Payments;
 // ReSharper disable UnreachableCode
 // ReSharper disable InconsistentNaming
 
@@ -9,6 +7,7 @@ namespace MafiaTelegramBot.Resources
     public static class Constants
     {
         public const bool DEBUG = false;
+        public const bool LOG_OUT_ALL = true;
         public const bool INFINITY_GAME = DEBUG;
         
         public const int PLAYER_LIMITS_MIN = DEBUG ? 1 : 6;
@@ -23,19 +22,13 @@ namespace MafiaTelegramBot.Resources
         public const int ACTIVE_MAFIA_CHANCE = 30;
         public const int ACTIVE_VILLAGER_CHANCE = 50;
         public const int PLAYERS_TO_START_FAST_GAME = DEBUG ? 3 : 8;
-        
-        public const string SHOP_CURRENCY = "RUB";
-        public static List<LabeledPrice> RANDOM_ROLE_PRICE = new()
-        {
-            new LabeledPrice {Label = "100 рублей", Amount = 10000}
-        };
 
 
         public const bool ENABLE_AUTO_VOTING = !DEBUG;
 
         public const int FIRST_NIGHT_INTERVAL = DEBUG ? 1*1000 : 10 * 1000;
-        public const int PUT_UP_VOTE_INTERVAL = DEBUG ? 20*1000 : 20 * 1000;
-        public const int VOTE_KILL_INTERVAL = DEBUG ? 20*1000 : 20 * 1000;
+        public const int PUT_UP_VOTE_INTERVAL = 20 * 1000;
+        public const int VOTE_KILL_INTERVAL = 20 * 1000;
         public const int NIGHT_ACTION_INTERVAL = DEBUG ? 20*1000 : 60 * 1000;
         public const int DEFENCE_INTERVAL = DEBUG ? 1*1000 : 30 * 1000;
         public const int DAY_SPEAK_INTERVAL = DEBUG ? 1*1000 : 60 * 1000;

+ 2 - 0
MafiaTelegramBot/Utilities.cs

@@ -34,6 +34,8 @@ namespace MafiaTelegramBot
         
         public static string GetResultCodeMessage(ResultCode code)
         {
+            Logs.LogOut(typeof(Utilities), "GetResultCodeMessage");
+
             return code switch
             {
                 ResultCode.TooManyPlayers => strings.too_many_players,