12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- using System.Linq;
- using System.Threading.Tasks;
- using MafiaTelegramBot.Models;
- using MafiaTelegramBot.Resources;
- using Telegram.Bot.Types.ReplyMarkups;
- namespace MafiaTelegramBot.Game.GameRooms
- {
- public partial class GameRoom
- {
- public abstract class Channel
- {
- protected readonly GameRoom Room;
- protected Channel(GameRoom room)
- {
- Room = room;
- }
- public abstract Task Send(string message, IReplyMarkup replyMarkup = null,
- bool exceptDied = true);
- public abstract Task SendExcept(long playerId, string message, IReplyMarkup replyMarkup = null,
- bool exceptDied = true);
- }
- public class PlayersChannel : Channel
- {
- public override async Task Send(string message, IReplyMarkup replyMarkup = null,
- bool exceptDied = true)
- {
- var receivers = exceptDied
- ? Room.Players.Values.Where(p => p.IsAlive)
- : Room.Players.Values;
- foreach (var player in receivers)
- await Bot.SendWithMarkdown2(player.ChatId, message, replyMarkup);
- }
- public override async Task SendExcept(long playerId, string message, IReplyMarkup replyMarkup = null, bool exceptDied = true)
- {
- var receivers = exceptDied
- ? Room.Players.Values.Where(p => p.Id != playerId && p.IsAlive)
- : Room.Players.Values.Where(p => p.Id != playerId);
- foreach (var player in receivers)
- await Bot.SendWithMarkdown2(player.ChatId, message, replyMarkup);
- }
- public async Task SendSticker(string fileId, bool exceptDied = true)
- {
- var receivers = exceptDied
- ? Room.Players.Values.Where(p => p.IsAlive)
- : Room.Players.Values;
- foreach (var player in receivers)
- await Bot.SendStickerAsync(player.ChatId, fileId);
- }
- public PlayersChannel(GameRoom room) : base(room)
- {
- }
- }
- public class MafiaChannel : Channel
- {
- public override async Task Send(string message, IReplyMarkup replyMarkup = null, bool exceptDied = true)
- {
- var mafia = exceptDied
- ? Room.Players.Values.Where(p => p.GetRole() is Roles.Don or Roles.Mafia && p.IsAlive)
- : Room.Players.Values.Where(p => p.GetRole() is Roles.Don or Roles.Mafia);
- var receivers = exceptDied ? mafia : mafia.Where(p => p.IsAlive);
- foreach (var player in receivers)
- await Bot.SendWithMarkdown2(player.ChatId, message, replyMarkup);
- }
- public override async Task SendExcept(long playerId, string message, IReplyMarkup replyMarkup = null,
- bool exceptDied = true)
- {
- var except = exceptDied
- ? Room.Players.Values.Where(p => p.Id != playerId && p.IsAlive)
- : Room.Players.Values.Where(p => p.Id != playerId);
- var mafia = except.Where(p => p.GetRole() is Roles.Don or Roles.Mafia);
- var receivers = exceptDied ? mafia : mafia.Where(p => p.IsAlive);
- foreach (var player in receivers)
- await Bot.SendWithMarkdown2(player.ChatId, message, replyMarkup);
- }
- public MafiaChannel(GameRoom room) : base(room)
- {
- }
- }
- }
- }
|