浏览代码

Refactor roles

Tigran 4 年之前
父节点
当前提交
7b5f045948

+ 1 - 2
MafiaTelegramBot/Game/GameRoles/BodyguardRole.cs

@@ -10,8 +10,7 @@ namespace MafiaTelegramBot.Game.GameRoles
         public override Roles RoleKey => Roles.Bodyguard;
         public override Task NightAction() { return Task.CompletedTask; }
         public override Task ApplyNightActionResult() { return Task.CompletedTask; }
-        public override Task CancelNightActionResult(string message) { return Task.CompletedTask; }
-        public override Task<Message> SetNightTarget(long userId) { return new (()=>new Message()); }
+        public override Task SetNightTarget(long userId) { return new (()=>new Message()); }
         public BodyguardRole(GameRoom room, Player player) : base(room, player) { }
     }
 }

+ 1 - 7
MafiaTelegramBot/Game/GameRoles/CopRole.cs

@@ -35,13 +35,7 @@ namespace MafiaTelegramBot.Game.GameRoles
             }
         }
 
-        public override Task CancelNightActionResult(string message)
-        {
-            //TODO why action canceled
-            return Task.CompletedTask;
-        }
-
-        public override Task<Message> SetNightTarget(long userId)
+        public override Task SetNightTarget(long userId)
         {
             NightTargetId = userId;
             return Bot.EditMessageAsync(Player.ChatId, MessageId, $"{strings.you_choose_target} {Room.Players[userId].NickName}");

+ 1 - 2
MafiaTelegramBot/Game/GameRoles/DameRole.cs

@@ -10,8 +10,7 @@ namespace MafiaTelegramBot.Game.GameRoles
         public override Roles RoleKey => Roles.Dame;
         public override Task NightAction() { return Task.CompletedTask; }
         public override Task ApplyNightActionResult() { return Task.CompletedTask; }
-        public override Task CancelNightActionResult(string message) { return Task.CompletedTask; }
-        public override Task<Message> SetNightTarget(long userId) { return new (()=>new Message()); }
+        public override Task SetNightTarget(long userId) { return new (()=>new Message()); }
         public DameRole(GameRoom room, Player player) : base(room, player) { }
     }
 }

+ 1 - 2
MafiaTelegramBot/Game/GameRoles/DetectiveRole.cs

@@ -10,8 +10,7 @@ namespace MafiaTelegramBot.Game.GameRoles
         public override Roles RoleKey => Roles.Detective;
         public override Task NightAction() { return Task.CompletedTask; }
         public override Task ApplyNightActionResult() { return Task.CompletedTask; }
-        public override Task CancelNightActionResult(string message) { return Task.CompletedTask; }
-        public override Task<Message> SetNightTarget(long userId) { return new (()=>new Message()); }
+        public override Task SetNightTarget(long userId) { return new (()=>new Message()); }
         public DetectiveRole(GameRoom room, Player player) : base(room, player) { }
     }
 }

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

@@ -14,7 +14,7 @@ namespace MafiaTelegramBot.Game.GameRoles
         public override async Task NightAction()
         {
             var targets = Room.Players.Values.Where(p => p.IsAlive && p.CanBeHealed).ToList();
-            Message message = null;
+            Message message;
             if (targets.Count == 0)
             {
                 message = await Bot.SendWithMarkdown2(Player.ChatId, strings.nothing_to_heal);
@@ -43,17 +43,12 @@ namespace MafiaTelegramBot.Game.GameRoles
             }
         }
 
-        public override Task CancelNightActionResult(string message)
-        {
-            return Task.CompletedTask;
-        }
-
-        public override async Task<Message> SetNightTarget(long userId)
+        public override async Task SetNightTarget(long userId)
         {
             NightTargetId = userId;
             var target = Room.Players[userId];
             await Bot.SendWithMarkdown2(target.ChatId, strings.doctor_heals_you);
-            return await Bot.EditMessageAsync(Player.ChatId, MessageId, $"{strings.you_choose_target} {Room.Players[userId].NickName}");
+            await Bot.EditMessageAsync(Player.ChatId, MessageId, $"{strings.you_choose_target} {Room.Players[userId].NickName}");
         }
 
         public DoctorRole(GameRoom room, Player player) : base(room, player) { }

+ 2 - 10
MafiaTelegramBot/Game/GameRoles/DonRole.cs

@@ -1,10 +1,8 @@
 using System.Linq;
 using System.Threading.Tasks;
-using System.Timers;
 using MafiaTelegramBot.Game.GameRooms;
 using MafiaTelegramBot.Models;
 using MafiaTelegramBot.Resources;
-using Telegram.Bot.Types;
 
 namespace MafiaTelegramBot.Game.GameRoles
 {
@@ -38,16 +36,10 @@ namespace MafiaTelegramBot.Game.GameRoles
             }
         }
 
