Bot.cs 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Threading;
  4. using System.Threading.Tasks;
  5. using MafiaTelegramBot.DataBase.EntityDao;
  6. using MafiaTelegramBot.Game;
  7. using MafiaTelegramBot.Models.Commands;
  8. using MafiaTelegramBot.Models.Inlines;
  9. using MafiaTelegramBot.Models.Payments;
  10. using MafiaTelegramBot.Resources;
  11. using Telegram.Bot;
  12. using Telegram.Bot.Types;
  13. using Telegram.Bot.Types.Enums;
  14. using Telegram.Bot.Types.ReplyMarkups;
  15. using static MafiaTelegramBot.Logs;
  16. namespace MafiaTelegramBot.Models
  17. {
  18. public static class Bot
  19. {
  20. private static TelegramBotClient _client;
  21. private static List<Command> _commandsList;
  22. private static List<Query> _queriesList;
  23. private static List<Payment> _paymentsList;
  24. public static IReadOnlyList<Command> Commands => _commandsList.AsReadOnly();
  25. public static IReadOnlyList<Query> Queries => _queriesList.AsReadOnly();
  26. public static IReadOnlyList<Payment> Payments => _paymentsList.AsReadOnly();
  27. public static readonly List<long> UsersThatChangesNickname = new();
  28. public static readonly Dictionary<long, string> UsersThatCreatesRoom = new();
  29. public static readonly List<long> UserThatEntersPrivateCode = new();
  30. public static TelegramBotClient Get()
  31. {
  32. if (_client != null) return _client;
  33. InitCommands();
  34. InitQueries();
  35. InitPayments();
  36. _client = new TelegramBotClient(AppSettings.Token);
  37. return _client;
  38. }
  39. private static void InitCommands()
  40. {
  41. //TODO fill commands array
  42. _commandsList = new List<Command>
  43. {
  44. new StartCommand(),
  45. new CreateGameCommand(),
  46. new ConnectGameCommand(),
  47. new ShowProfileCommand(),
  48. new RoomSettingsCommand(),
  49. new LeaveCommand(),
  50. new LookPlayersListCommand(),
  51. new KickPlayerCommand(),
  52. new DissolveRoomCommand(),
  53. new StartGameCommand(),
  54. new AdminPanelCommand(),
  55. new FastGameCommand(),
  56. };
  57. }
  58. private static void InitQueries()
  59. {
  60. //TODO fill inline keyboard array
  61. _queriesList = new List<Query>
  62. {
  63. new ShowMyRolesQuery(),
  64. new ShopMenuQuery(),
  65. new SettingsProfileQuery(),
  66. new ChangeNickNameQuery(),
  67. new SettingsRoomQuery(),
  68. new ConnectToPrivateRoomQuery(),
  69. new SetPlayersMaximumQuery(),
  70. new ConnectToPublicRoomQuery(),
  71. new ConnectToSelectedRoomQuery(),
  72. new KickSelectedPlayerQuery(),
  73. new SwitchTimerQuery(),
  74. new ChangeRolesQuery(),
  75. new PlayersCountSettingsQuery(),
  76. new ApplyRolesChangeQuery(),
  77. new StartGameQuery(),
  78. new ShowMyExtendedStatsQuery(),
  79. new ChooseRoomViewQuery(),
  80. new ChooseGameTypeQuery(),
  81. new ChooseGameModeQuery(),
  82. new ConnectToRankedQuery(),
  83. new ConnectToNotRankedQuery(),
  84. new GiveToSelectedQuery(),
  85. new GiveRoleQuery(),
  86. new GiveToAllQuery(),
  87. new ContinueQuery(),
  88. new PackInfoQuery(),
  89. new PackOpenQuery(),
  90. new ShowMyPacksQuery(),
  91. new BackToProfileQuery(),
  92. };
  93. }
  94. private static void InitPayments()
  95. {
  96. //TODO fill inline keyboard array
  97. _paymentsList = new List<Payment>
  98. {
  99. new RandomRolePayment()
  100. };
  101. }
  102. public static async Task<Message> SendStickerAsync(long chatId, string fileId)
  103. {
  104. try
  105. {
  106. return await Get().SendStickerAsync(chatId, fileId, true);
  107. }
  108. catch (Exception e)
  109. {
  110. LogOutError(e.Message);
  111. return new Message();
  112. }
  113. }
  114. public static async Task<Message> SendHyperLink(long chatId, string message)
  115. {
  116. try
  117. {
  118. return await Get().SendTextMessageAsync(chatId, message, ParseMode.Html, disableNotification: true);
  119. }
  120. catch (Exception e)
  121. {
  122. LogOutError(e.Message);
  123. return new Message();
  124. }
  125. }
  126. public static async Task<Message> SendWithMarkdown2(long chatId, string message, IReplyMarkup replyMarkup = null)
  127. {
  128. try
  129. {
  130. var editedMessage = await Utilities.ToMarkdownString(message);
  131. return await Get().SendTextMessageAsync(chatId, editedMessage,
  132. ParseMode.MarkdownV2, replyMarkup: replyMarkup, disableNotification: true);
  133. }
  134. catch (Exception e)
  135. {
  136. LogOutError(e.Message);
  137. return new Message();
  138. }
  139. }
  140. public static async Task<Message> EditMessageAsync(long chatId, int messageId, string message, InlineKeyboardMarkup keyboard = null)
  141. {
  142. try
  143. {
  144. var editedMessage = await Utilities.ToMarkdownString(message);
  145. return await Get().EditMessageTextAsync(chatId, messageId, editedMessage, ParseMode.MarkdownV2, replyMarkup: keyboard);
  146. }
  147. catch (Exception e)
  148. {
  149. LogOutError(e.Message);
  150. return new Message();
  151. }
  152. }
  153. public static async Task AnswerPreCheckoutQuery(string preCheckoutQueryId)
  154. {
  155. var token = new CancellationToken();
  156. await Get().AnswerPreCheckoutQueryAsync(preCheckoutQueryId, token);
  157. }
  158. public static async Task RegisterNewUser(Update update)
  159. {
  160. var chatId = update.Message.Chat.Id;
  161. var userId = update.Message.From.Id;
  162. var username = await Utilities.EscapeSpecific(update.Message.From.Username);
  163. var firstName = await Utilities.EscapeSpecific(update.Message.From.FirstName);
  164. var lastName = await Utilities.EscapeSpecific(update.Message.From.LastName);
  165. var nickName = "";
  166. if (firstName != "") nickName += firstName;
  167. if(lastName != "") nickName += nickName != "" ? $" {lastName}" : lastName;
  168. var user = new Player
  169. {
  170. Id = userId,
  171. ChatId = chatId,
  172. Username = username,
  173. NickName = nickName
  174. };
  175. await UserDao.AddNew(user.User);
  176. await StatisticsDao.CreatePlayerStats(user.Id);
  177. UserDao.ActiveUsers.Add(user.Id, user);
  178. }
  179. }
  180. }