瀏覽代碼

Change keyboard, add opened roles entity

Tigran 4 年之前
父節點
當前提交
bc1a837854

+ 6 - 3
MafiaTelegramBot.sln.DotSettings.user

@@ -10,13 +10,16 @@
   </TestAncestor>
 &lt;/SessionState&gt;</s:String>
 	<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=MafiaTelegramBot_002Fappsettings/@EntryIndexedValue">True</s:Boolean>
+	<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=MafiaTelegramBot_002FResources_002Fkeyboard/@EntryIndexedValue">True</s:Boolean>
+	<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=MafiaTelegramBot_002FResources_002Froles/@EntryIndexedValue">True</s:Boolean>
+	<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=MafiaTelegramBot_002FResources_002Fstrings/@EntryIndexedValue">True</s:Boolean>
+	
+	
+	
 	
-	<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=MafiaTelegramBot_002FResources_002Fkeyboard/@EntryIndexedValue">False</s:Boolean>
-	<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=MafiaTelegramBot_002FResources_002Froles/@EntryIndexedValue">False</s:Boolean>
 	
 	
 	
-	<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=MafiaTelegramBot_002FResources_002Fstrings/@EntryIndexedValue">True</s:Boolean>
 	<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=MafiaTelegramBot_002Fstrings/@EntryIndexedValue">True</s:Boolean>
 	
 	<s:Boolean x:Key="/Default/ResxEditorPersonal/Initialized/@EntryValue">True</s:Boolean>

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

@@ -0,0 +1,45 @@
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using MafiaTelegramBot.Resources;
+
+namespace MafiaTelegramBot.DataBase.Entity
+{
+    [Table("opened_roles")]
+    public class OpenedRolesEntity
+    {
+        [Key]
+        [DatabaseGenerated(DatabaseGeneratedOption.None)]
+        [Column("id"), MaxLength(127)] public long Id { get; init; }
+
+        [Column("Bodyguard")] public bool Bodyguard { get; init; } = false;
+        [Column("Dame")] public bool Dame { get; init; } = false;
+        [Column("Detective")] public bool Detective { get; init; } = false;
+        [Column("Elder")] public bool Elder { get; init; } = false;
+        [Column("Fool")] public bool Fool { get; init; } = false;
+        [Column("Hooker")] public bool Hooker { get; init; } = false;
+        [Column("Journalist")] public bool Journalist { get; init; } = false;
+        [Column("Lawyer")] public bool Lawyer { get; init; } = false;
+        [Column("Necromancer")] public bool Necromancer { get; init; } = false;
+        [Column("Parasite")] public bool Parasite { get; init; } = false;
+        [Column("Werewolf")] public bool Werewolf { get; init; } = false;
+        
+        public List<Roles> ToList()
+        {
+            var list = new List<Roles> {Roles.Don, Roles.Doctor, Roles.Cop};
+            if(Bodyguard) list.Add(Roles.Bodyguard);
+            if(Dame) list.Add(Roles.Dame);
+            if(Detective) list.Add(Roles.Detective);
+            if(Elder) list.Add(Roles.Elder);
+            if(Fool) list.Add(Roles.Fool);
+            if(Hooker) list.Add(Roles.Hooker);
+            if(Journalist) list.Add(Roles.Journalist);
+            if(Lawyer) list.Add(Roles.Lawyer);
+            if(Necromancer) list.Add(Roles.Necromancer);
+            if(Parasite) list.Add(Roles.Parasite);
+            if(Werewolf) list.Add(Roles.Werewolf);
+            return list;
+        }
+    }
+}

+ 28 - 0
MafiaTelegramBot/DataBase/EntityDao/OpenedRolesDao.cs

@@ -0,0 +1,28 @@
+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
+{
+    public static class OpenedRolesDao
+    {
+        private static readonly MafiaDataBase DataBase = MafiaDataBase.GetInstance();
+
+        public static async Task<OpenedRolesEntity> GetOpenedRolesById(long id)
+        {
+            if (await UserDataExists(id))
+                return await Task.Run(() => DataBase.OpenedRoles.First(entity => entity.Id == id));
+            await DataBase.OpenedRoles.AddAsync(new OpenedRolesEntity {Id = id});
+            await DataBase.SaveChangesAsync();
+            return await Task.Run(()=> DataBase.OpenedRoles.First(entity => entity.Id == id));
+        }
+
+        private static async Task<bool> UserDataExists(long id)
+        {
+            return await DataBase.OpenedRoles.AnyAsync(entity => entity.Id == id);
+        }
+    }
+}

+ 2 - 2
MafiaTelegramBot/DataBase/EntityDao/StatisticsDao.cs

@@ -7,9 +7,9 @@ namespace MafiaTelegramBot.DataBase.EntityDao
     {
         private static readonly MafiaDataBase DataBase = MafiaDataBase.GetInstance();
         
-        public static async Task Update(StatisticsEntity statistics)
+        public static Task Update(StatisticsEntity statistics)
         {
-            
+            return Task.CompletedTask;
         }
     }
 }