-        public override Task CancelNightActionResult(string message)
-        {
-            //TODO why action canceled
-            return Task.CompletedTask;
-        }
-
-        public override async Task<Message> SetNightTarget(long userId)
+        public override async Task SetNightTarget(long userId)
         {
             NightTargetId = userId;
-            return await Bot.EditMessageAsync(Player.ChatId, MessageId, $"{strings.you_choose_target} {Room.Players[userId].NickName}");
+            await Bot.EditMessageAsync(Player.ChatId, MessageId, $"{strings.you_choose_target} {Room.Players[userId].NickName}");
         }
 
         public DonRole(GameRoom room, Player player) : base(room, player) { }

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

@@ -1,17 +1,12 @@
 using System.Threading.Tasks;
 using MafiaTelegramBot.Game.GameRooms;
 using MafiaTelegramBot.Resources;
-using Telegram.Bot.Types;
 
 namespace MafiaTelegramBot.Game.GameRoles
 {
     public class ElderRole : GameRoom.Role
     {
         public override Roles RoleKey => Roles.Elder;
-        public override Task NightAction() { return Task.CompletedTask; }
-        public override Task ApplyNightActionResult() { return Task.CompletedTask; }
-        public override Task CancelNightActionResult(string message) { return Task.CompletedTask; }
-        public override Task<Message> SetNightTarget(long userId) { return new (()=>new Message()); }
 
         public override async Task Dispatch()
         {

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

@@ -1,17 +1,11 @@
-using System.Threading.Tasks;
 using MafiaTelegramBot.Game.GameRooms;
 using MafiaTelegramBot.Resources;
-using Telegram.Bot.Types;
 
 namespace MafiaTelegramBot.Game.GameRoles
 {
     public class FoolRole : GameRoom.Role
     {
         public override Roles RoleKey => Roles.Fool;
-        public override Task NightAction() { return Task.CompletedTask; }
-        public override Task ApplyNightActionResult() { return Task.CompletedTask; }
-        public override Task CancelNightActionResult(string message) { return Task.CompletedTask; }
-        public override Task<Message> SetNightTarget(long userId) { return new (()=>new Message()); }
         public FoolRole(GameRoom room, Player player) : base(room, player) { }
     }
 }

+ 5 - 13
MafiaTelegramBot/Game/GameRoles/HookerRole.cs

@@ -1,9 +1,7 @@
 using System.Threading.Tasks;
-using System.Timers;
 using MafiaTelegramBot.Game.GameRooms;
 using MafiaTelegramBot.Models;
 using MafiaTelegramBot.Resources;
-using Telegram.Bot.Types;
 using User = MafiaTelegramBot.DataBase.Entity.UserEntity;
 
 namespace MafiaTelegramBot.Game.GameRoles
@@ -12,26 +10,20 @@ namespace MafiaTelegramBot.Game.GameRoles
     {
         public override Roles RoleKey => Roles.Hooker;
 
-        public override async Task NightAction()
+        public override Task NightAction()
         {
-            
-        }
-
-        public override async Task ApplyNightActionResult()
-        {
-            
+            return Task.CompletedTask;
         }
 
-        public override Task CancelNightActionResult(string message)
+        public override Task ApplyNightActionResult()
         {
-            //TODO why action canceled
             return Task.CompletedTask;
         }
 
-        public override async Task<Message> SetNightTarget(long userId)
+        public override async Task SetNightTarget(long userId)
         {
             NightTargetId = userId;
-            return await Bot.EditMessageAsync(Player.ChatId, MessageId, $"{strings.you_choose_target} {Room.Players[userId].NickName}");
+            await Bot.EditMessageAsync(Player.ChatId, MessageId, $"{strings.you_choose_target} {Room.Players[userId].NickName}");
         }
 
         public HookerRole(GameRoom room, Player player) : base(room, player) { }

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

@@ -10,8 +10,7 @@ namespace MafiaTelegramBot.Game.GameRoles
         public override Roles RoleKey => Roles.Journalist;
         public override Task NightAction() { return Task.CompletedTask; }
         public override Task ApplyNightActionResult() { return Task.CompletedTask; }
-        public override Task CancelNightActionResult(string message) { return Task.CompletedTask; }
-        public override Task<Message> SetNightTarget(long userId) { return new (()=>new Message()); }
+        public override Task SetNightTarget(long userId) { return new (()=>new Message()); }
         public JournalistRole(GameRoom room, Player player) : base(room, player) { }
     }
 }

+ 1 - 2
MafiaTelegramBot/Game/GameRoles/LawyerRole.cs

@@ -10,8 +10,7 @@ namespace MafiaTelegramBot.Game.GameRoles
         public override Roles RoleKey => Roles.Lawyer;
         public override Task NightAction() { return Task.CompletedTask; }
         public override Task ApplyNightActionResult() { return Task.CompletedTask; }
-        public override Task CancelNightActionResult(string message) { return Task.CompletedTask; }
-        public override Task<Message> SetNightTarget(long userId) { return new (()=>new Message()); }
+        public override Task SetNightTarget(long userId) { return new (()=>new Message()); }
         public LawyerRole(GameRoom room, Player player) : base(room, player) { }
     }
 }

