|
@@ -1,7 +1,7 @@
|
|
|
+using System.Collections.Generic;
|
|
|
using System.Linq;
|
|
|
using System.Threading.Tasks;
|
|
|
using MafiaTelegramBot.Controllers;
|
|
|
-using MafiaTelegramBot.Models;
|
|
|
using MafiaTelegramBot.Resources;
|
|
|
using Telegram.Bot.Types;
|
|
|
|
|
@@ -11,6 +11,8 @@ namespace MafiaTelegramBot.Game.GameRooms
|
|
|
{
|
|
|
public class MessageHandler
|
|
|
{
|
|
|
+ private List<long> LeavingPlayers = new();
|
|
|
+
|
|
|
private readonly GameRoom _room;
|
|
|
|
|
|
public MessageHandler(GameRoom room)
|
|
@@ -23,7 +25,8 @@ namespace MafiaTelegramBot.Game.GameRooms
|
|
|
var text = update.Message.Text;
|
|
|
var userId = update.Message.From.Id;
|
|
|
if (!_room.Players.ContainsKey(userId)) return new Message();
|
|
|
- if (text == keyboard.look_players_list) await LookPlayers(_room.Players[userId]);
|
|
|
+ if(LeavingPlayers.Contains(userId)) await Leave(_room.Players[userId], update.Message.Text);
|
|
|
+ else if (text == keyboard.look_players_list) await LookPlayers(_room.Players[userId]);
|
|
|
else if (text == keyboard.leave) await Leave(_room.Players[userId]);
|
|
|
else if (text == keyboard.end_turn)
|
|
|
{
|
|
@@ -71,14 +74,27 @@ namespace MafiaTelegramBot.Game.GameRooms
|
|
|
await _room.PlayersCh.SendTo(player.Id, message);
|
|
|
}
|
|
|
|
|
|
- private async Task Leave(Player player)
|
|
|
+ private async Task Leave(Player player, string text = "")
|
|
|
{
|
|
|
var roomName = player.GetRoomName();
|
|
|
- var resultCode = await RoomController.LeaveFromGame(player);
|
|
|
- if (resultCode == ResultCode.CodeOk)
|
|
|
- await Bot.SendWithMarkdown2(player.ChatId, $"{strings.you_leave_from_game} _*{roomName}*_",
|
|
|
- Keyboard.MainMenu);
|
|
|
- else await Utilities.GetResultCodeMessage(resultCode, player.ChatId);
|
|
|
+ if (_room.IsRunning)
|
|
|
+ {
|
|
|
+ if (LeavingPlayers.Remove(player.Id))
|
|
|
+ {
|
|
|
+ if (text == strings.exit)
|
|
|
+ {
|
|
|
+ var resultCode = await RoomController.LeaveFromGame(player);
|
|
|
+ if (resultCode == ResultCode.CodeOk)
|
|
|
+ await _room.PlayersCh.SendTo(player.ChatId, $"{strings.you_leave_from_game} _*{roomName}*_", Keyboard.MainMenu);
|
|
|
+ else await Utilities.GetResultCodeMessage(resultCode, player.ChatId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ LeavingPlayers.Add(player.Id);
|
|
|
+ await _room.PlayersCh.SendTo(player.ChatId, $"{strings.confirm_exit} '''{roomName}''' {strings.to_confirm_exit}");
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|