GameRoom.QueryHandler.cs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. using System;
  2. using System.Threading.Tasks;
  3. using MafiaTelegramBot.DataBase.EntityDao;
  4. using MafiaTelegramBot.Models;
  5. using MafiaTelegramBot.Resources;
  6. using Telegram.Bot.Types;
  7. namespace MafiaTelegramBot.Game.GameRooms
  8. {
  9. public partial class GameRoom
  10. {
  11. public class QueryHandler
  12. {
  13. private readonly GameRoom _room;
  14. public QueryHandler(GameRoom room)
  15. {
  16. _room = room;
  17. }
  18. public async Task Handle(Update update)
  19. {
  20. var data = update.CallbackQuery.Data.Split('|');
  21. var userId = long.Parse(data[1]);
  22. var player = await UserDao.GetPlayerById(userId);
  23. var chatId = player.ChatId;
  24. var command = Enum.Parse<Callback>(data[0]);
  25. var message = command switch
  26. {
  27. Callback.Vote => await VoteAsync(player, long.Parse(data[2])),
  28. Callback.Skip => await SkipAsync(player),
  29. Callback.Target => await player.CurrentRole.SetNightTarget(long.Parse(data[2])),
  30. _ => await Bot.SendWithMarkdown2(chatId, strings.not_supported_in_game)
  31. };
  32. }
  33. private async Task<Message> VoteAsync(Player player, long targetId)
  34. {
  35. var message = await _room.PutUpVote(player.Id, targetId);
  36. player.CurrentRole.VoteEvent.Set();
  37. return message;
  38. }
  39. private async Task<Message> SkipAsync(Player player)
  40. {
  41. return await Bot.SendWithMarkdown2(player.ChatId, strings.you_skip_vote);
  42. }
  43. }
  44. }
  45. }