|
@@ -0,0 +1,80 @@
|
|
|
+using System.Linq;
|
|
|
+using System.Threading.Tasks;
|
|
|
+using MafiaTelegramBot.Controllers;
|
|
|
+using MafiaTelegramBot.DataBase.EntityDao;
|
|
|
+using MafiaTelegramBot.Models;
|
|
|
+using MafiaTelegramBot.Resources;
|
|
|
+using Telegram.Bot.Types;
|
|
|
+
|
|
|
+namespace MafiaTelegramBot.Game.GameRooms
|
|
|
+{
|
|
|
+ public partial class GameRoom
|
|
|
+ {
|
|
|
+ public class MessageHandler
|
|
|
+ {
|
|
|
+ private GameRoom _room;
|
|
|
+
|
|
|
+ public MessageHandler(GameRoom room)
|
|
|
+ {
|
|
|
+ _room = room;
|
|
|
+ }
|
|
|
+
|
|
|
+ public async Task<Message> Handle(Update update)
|
|
|
+ {
|
|
|
+ var text = update.Message.Text;
|
|
|
+ var userId = update.Message.From.Id;
|
|
|
+ var chatId = update.Message.Chat.Id;
|
|
|
+ if (text == keyboard.look_players_list) await LookPlayers(chatId);
|
|
|
+ else if (text == keyboard.leave) await Leave(chatId, userId);
|
|
|
+ else
|
|
|
+ {
|
|
|
+ var player = await UserDao.GetPlayerById(userId);
|
|
|
+ if (!player.IsAlive) await Bot.SendWithMarkdown2(chatId, strings.you_now_died);
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if (_room.IsDay)
|
|
|
+ {
|
|
|
+ if (player.IsSpeaker)
|
|
|
+ await _room.PlayersCh.SendExcept(userId, $"\\({player.TurnOrder}\\){player.NickName}: {update.Message.Text}");
|
|
|
+ else
|
|
|
+ await Bot.SendWithMarkdown2(chatId, strings.now_is_not_your_turn);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if (player.IsSpeaker)
|
|
|
+ await _room.MafiaCh.SendExcept(userId, $"\\({player.TurnOrder}\\){player.NickName}: {update.Message.Text}");
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if(_room.IsFirstNight && player.CurrentRole.RoleKey is Roles.Mafia or Roles.Don)
|
|
|
+ await Bot.SendWithMarkdown2(chatId, strings.mafia_get_mail);
|
|
|
+ else await Bot.SendWithMarkdown2(chatId, strings.villagers_are_sleep);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return update.Message;
|
|
|
+ }
|
|
|
+
|
|
|
+ private async Task LookPlayers(long chatId)
|
|
|
+ {
|
|
|
+ var players = _room.Players.Values.ToList();
|
|
|
+ players.Sort((x, y) => x.TurnOrder - y.TurnOrder);
|
|
|
+ var message = players.Aggregate(strings.players_list,
|
|
|
+ (current, player) => current + $"\n\\({player.TurnOrder}\\) {player.NickName}");
|
|
|
+ await Bot.SendWithMarkdown2(chatId, message);
|
|
|
+ }
|
|
|
+
|
|
|
+ private static async Task Leave(long chatId, long userId)
|
|
|
+ {
|
|
|
+ var user = await UserDao.GetPlayerById(userId);
|
|
|
+ var roomName = user.GetRoomName();
|
|
|
+ var resultCode = await RoomController.LeaveFromGame(user);
|
|
|
+ if (resultCode == ResultCode.CodeOk)
|
|
|
+ await Bot.SendWithMarkdown2(chatId, $"{strings.you_leave_from_game} _*{roomName}*_",
|
|
|
+ Keyboards.MainMenu);
|
|
|
+ else
|
|
|
+ await Utilities.GetResultCodeMessage(resultCode, chatId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|