Query.cs 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #nullable enable
  2. using System;
  3. using System.Threading.Tasks;
  4. using MafiaTelegramBot.Controllers;
  5. using MafiaTelegramBot.DataBase.EntityDao;
  6. using MafiaTelegramBot.Game;
  7. using MafiaTelegramBot.Resources;
  8. using Telegram.Bot.Types;
  9. using Telegram.Bot.Types.Enums;
  10. using static System.Enum;
  11. namespace MafiaTelegramBot.Models.Inlines
  12. {
  13. public abstract class Query : UpdateModel<Callback>
  14. {
  15. protected override bool IsMatches(string command)
  16. {
  17. if (TryParse(command, out Callback res)) return Name == res;
  18. return false;
  19. }
  20. public static async Task Update(Update update)
  21. {
  22. var chatId = update.CallbackQuery.Message.Chat.Id;
  23. await Bot.Get().SendChatActionAsync(chatId, ChatAction.Typing);
  24. var data = update.CallbackQuery.Data;
  25. var userId = long.Parse(data.Split('|')[1]);
  26. Console.WriteLine($"{userId} {data}");
  27. var user = await UserDao.GetPlayerById(userId);
  28. user.SetActive();
  29. if (user.IsPlaying)
  30. {
  31. var roomKey = RoomEncrypter.GetCode(user.GetRoomName());
  32. var room = RoomController.GetRoom(roomKey);
  33. await room.QHandler.Handle(update);
  34. }
  35. else
  36. {
  37. var query = data.Split('|')[0];
  38. var queries = Bot.Queries;
  39. var command = FirstOrDefault(queries, query);
  40. if(command != null) await ((Query?) command.Clone(chatId, userId))!.Execute(update);
  41. else await Bot.SendWithMarkdown2(chatId, $"{strings.command_not_found} _*({data})*_");
  42. }
  43. }
  44. }
  45. }