+ 2 - 9
MafiaTelegramBot/Game/GameRoles/MafiaRole.cs

@@ -3,7 +3,6 @@ using System.Threading.Tasks;
 using MafiaTelegramBot.Game.GameRooms;
 using MafiaTelegramBot.Models;
 using MafiaTelegramBot.Resources;
-using Telegram.Bot.Types;
 
 namespace MafiaTelegramBot.Game.GameRoles
 {
@@ -27,16 +26,10 @@ namespace MafiaTelegramBot.Game.GameRoles
             return Task.CompletedTask;
         }
 
-        public override Task CancelNightActionResult(string message)
-        {
-            //TODO why action canceled
-            return Task.CompletedTask;
-        }
-
-        public override async Task<Message> SetNightTarget(long userId)
+        public override async Task SetNightTarget(long userId)
         {
             NightTargetId = userId;
-            return await Bot.EditMessageAsync(Player.ChatId, MessageId, $"{strings.you_choose_target} {Room.Players[userId].NickName}");
+            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/GameRoles/NecromancerRole.cs

@@ -10,8 +10,7 @@ namespace MafiaTelegramBot.Game.GameRoles
         public override Roles RoleKey => Roles.Necromancer;
         public override Task NightAction() { return Task.CompletedTask; }
         public override Task ApplyNightActionResult() { return Task.CompletedTask; }
-        public override Task CancelNightActionResult(string message) { return Task.CompletedTask; }
-        public override Task<Message> SetNightTarget(long userId) { return new (()=>new Message()); }
+        public override Task SetNightTarget(long userId) { return new (()=>new Message()); }
         public NecromancerRole(GameRoom room, Player player) : base(room, player) { }
     }
 }

+ 0 - 7
MafiaTelegramBot/Game/GameRoles/NoneRole.cs

@@ -1,18 +1,11 @@
-using System.Threading.Tasks;
 using MafiaTelegramBot.Game.GameRooms;
 using MafiaTelegramBot.Resources;
-using Telegram.Bot.Types;
 
 namespace MafiaTelegramBot.Game.GameRoles
 {
     public class NoneRole : GameRoom.Role
     {
         public override Roles RoleKey => Roles.None;
-        public override Task NightAction() { return Task.CompletedTask; }
-        public override Task ApplyNightActionResult() { return Task.CompletedTask; }
-        public override Task CancelNightActionResult(string message) { return Task.CompletedTask; }
-        public override Task<Message> SetNightTarget(long userId) { return new (()=>new Message()); }
-        public NoneRole(GameRoom room, Player player) : base(room, player) { }
         public NoneRole() : base(null, null) { }
     }
 }

+ 1 - 2
MafiaTelegramBot/Game/GameRoles/ParasiteRole.cs

@@ -10,8 +10,7 @@ namespace MafiaTelegramBot.Game.GameRoles
         public override Roles RoleKey => Roles.Parasite;
         public override Task NightAction() { return Task.CompletedTask; }
         public override Task ApplyNightActionResult() { return Task.CompletedTask; }
-        public override Task CancelNightActionResult(string message) { return Task.CompletedTask; }
-        public override Task<Message> SetNightTarget(long userId) { return new (()=>new Message()); }
+        public override Task SetNightTarget(long userId) { return new (()=>new Message()); }
         public ParasiteRole(GameRoom room, Player player) : base(room, player) { }
     }
 }

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

@@ -1,17 +1,11 @@
-using System.Threading.Tasks;
 using MafiaTelegramBot.Game.GameRooms;
 using MafiaTelegramBot.Resources;
-using Telegram.Bot.Types;
 
 namespace MafiaTelegramBot.Game.GameRoles
 {
     public class VillagerRole : GameRoom.Role
     {
         public override Roles RoleKey => Roles.Villager;
-        public override Task NightAction() { return Task.CompletedTask; }
-        public override Task ApplyNightActionResult() { return Task.CompletedTask; }
-        public override Task CancelNightActionResult(string message) { return Task.CompletedTask; }
-        public override Task<Message> SetNightTarget(long userId) { return new (()=>new Message()); }
         public VillagerRole(GameRoom room, Player player) : base(room, player) { }
     }
 }

