Tigran 4 роки тому
батько
коміт
6a47c2fb65

+ 4 - 4
MafiaTelegramBot/Game/GameRoles/CopRole.cs

@@ -13,7 +13,6 @@ namespace MafiaTelegramBot.Game.GameRoles
 
         public override async Task NightAction()
         {
-            NightTargetId = -1;
             var targets = Room.Players.Values.Except(KnownRoles).Where(p => p.IsAlive).ToList();
             var message = await Bot.SendWithMarkdown2(Player.ChatId, strings.choose_player_to_check_role, 
                 Keyboard.NightChooseTargetKeyboard(targets, Player.Id));
@@ -23,15 +22,16 @@ namespace MafiaTelegramBot.Game.GameRoles
         public override async Task ApplyNightActionResult()
         {
             if (NightTargetId == -1)
-                await Bot.Get().EditMessageTextAsync(Player.ChatId, MessageId, strings.you_have_not_choosen_target);
+                await Bot.EditMessageAsync(Player.ChatId, MessageId, strings.you_have_not_choosen_target);
             else
             {
                 var user = Room.Players[NightTargetId];
+                NightTargetId = -1;
                 KnownRoles.Add(user);
                 var role = user.GetRole() is Roles.Don or Roles.Mafia
                     ? roles.Mafia
                     : roles.Villager;
-                await Bot.Get().EditMessageTextAsync(Player.ChatId, MessageId, $"{strings.role_of_your_target} {user.NickName} - {role}");
+                await Bot.EditMessageAsync(Player.ChatId, MessageId, $"{strings.role_of_your_target} {user.NickName} - {role}");
             }
         }
 
@@ -44,7 +44,7 @@ namespace MafiaTelegramBot.Game.GameRoles
         public override Task<Message> SetNightTarget(long userId)
         {
             NightTargetId = userId;
-            return Bot.Get().EditMessageTextAsync(Player.ChatId, MessageId, $"{strings.you_choose_target} {Room.Players[userId].NickName}");
+            return Bot.EditMessageAsync(Player.ChatId, MessageId, $"{strings.you_choose_target} {Room.Players[userId].NickName}");
         }
 
         public CopRole(GameRoom room, Player player) : base(room, player) { }

+ 3 - 3
MafiaTelegramBot/Game/GameRoles/DoctorRole.cs

@@ -13,7 +13,6 @@ namespace MafiaTelegramBot.Game.GameRoles
         private bool _haveTargets = true;
         public override async Task NightAction()
         {
-            NightTargetId = -1;
             var targets = Room.Players.Values.Where(p => p.IsAlive && p.CanBeHealed).ToList();
             Message message = null;
             if (targets.Count == 0)
@@ -29,10 +28,11 @@ namespace MafiaTelegramBot.Game.GameRoles
         public override async Task ApplyNightActionResult()
         {
             if (NightTargetId == -1 && _haveTargets)
-                await Bot.Get().EditMessageTextAsync(Player.ChatId, MessageId, strings.you_have_not_choosen_target);
+                await Bot.EditMessageAsync(Player.ChatId, MessageId, strings.you_have_not_choosen_target);
             else
             {
                 var target = Room.Players[NightTargetId];
+                NightTargetId = -1;
                 if (!target.IsAlive)
                 {
                     target.IsAlive = true;
@@ -53,7 +53,7 @@ namespace MafiaTelegramBot.Game.GameRoles
             NightTargetId = userId;
             var target = Room.Players[userId];
             await Bot.SendWithMarkdown2(target.ChatId, strings.doctor_heals_you);
-            return await Bot.Get().EditMessageTextAsync(Player.ChatId, MessageId, $"{strings.you_choose_target} {Room.Players[userId].NickName}");
+            return await Bot.EditMessageAsync(Player.ChatId, MessageId, $"{strings.you_choose_target} {Room.Players[userId].NickName}");
         }
 
         public DoctorRole(GameRoom room, Player player) : base(room, player) { }

+ 4 - 4
MafiaTelegramBot/Game/GameRoles/DonRole.cs

@@ -14,7 +14,6 @@ namespace MafiaTelegramBot.Game.GameRoles
 
         public override async Task NightAction()
         {
-            NightTargetId = -1;
             Player.IsSpeaker = true;
             var targets = Room.Players.Values.Except(KnownRoles).Where(p => p.IsAlive).ToList();
             var message = await Bot.SendWithMarkdown2(Player.ChatId, strings.choose_player_to_check_role, 
@@ -26,15 +25,16 @@ namespace MafiaTelegramBot.Game.GameRoles
         {
             Player.IsSpeaker = false;
             if (NightTargetId == -1)
-                await Bot.Get().EditMessageTextAsync(Player.ChatId, MessageId, strings.you_have_not_choosen_target);
+                await Bot.EditMessageAsync(Player.ChatId, MessageId, strings.you_have_not_choosen_target);
             else
             {
                 var user = Room.Players[NightTargetId];
+                NightTargetId = -1;
                 KnownRoles.Add(user);
                 var role = user.GetRole() is Roles.Cop
                     ? roles.Cop
                     : roles.Villager;
-                await Bot.Get().EditMessageTextAsync(Player.ChatId, MessageId, $"{strings.role_of_your_target} {user.NickName} - {role}");
+                await Bot.EditMessageAsync(Player.ChatId, MessageId, $"{strings.role_of_your_target} {user.NickName} - {role}");
             }
         }
 
@@ -47,7 +47,7 @@ namespace MafiaTelegramBot.Game.GameRoles
         public override async Task<Message> SetNightTarget(long userId)
         {
             NightTargetId = userId;
-            return await Bot.Get().EditMessageTextAsync(Player.ChatId, MessageId, $"{strings.you_choose_target} {Room.Players[userId].NickName}");
+            return await Bot.EditMessageAsync(Player.ChatId, MessageId, $"{strings.you_choose_target} {Room.Players[userId].NickName}");
         }
 
         public DonRole(GameRoom room, Player player) : base(room, player) { }

+ 1 - 1
MafiaTelegramBot/Game/GameRoles/HookerRole.cs

@@ -31,7 +31,7 @@ namespace MafiaTelegramBot.Game.GameRoles
         public override async Task<Message> SetNightTarget(long userId)
         {
             NightTargetId = userId;
-            return await Bot.Get().EditMessageTextAsync(Player.ChatId, MessageId, $"{strings.you_choose_target} {Room.Players[userId].NickName}");
+            return await Bot.EditMessageAsync(Player.ChatId, MessageId, $"{strings.you_choose_target} {Room.Players[userId].NickName}");
         }
 
         public HookerRole(GameRoom room, Player player) : base(room, player) { }

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

@@ -13,7 +13,6 @@ namespace MafiaTelegramBot.Game.GameRoles
 
         public override async Task NightAction()
         {
-            NightTargetId = -1;
             Player.IsSpeaker = true;
             var targets = Room.Players.Values.Where(p => p.IsAlive).ToList();
             var message = await Bot.SendWithMarkdown2(Player.ChatId, strings.choose_player_to_kill, 
@@ -21,7 +20,11 @@ namespace MafiaTelegramBot.Game.GameRoles
             MessageId = message.MessageId;
         }
 
-        public override Task ApplyNightActionResult() { return Task.CompletedTask; }
+        public override Task ApplyNightActionResult()
+        {
+            NightTargetId = -1;
+            return Task.CompletedTask;
+        }
 
         public override Task CancelNightActionResult(string message)
         {
@@ -32,7 +35,7 @@ namespace MafiaTelegramBot.Game.GameRoles
         public override async Task<Message> SetNightTarget(long userId)
         {
             NightTargetId = userId;
-            return await Bot.Get().EditMessageTextAsync(Player.ChatId, MessageId, $"{strings.you_choose_target} {Room.Players[userId].NickName}");
+            return await Bot.EditMessageAsync(Player.ChatId, MessageId, $"{strings.you_choose_target} {Room.Players[userId].NickName}");
         }
 
         public MafiaRole(GameRoom room, Player player) : base(room, player) { }

+ 1 - 2
MafiaTelegramBot/Game/GameRooms/GameRoom.GameProcess.cs

@@ -4,8 +4,6 @@ using System.Threading;
 using System.Threading.Tasks;
 using MafiaTelegramBot.Controllers;
 using MafiaTelegramBot.CustomCollections.Extensions;
-using MafiaTelegramBot.DataBase.EntityDao;
-using MafiaTelegramBot.Game.GameRoles;
 using MafiaTelegramBot.Models;
 using MafiaTelegramBot.Resources;
 using Telegram.Bot.Types;
@@ -166,6 +164,7 @@ namespace MafiaTelegramBot.Game.GameRooms
                         if (selected.id == -1) continue;
                         killedPlayerId = selected.id;
                         Players[killedPlayerId].IsAlive = false;
+                        foreach (var mafia in players) await mafia.CurrentRole.ApplyNightActionResult();
                     }
                     else if (players.Count == 1)
                     {

+ 45 - 9
MafiaTelegramBot/Models/Bot.cs

@@ -1,3 +1,4 @@
+using System;
 using System.Collections.Generic;
 using System.Threading.Tasks;
 using MafiaTelegramBot.Models.Commands;
@@ -84,24 +85,59 @@ namespace MafiaTelegramBot.Models
             _repliesList = new List<Reply>();
         }
 
-        public static async Task SendStickerAsync(long chatId, string fileId)
+        public static async Task<Message> SendStickerAsync(long chatId, string fileId)
         {
-            if (chatId > 0)
-                await Get().SendStickerAsync(chatId, fileId, disableNotification: true);
+            try
+            {
+                return await Get().SendStickerAsync(chatId, fileId, disableNotification: true);
+            }
+            catch (Exception e)
+            {
+                Console.WriteLine(e.Message);
+                return new Message();
+            }
         }
 
-        public static async Task SendHyperLink(long chatId, string message)
+        public static async Task<Message> SendHyperLink(long chatId, string message)
         {
-            if (chatId > 0)
-                await Get().SendTextMessageAsync(chatId, message, ParseMode.Html, disableNotification: true);
+            try
+            {
+                return await Get().SendTextMessageAsync(chatId, message, ParseMode.Html, disableNotification: true);
+            }
+            catch (Exception e)
+            {
+                Console.WriteLine(e.Message);
+                return new Message();
+            }
         }
         
         public static async Task<Message> SendWithMarkdown2(long chatId, string message, IReplyMarkup replyMarkup = null)
         {
-            if (chatId > 0)
-                return await Get().SendTextMessageAsync(chatId, await Utilities.ToMarkdownString(message),
+            try
+            {
+                var editedMessage = await Utilities.ToMarkdownString(message);
+                return await Get().SendTextMessageAsync(chatId, editedMessage,
                     ParseMode.MarkdownV2, replyMarkup: replyMarkup, disableNotification: true);
-            return new Message();
+            }
+            catch (Exception e)
+            {
+                Console.WriteLine(e.Message);
+                return new Message();
+            }
+        }
+        
+        public static async Task<Message> EditMessageAsync(long chatId, int messageId, string message)
+        {
+            try
+            {
+                var editedMessage = await Utilities.ToMarkdownString(message);
+                return await Get().EditMessageTextAsync(chatId, messageId, editedMessage, parseMode:ParseMode.MarkdownV2);
+            }
+            catch (Exception e)
+            {
+                Console.WriteLine(e.Message);
+                return new Message();
+            }
         }
     }
 }