Browse Source

refactor registering new user

Tigran 4 years ago
parent
commit
9bda8c068e

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

@@ -25,6 +25,7 @@ namespace MafiaTelegramBot.DataBase.EntityDao
             memoryCleaner.Elapsed += async (_, _) => await CleanupMemory();
             memoryCleaner.Start();
         }
+        
         public static async Task<Player> GetPlayerById(long id)
         {
             if (ActiveUsers.ContainsKey(id)) return ActiveUsers[id];

+ 24 - 0
MafiaTelegramBot/Models/Bot.cs

@@ -2,6 +2,8 @@ using System;
 using System.Collections.Generic;
 using System.Threading;
 using System.Threading.Tasks;
+using MafiaTelegramBot.DataBase.EntityDao;
+using MafiaTelegramBot.Game;
 using MafiaTelegramBot.Models.Commands;
 using MafiaTelegramBot.Models.Inlines;
 using MafiaTelegramBot.Models.Payments;
@@ -155,5 +157,27 @@ namespace MafiaTelegramBot.Models
             await Get().AnswerPreCheckoutQueryAsync(preCheckoutQueryId, token);
             Console.WriteLine(token.IsCancellationRequested);
         }
+
+        public static async Task RegisterNewUser(Update update)
+        {
+            var chatId = update.Message.Chat.Id;
+            var userId = update.Message.From.Id;
+            var username = await Utilities.EscapeSpecific(update.Message.From.Username);
+            var firstName = await Utilities.EscapeSpecific(update.Message.From.FirstName);
+            var lastName = await Utilities.EscapeSpecific(update.Message.From.LastName);
+            var nickName = "";
+            if (firstName != "") nickName += firstName;
+            if(lastName != "") nickName += nickName != "" ? $" {lastName}" : lastName;
+            var user = new Player
+            {
+                Id = userId,
+                ChatId = chatId,
+                Username = username,
+                NickName =  nickName
+            };
+            await UserDao.Update(user);
+            await UserDao.CreateOrUpdateStats(user);
+            UserDao.ActiveUsers.Add(user.Id, user);
+        }
     }
 }

+ 6 - 5
MafiaTelegramBot/Models/Commands/Command.cs

@@ -27,22 +27,23 @@ namespace MafiaTelegramBot.Models.Commands
         public static async Task<Message> Update(Update update)
         {
             var chatId = update.Message.Chat.Id;
-            await Bot.Get().SendChatActionAsync(chatId, ChatAction.Typing);
             var userId = update.Message.From.Id;
+            await Bot.Get().SendChatActionAsync(chatId, ChatAction.Typing);
+            
+            if (!await UserDao.UserExists(userId)) await Bot.RegisterNewUser(update);
+            
             var user = await UserDao.GetPlayerById(userId);
             user.SetActive();
             var commands = Bot.Commands;
             var message = update.Message.Text;
-            var startCommand = new StartCommand();
-            //TODO refactor later
-            if (message.Contains(startCommand.Name)) return await ((Command?) startCommand.Clone(chatId, userId))!.Execute(update);
-
+            
             if (user.IsPlaying)
             {
                 var roomKey = RoomEncrypter.GetCode(user.GetRoomName());
                 var room = RoomController.GetRoom(roomKey);
                 return await room.MHandler.Handle(update);
             }
+            
             var command = FirstOrDefault(commands, message);
             if(command != null) return await ((Command?) command.Clone(chatId, userId))!.Execute(update);
             if (Bot.UsersThatChangesNickname.Remove(userId))

+ 7 - 33
MafiaTelegramBot/Models/Commands/StartCommand.cs

@@ -14,42 +14,16 @@ namespace MafiaTelegramBot.Models.Commands
         protected override async Task<Message> Execute(Update update)
         {
             var command = update.Message.Text.Split(' ');
-            Task<Message> result;
-            if (await UserDao.UserExists(UserId))
-            {
-                var player = await UserDao.GetPlayerById(UserId);
-                await UserDao.CreateOrUpdateStats(player);
-                if (player.GetRoomName() != "")
-                    return await Bot.SendWithMarkdown2(ChatId, $"{strings.prefer_leave_from_room} {player.GetRoomName()}");
-                if (command.Length <= 1)
-                    return await Bot.SendWithMarkdown2(ChatId, strings.start_message, Keyboard.MainMenu);
-                var code = await RoomController.ConnectToGame(player, command[1]);
-                result = code == ResultCode.CodeOk
-                    ? Bot.SendWithMarkdown2(ChatId, strings.successful_entry_into_room, Keyboard.PlayerGameMenu)
-                    : Utilities.GetResultCodeMessage(code, ChatId);
-                return await result;
-            }
-            var username = await Utilities.EscapeSpecific(update.Message.From.Username);
-            var firstName = await Utilities.EscapeSpecific(update.Message.From.FirstName);
-            var lastName = await Utilities.EscapeSpecific(update.Message.From.LastName);
-            var nickName = "";
-            if (firstName != "") nickName += firstName;
-            if(lastName != "")
-                if (nickName != "") nickName += $" {lastName}";
-                else nickName += lastName;
-            var user = new Player
-            {
-                Id = UserId, ChatId = ChatId, Username = username, NickName =  nickName
-            };
-            await UserDao.Update(user);
-            await UserDao.CreateOrUpdateStats(user);
-            UserDao.ActiveUsers.Add(user.Id, user);
+            var player = await UserDao.GetPlayerById(UserId);
+            await UserDao.CreateOrUpdateStats(player);
+            if (player.GetRoomName() != "")
+                return await Bot.SendWithMarkdown2(ChatId, $"{strings.prefer_leave_from_room} {player.GetRoomName()}");
             if (command.Length <= 1)
                 return await Bot.SendWithMarkdown2(ChatId, strings.start_message, Keyboard.MainMenu);
-            var resultCode = await RoomController.ConnectToGame(user, command[1]);
-            result = resultCode == ResultCode.CodeOk
+            var code = await RoomController.ConnectToGame(player, command[1]);
+            var result = code == ResultCode.CodeOk
                 ? Bot.SendWithMarkdown2(ChatId, strings.successful_entry_into_room, Keyboard.PlayerGameMenu)
-                : Utilities.GetResultCodeMessage(resultCode, ChatId);
+                : Utilities.GetResultCodeMessage(code, ChatId);
             return await result;
         }