+ 1 - 2
MafiaTelegramBot/Game/GameRoles/WerewolfRole.cs

@@ -11,8 +11,7 @@ namespace MafiaTelegramBot.Game.GameRoles
         public bool IsMafia = false;
         public override Task NightAction() { return Task.CompletedTask; }
         public override Task ApplyNightActionResult() { return Task.CompletedTask; }
-        public override Task CancelNightActionResult(string message) { return Task.CompletedTask; }
-        public override Task<Message> SetNightTarget(long userId) { return new (()=>new Message()); }
+        public override Task SetNightTarget(long userId) { return new (()=>new Message()); }
         public WerewolfRole(GameRoom room, Player player) : base(room, player) { }
     }
 }

+ 14 - 6
MafiaTelegramBot/Game/GameRooms/GameRoom.QueryHandler.cs

@@ -25,13 +25,21 @@ namespace MafiaTelegramBot.Game.GameRooms
                 var player = await UserDao.GetPlayerById(userId);
                 var chatId = player.ChatId;
                 var command = Enum.Parse<Callback>(data[0]);
-                var message = command switch
+                switch (command)
                 {
-                    Callback.Vote => await VoteAsync(player, long.Parse(data[2])),
-                    Callback.Skip => await SkipAsync(player),
-                    Callback.Target => await player.CurrentRole.SetNightTarget(long.Parse(data[2])),
-                    _ => await Bot.SendWithMarkdown2(chatId, strings.not_supported_in_game)
-                };
+                    case Callback.Vote:
+                        await VoteAsync(player, long.Parse(data[2]));
+                        break;
+                    case Callback.Skip:
+                        await SkipAsync(player);
+                        break;
+                    case Callback.Target:
+                        await player.CurrentRole.SetNightTarget(long.Parse(data[2]));
+                        break;
+                    default:
+                        await Bot.SendWithMarkdown2(chatId, strings.not_supported_in_game);
+                        break;
+                }
             }
 
             private async Task<Message> VoteAsync(Player player, long targetId)

+ 17 - 11
MafiaTelegramBot/Game/GameRooms/GameRoom.Role.cs

@@ -24,11 +24,24 @@ namespace MafiaTelegramBot.Game.GameRooms
             public readonly ManualResetEvent VoteEvent = new(false);
             protected int MessageId = -1;
             public abstract Roles RoleKey { get; }
-            public abstract Task NightAction();
-            public abstract Task ApplyNightActionResult();
-            public abstract Task CancelNightActionResult(string message);
+            public virtual Task NightAction() { return Task.CompletedTask; }
+            public virtual Task ApplyNightActionResult() { return Task.CompletedTask; }
+
+            public async Task CancelNightActionResult(string message)
+            {
+                await Bot.EditMessageAsync(Player.ChatId, MessageId, strings.activity_blocked);
+                NightTargetId = -1;
+                MessageId = -1;
+                await Bot.SendWithMarkdown2(Player.ChatId, message);
+            }
+            public virtual Task SetNightTarget(long userId) { return Task.CompletedTask; }
             
-            public abstract Task<Message> SetNightTarget(long userId);
+            public virtual async Task Dispatch()
+            {
+                await Room.PlayersCh.SendExcept(Player.Id, $"{strings.to_player} {Player.NickName} {strings.issued_posthumous_minute}");
+                await OneMinuteSpeak();
+                await Player.Kill();
+            }
 
             protected Role(GameRoom room, Player player)
             {
@@ -40,13 +53,6 @@ namespace MafiaTelegramBot.Game.GameRooms
             {
                 return NightTargetId;
             }
-            
-            public virtual async Task Dispatch()
-            {
-                await Room.PlayersCh.SendExcept(Player.Id, $"{strings.to_player} {Player.NickName} {strings.issued_posthumous_minute}");
-                await OneMinuteSpeak();
-                await Player.Kill();
-            }
 
             public async Task OneMinuteSpeak()
             {

+ 6 - 0
MafiaTelegramBot/Resources/strings.Designer.cs

@@ -734,5 +734,11 @@ namespace MafiaTelegramBot {
                 return ResourceManager.GetString("but_he_is_elder", resourceCulture);
             }
         }
+        
+        internal static string activity_blocked {
+            get {
+                return ResourceManager.GetString("activity_blocked", resourceCulture);
+            }
+        }
     }
 }

+ 3 - 0
MafiaTelegramBot/Resources/strings.resx

@@ -363,4 +363,7 @@
     <data name="but_he_is_elder" xml:space="preserve">
         <value>но он оказался старейшийной</value>
     </data>
+    <data name="activity_blocked" xml:space="preserve">
+        <value>Действие заблокировано</value>
+    </data>
 </root>