zelpold 4 lat temu
rodzic
commit
9cd57e80a2

+ 10 - 0
MafiaTelegramBot/Game/GameRoom.cs

@@ -33,6 +33,16 @@ namespace MafiaTelegramBot.Game
             });
         }
 
+        public async Task<List<User>> GetPlayers()
+        {
+            return await Task.Run(() =>
+            {
+                var players = Players.Values.ToList();
+                players.Remove(Creator);
+                return players;
+            });
+        }
+
         public bool IsFilled()
         {
             return Players.Count == MaxPlayers;

+ 3 - 1
MafiaTelegramBot/Models/Bot.cs

@@ -53,6 +53,7 @@ namespace MafiaTelegramBot.Models
                 new RoomSettingsCommand(),
                 new LeaveCommand(),
                 new LookPlayersListCommand(),
+                new KickPlayerCommand()
             };
         }
         
@@ -74,7 +75,8 @@ namespace MafiaTelegramBot.Models
                 new ConnectToPrivateRoomQuery(),
                 new SetPlayersMaximumQuery(),
                 new ConnectToPublicRoomQuery(),
-                new ConnectToSelectedRoomQuery()
+                new ConnectToSelectedRoomQuery(),
+                new KickSelectedPlayerQuery()
             };
         }
         

+ 24 - 0
MafiaTelegramBot/Models/Commands/KickPlayerCommand.cs

@@ -0,0 +1,24 @@
+using System;
+using System.Threading.Tasks;
+using MafiaTelegramBot.Controllers;
+using MafiaTelegramBot.DataBase;
+using MafiaTelegramBot.Resources;
+using Telegram.Bot.Types;
+
+namespace MafiaTelegramBot.Models.Commands
+{
+    public class KickPlayerCommand : Command
+    {
+        protected override string Name => keyboard.kick_player;
+        protected override async Task<Message> Execute(Update update)
+        {
+            var user = await UserDao.GetUserById(UserId);
+            var room = await RoomController.GetRoom(user.GetRoomKey());
+            var players = await room.GetPlayers();
+            if (players.Count > 0)
+                return await Bot.SendWithMarkdown2(ChatId, strings.kick_user, Keyboards.KickKeyboard(players));
+            return await Bot.SendWithMarkdown2(ChatId, strings.users_list_empty);
+        }
+        
+    }
+}

+ 24 - 0
MafiaTelegramBot/Models/Inlines/KickSelectedPlayerQuery.cs

@@ -0,0 +1,24 @@
+using System.Threading.Tasks;
+using MafiaTelegramBot.Controllers;
+using MafiaTelegramBot.DataBase;
+using MafiaTelegramBot.Resources;
+using Telegram.Bot.Types;
+
+namespace MafiaTelegramBot.Models.Inlines
+{
+    public class KickSelectedPlayerQuery : Query
+    {
+        protected override string Name => callback.kick_user;
+        protected override async Task<Message> Execute(Update update)
+        {
+            var user = await UserDao.GetUserById(UserId);
+            var resultCode = await RoomController.LeaveFromGame(user);
+            if (resultCode == ResultCode.CodeOk)
+            {
+                await Bot.SendWithMarkdown2(ChatId, $"{strings.kick_user_success}");
+                return await Bot.SendWithMarkdown2(user.ChatId, $"{strings.you_were_kicked}", Keyboards.MainMenu);
+            }
+            return await Utilities.GetResultCodeMessage(resultCode, ChatId);
+        }
+    }
+}

+ 17 - 1
MafiaTelegramBot/Resources/Keyboards.cs

@@ -1,4 +1,5 @@
 using System.Collections.Generic;
+using MafiaTelegramBot.DataBase;
 using MafiaTelegramBot.Game;
 using Telegram.Bot.Types.ReplyMarkups;
 
