CreateRoomMessageHandler.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. using System.Collections.Generic;
  2. using System.Threading.Tasks;
  3. using MafiaTelegramBot.Controllers;
  4. using MafiaTelegramBot.Extensions;
  5. using MafiaTelegramBot.Game;
  6. using MafiaTelegramBot.Resources;
  7. using Telegram.Bot.Types;
  8. namespace MafiaTelegramBot.Commands.Messages
  9. {
  10. public class CreateRoomHandler : MessageHandler
  11. {
  12. protected override string Command => "";
  13. private static readonly Dictionary<long, string> Queue = new();
  14. public static void AddToQueue(long id, string param)
  15. {
  16. Queue.AddUniqueOrReplaceByKey(id, param);
  17. }
  18. public override bool IsMatches(string command)
  19. {
  20. return User != null ? Queue.ContainsKey(User.Info.Id) : base.IsMatches(command);
  21. }
  22. public override async Task<Message> Execute(Update update)
  23. {
  24. var param = Queue[User.Info.Id];
  25. Queue.Remove(User.Info.Id);
  26. var isPrivate = param[0] == Constants.PRIVATE + '0';
  27. var isExtended = param[1] == Constants.EXTENDED + '0';
  28. var isRanking = param[2] == Constants.RANKING + '0';
  29. var roomName = update.Message.Text;
  30. var resultCode = await RoomController.CreateNewGame(User, roomName, isExtended, isPrivate, isRanking);
  31. var result = resultCode == ResultCode.CodeOk
  32. ? await MessageController.SendText(User.Info, $"{strings.room_with_name} {roomName} {strings.was_created}\n", Keyboard.OwnerGameMenu)
  33. : await MessageController.SendText(User.Info, Utilities.GetResultCodeMessage(resultCode));
  34. if (resultCode == ResultCode.CodeOk && isPrivate)
  35. await MessageController.SendText(User.Info, $"{strings.secret_key_is} {roomName}: {RoomEncrypter.GetCode(roomName)}");
  36. if (resultCode == ResultCode.CodeOk && !isRanking)
  37. await MessageController.SendTextWithHtml(User.Info, $"<a href='https://t.me/{AppSettings.Name}?start=room_key={RoomEncrypter.GetCode(roomName)}'>{strings.link}</a>");
  38. return result;
  39. }
  40. public CreateRoomHandler(Player player) : base(player) { }
  41. }
  42. }