GameRoom.MessageChannels.cs 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. using System.Linq;
  2. using System.Threading.Tasks;
  3. using MafiaTelegramBot.Models;
  4. using MafiaTelegramBot.Resources;
  5. using Telegram.Bot.Types.ReplyMarkups;
  6. namespace MafiaTelegramBot.Game.GameRooms
  7. {
  8. public partial class GameRoom
  9. {
  10. public abstract class Channel
  11. {
  12. protected readonly GameRoom Room;
  13. protected Channel(GameRoom room)
  14. {
  15. Room = room;
  16. }
  17. public abstract Task Send(string message, IReplyMarkup replyMarkup = null,
  18. bool exceptDied = true);
  19. public abstract Task SendExcept(long playerId, string message, IReplyMarkup replyMarkup = null,
  20. bool exceptDied = true);
  21. }
  22. public class PlayersChannel : Channel
  23. {
  24. public override async Task Send(string message, IReplyMarkup replyMarkup = null,
  25. bool exceptDied = true)
  26. {
  27. var receivers = exceptDied
  28. ? Room.Players.Values.Where(p => p.IsAlive)
  29. : Room.Players.Values;
  30. foreach (var player in receivers)
  31. await Bot.SendWithMarkdown2(player.ChatId, message, replyMarkup);
  32. }
  33. public override async Task SendExcept(long playerId, string message, IReplyMarkup replyMarkup = null, bool exceptDied = true)
  34. {
  35. var receivers = exceptDied
  36. ? Room.Players.Values.Where(p => p.Id != playerId && p.IsAlive)
  37. : Room.Players.Values.Where(p => p.Id != playerId);
  38. foreach (var player in receivers)
  39. await Bot.SendWithMarkdown2(player.ChatId, message, replyMarkup);
  40. }
  41. public async Task SendSticker(string fileId, bool exceptDied = true)
  42. {
  43. var receivers = exceptDied
  44. ? Room.Players.Values.Where(p => p.IsAlive)
  45. : Room.Players.Values;
  46. foreach (var player in receivers)
  47. await Bot.SendStickerAsync(player.ChatId, fileId);
  48. }
  49. public PlayersChannel(GameRoom room) : base(room)
  50. {
  51. }
  52. }
  53. public class MafiaChannel : Channel
  54. {
  55. public override async Task Send(string message, IReplyMarkup replyMarkup = null, bool exceptDied = true)
  56. {
  57. var mafia = exceptDied
  58. ? Room.Players.Values.Where(p => p.GetRole() is Roles.Don or Roles.Mafia && p.IsAlive)
  59. : Room.Players.Values.Where(p => p.GetRole() is Roles.Don or Roles.Mafia);
  60. var receivers = exceptDied ? mafia : mafia.Where(p => p.IsAlive);
  61. foreach (var player in receivers)
  62. await Bot.SendWithMarkdown2(player.ChatId, message, replyMarkup);
  63. }
  64. public override async Task SendExcept(long playerId, string message, IReplyMarkup replyMarkup = null,
  65. bool exceptDied = true)
  66. {
  67. var except = exceptDied
  68. ? Room.Players.Values.Where(p => p.Id != playerId && p.IsAlive)
  69. : Room.Players.Values.Where(p => p.Id != playerId);
  70. var mafia = except.Where(p => p.GetRole() is Roles.Don or Roles.Mafia);
  71. var receivers = exceptDied ? mafia : mafia.Where(p => p.IsAlive);
  72. foreach (var player in receivers)
  73. await Bot.SendWithMarkdown2(player.ChatId, message, replyMarkup);
  74. }
  75. public MafiaChannel(GameRoom room) : base(room)
  76. {
  77. }
  78. }
  79. }
  80. }