+ 1 - 0
MafiaTelegramBot/DataBase/EntityDao/UserDao.cs

@@ -16,6 +16,7 @@ namespace MafiaTelegramBot.DataBase.EntityDao
             if (ActiveUsers.ContainsKey(id)) return ActiveUsers[id];
             var user = await Task.Run(()=> DataBase.Users.First(user1 => user1.Id == id));
             var player = Player.FromUserEntity(user);
+            player.OpenedRoles = await OpenedRolesDao.GetOpenedRolesById(id);
             ActiveUsers.Add(user.Id, player);
             return player;
         }

+ 1 - 0
MafiaTelegramBot/DataBase/MafiaDataBase.cs

@@ -22,6 +22,7 @@ namespace MafiaTelegramBot.DataBase
         
         public DbSet<UserEntity> Users { get; set; }
         public DbSet<StatisticsEntity> Statistics { get; set; }
+        public DbSet<OpenedRolesEntity> OpenedRoles { get; set; }
 
         protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
         {

+ 1 - 2
MafiaTelegramBot/Game/Player.cs

@@ -7,7 +7,6 @@ using MafiaTelegramBot.CustomCollections;
 using MafiaTelegramBot.DataBase.Entity;
 using MafiaTelegramBot.DataBase.EntityDao;
 using MafiaTelegramBot.Game.GameRoles;
-using MafiaTelegramBot.Models;
 using MafiaTelegramBot.Resources;
 using Microsoft.EntityFrameworkCore;
 using Newtonsoft.Json;
@@ -30,6 +29,7 @@ namespace MafiaTelegramBot.Game
         public int VotedCount = 0; //количество голосов за игрока
 
         public readonly StatisticsList Statistics = new();
+        public OpenedRolesEntity OpenedRoles = new();
 
         public async Task<bool> LoadStatistics()
         {
@@ -38,7 +38,6 @@ namespace MafiaTelegramBot.Game
             {
                 Statistics.Add(Enum.Parse<Roles>(role.Role),role);
             }
-
             return true;
         }
         

+ 25 - 62
MafiaTelegramBot/Resources/Keyboard.cs

@@ -188,68 +188,31 @@ namespace MafiaTelegramBot.Resources
 
         public static InlineKeyboardMarkup ChangeRolesKeyboard(long userId, string roomKey, ExtendedGameRoom room)
         {
-            var elder = room.CustomRoomSettings.ContainsKey(Roles.Elder);
-            var fool = room.CustomRoomSettings.ContainsKey(Roles.Fool);
-            var hooker = room.CustomRoomSettings.ContainsKey(Roles.Hooker);
-            var parasite = room.CustomRoomSettings.ContainsKey(Roles.Parasite);
-            var don = room.CustomRoomSettings.ContainsKey(Roles.Don);
-            var dame = room.CustomRoomSettings.ContainsKey(Roles.Dame);
-            var cop = room.CustomRoomSettings.ContainsKey(Roles.Cop);
-            var journalist = room.CustomRoomSettings.ContainsKey(Roles.Journalist);
-            var detective = room.CustomRoomSettings.ContainsKey(Roles.Detective);
-            var lawyer = room.CustomRoomSettings.ContainsKey(Roles.Lawyer);
-            var bodyguard = room.CustomRoomSettings.ContainsKey(Roles.Bodyguard);
-            var doctor = room.CustomRoomSettings.ContainsKey(Roles.Doctor);
-            var necromancer = room.CustomRoomSettings.ContainsKey(Roles.Necromancer);
-            var werewolf = room.CustomRoomSettings.ContainsKey(Roles.Werewolf);
-            return new InlineKeyboardMarkup( new[]
-            {
-                new[]
-                {
-                    InlineKeyboardButton.WithCallbackData($"{roles.Mafia}-", $"{Callback.ApplyRolesChange}|{userId}|{roomKey}|{Roles.Mafia}|-"),
-                    InlineKeyboardButton.WithCallbackData($"{roles.Mafia}+", $"{Callback.ApplyRolesChange}|{userId}|{roomKey}|{Roles.Mafia}|+"),
-                },
-                new[]
-                {
-                    InlineKeyboardButton.WithCallbackData($"{roles.Villager}-", $"{Callback.ApplyRolesChange}|{userId}|{roomKey}|{Roles.Villager}|-"),
-                    InlineKeyboardButton.WithCallbackData($"{roles.Villager}+", $"{Callback.ApplyRolesChange}|{userId}|{roomKey}|{Roles.Villager}|+"),
-                },
-                new[]
-                {
-                    InlineKeyboardButton.WithCallbackData($"{roles.Elder} ({(elder ? 1 : 0)})", $"{Callback.ApplyRolesChange}|{userId}|{roomKey}|{Roles.Elder}"),
-                    InlineKeyboardButton.WithCallbackData($"{roles.Fool} ({(fool ? 1 : 0)})", $"{Callback.ApplyRolesChange}|{userId}|{roomKey}|{Roles.Fool}"),
-                },
-                new[]
-                {
-                    InlineKeyboardButton.WithCallbackData($"{roles.Hooker} ({(hooker ? 1 : 0)})", $"{Callback.ApplyRolesChange}|{userId}|{roomKey}|{Roles.Hooker}"),
-                    InlineKeyboardButton.WithCallbackData($"{roles.Parasite} ({(parasite ? 1 : 0)})", $"{Callback.ApplyRolesChange}|{userId}|{roomKey}|{Roles.Parasite}"),
-                },
-                new[]
-                {
-                    InlineKeyboardButton.WithCallbackData($"{roles.Don} ({(don ? 1 : 0)})", $"{Callback.ApplyRolesChange}|{userId}|{roomKey}|{Roles.Don}"),
-                    InlineKeyboardButton.WithCallbackData($"{roles.Dame} ({(dame ? 1 : 0)})", $"{Callback.ApplyRolesChange}|{userId}|{roomKey}|{Roles.Dame}"),
-                },
-                new[]
-                {
-                    InlineKeyboardButton.WithCallbackData($"{roles.Cop} ({(cop ? 1 : 0)})", $"{Callback.ApplyRolesChange}|{userId}|{roomKey}|{Roles.Cop}"),
-                    InlineKeyboardButton.WithCallbackData($"{roles.Journalist} ({(journalist ? 1 : 0)})", $"{Callback.ApplyRolesChange}|{userId}|{roomKey}|{Roles.Journalist}"),
-                },
-                new[]
-                {
-                    InlineKeyboardButton.WithCallbackData($"{roles.Detective} ({(detective ? 1 : 0)})", $"{Callback.ApplyRolesChange}|{userId}|{roomKey}|{Roles.Detective}"),
-                    InlineKeyboardButton.WithCallbackData($"{roles.Lawyer} ({(lawyer ? 1 : 0)})", $"{Callback.ApplyRolesChange}|{userId}|{roomKey}|{Roles.Lawyer}"),
-                },
-                new[]
-                {
-                    InlineKeyboardButton.WithCallbackData($"{roles.Bodyguard} ({(bodyguard ? 1 : 0)})", $"{Callback.ApplyRolesChange}|{userId}|{roomKey}|{Roles.Bodyguard}"),
-                    InlineKeyboardButton.WithCallbackData($"{roles.Doctor} ({(doctor ? 1 : 0)})", $"{Callback.ApplyRolesChange}|{userId}|{roomKey}|{Roles.Doctor}"),
-                },
-                new[]
-                {
-                    InlineKeyboardButton.WithCallbackData($"{roles.Necromancer} ({(necromancer ? 1 : 0)})", $"{Callback.ApplyRolesChange}|{userId}|{roomKey}|{Roles.Necromancer}"),
-                    InlineKeyboardButton.WithCallbackData($"{roles.Werewolf} ({(werewolf ? 1 : 0)})", $"{Callback.ApplyRolesChange}|{userId}|{roomKey}|{Roles.Werewolf}"),
-                },
-            });
+            var openedRoles = room.Owner.OpenedRoles.ToList();
+            var keyboard = new InlineKeyboardButton[2+openedRoles.Count][];
+            keyboard[0] = new[]
+            {
+                InlineKeyboardButton.WithCallbackData($"{roles.Mafia}-",
+                    $"{Callback.ApplyRolesChange}|{userId}|{roomKey}|{Roles.Mafia}|-"),
+                InlineKeyboardButton.WithCallbackData($"{roles.Mafia}+",
+                    $"{Callback.ApplyRolesChange}|{userId}|{roomKey}|{Roles.Mafia}|+"),
+            };
+            keyboard[1] = new[]
+            {
+                InlineKeyboardButton.WithCallbackData($"{roles.Villager}-",
+                    $"{Callback.ApplyRolesChange}|{userId}|{roomKey}|{Roles.Villager}|-"),
+                InlineKeyboardButton.WithCallbackData($"{roles.Villager}+",
+                    $"{Callback.ApplyRolesChange}|{userId}|{roomKey}|{Roles.Villager}|+"),
+            };
+            for (var i = 0; i < openedRoles.Count; ++i)
+            {
+                var contain = room.CustomRoomSettings.ContainsKey(openedRoles[i]);
+                    keyboard[2+i] = new []{ InlineKeyboardButton.WithCallbackData(
+                        $"{roles.ResourceManager.GetString(openedRoles[i].ToString())} ({(contain ? 1 : 0)})",
+                        $"{Callback.ApplyRolesChange}|{userId}|{roomKey}|{openedRoles[i]}"
+                        )};
+            }
+            return keyboard;
         }
     }
 }