@@ -107,14 +108,29 @@ namespace MafiaTelegramBot.Resources
             var inlineButtons = new InlineKeyboardButton[rooms.Count];
             for (var i = 0; i < rooms.Count && i < Constants.MAX_SHOWING_ROOMS; ++i) // buttons
             {
+                var s = rooms[i].IsExtended ? "Р" : "C";
                 inlineButtons[i] = new InlineKeyboardButton
                 {
                     Text =
-                        $"{rooms[i].RoomName} ({rooms[i].Players.Values.Count.ToString()}/{rooms[i].MaxPlayers.ToString()})",
+                        $"[{s}] {rooms[i].RoomName} ({rooms[i].Players.Values.Count.ToString()}/{rooms[i].MaxPlayers.ToString()})",
                     CallbackData = $"{callback.connect_to_selected_room}|{userId}|{RoomEncrypter.FullToShort(rooms[i].RoomName)}"
                 };
             }
             return new InlineKeyboardMarkup(inlineButtons);
         }
+
+        public static InlineKeyboardMarkup KickKeyboard(List<User> users)
+        {
+            var inlineButtons = new InlineKeyboardButton[users.Count];
+            for (var i = 0; i < users.Count; ++i)
+            {
+                inlineButtons[i] = new InlineKeyboardButton
+                {
+                    Text = $"{users[i].NickName} {strings.kick}",
+                    CallbackData = $"{callback.kick_user}|{users[i].Id}"
+                };
+            }
+            return new InlineKeyboardMarkup(inlineButtons);
+        }
     }
 }

+ 9 - 0
MafiaTelegramBot/Resources/callback.Designer.cs

@@ -123,6 +123,15 @@ namespace MafiaTelegramBot.Resources {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to kick_user.
+        /// </summary>
+        internal static string kick_user {
+            get {
+                return ResourceManager.GetString("kick_user", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to make_private_room.
         /// </summary>

+ 3 - 0
MafiaTelegramBot/Resources/callback.resx

@@ -63,4 +63,7 @@
     <data name="set_players_maximum" xml:space="preserve">
         <value>set_players_maximum</value>
     </data>
+    <data name="kick_user" xml:space="preserve">
+        <value>kick_user</value>
+    </data>
 </root>

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

@@ -186,6 +186,33 @@ namespace MafiaTelegramBot {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to Исключить.
+        /// </summary>
+        internal static string kick {
+            get {
+                return ResourceManager.GetString("kick", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Исключить пользователя.
+        /// </summary>
+        internal static string kick_user {
+            get {
+                return ResourceManager.GetString("kick_user", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to игрок был исключён.
+        /// </summary>
+        internal static string kick_user_success {
+            get {
+                return ResourceManager.GetString("kick_user_success", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to Вы покинули игру.
         /// </summary>
@@ -321,6 +348,15 @@ namespace MafiaTelegramBot {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to Режим:.
+        /// </summary>
+        internal static string room_mode {
+            get {
+                return ResourceManager.GetString("room_mode", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to Комната с именем.
         /// </summary>
@@ -501,6 +537,15 @@ namespace MafiaTelegramBot {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to Вы были исключены.
+        /// </summary>
+        internal static string you_were_kicked {
+            get {
+                return ResourceManager.GetString("you_were_kicked", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to Ваше имя:.
         /// </summary>

+ 15 - 0
MafiaTelegramBot/Resources/strings.resx

@@ -168,4 +168,19 @@
     <data name="players" xml:space="preserve">
         <value>игроков</value>
     </data>
+    <data name="room_mode" xml:space="preserve">
+        <value>Режим:</value>
+    </data>
+    <data name="kick" xml:space="preserve">
+        <value>Исключить</value>
+    </data>
+    <data name="kick_user" xml:space="preserve">
+        <value>Исключить пользователя</value>
+    </data>
+    <data name="kick_user_success" xml:space="preserve">
+        <value>игрок был исключён</value>
+    </data>
+    <data name="you_were_kicked" xml:space="preserve">
+        <value>Вы были исключены</value>
+    </data>
 </root>