123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- using System;
- using System.Linq;
- using System.Threading.Tasks;
- using MafiaTelegramBot.Controllers;
- using MafiaTelegramBot.Game.GameRooms;
- using MafiaTelegramBot.Resources;
- using Telegram.Bot.Types;
- namespace MafiaTelegramBot.Models.Inlines
- {
- public class ApplyRolesChangeQuery : Query
- {
- protected override Callback Name => Callback.ApplyRolesChange;
- private ExtendedGameRoom _room;
- protected override async Task<Message> Execute(Update update)
- {
- var data = update.CallbackQuery.Data.Split('|');
- var roomKey = data[2];
- _room = (ExtendedGameRoom) RoomController.GetRoom(roomKey);
- if(_room == null)
- await Bot.EditMessageAsync(ChatId, update.CallbackQuery.Message.MessageId, strings.room_does_not_exists);
- var roleQuery = Enum.Parse<Roles>(data[3]);
- if(roleQuery is Roles.Villager or Roles.Mafia) MafiaVillager(roleQuery, data[4]);
- else SwitchRole(roleQuery);
- var message = $"{strings.current_enabled_roles}";
- foreach (var (role, count) in _room.CustomRoomSettings)
- message += $"\n| {roles.ResourceManager.GetString(role.ToString())} ({count}) |";
- return await Bot.EditMessageAsync(ChatId, update.CallbackQuery.Message.MessageId, message, Keyboard.ChangeRolesKeyboard(UserId, roomKey, _room));
- }
- private void MafiaVillager(Roles role, string action)
- {
- switch (action)
- {
- case "+":
- if (role is Roles.Mafia)
- {
- var blackRolesCount = _room.CustomRoomSettings.Count(pair => pair.Key
- is Roles.Dame or Roles.Don or Roles.Werewolf or Roles.Lawyer);
- if (_room.CustomRoomSettings.ContainsKey(Roles.Mafia))
- blackRolesCount += _room.CustomRoomSettings[Roles.Mafia];
- if (blackRolesCount < _room.Max[_room.Players.Count])
- {
- if(!_room.CustomRoomSettings.ContainsKey(role)) _room.CustomRoomSettings.Add(role, 1);
- else _room.CustomRoomSettings[role]++;
- }
- }
- else
- {
- if(!_room.CustomRoomSettings.ContainsKey(role)) _room.CustomRoomSettings.Add(role, 1);
- else if (_room.CustomRoomSettings[role] < _room.MaxPlayers) _room.CustomRoomSettings[role]++;
- }
- break;
- case "-":
- if (_room.CustomRoomSettings.ContainsKey(role))
- {
- if (_room.CustomRoomSettings[role] > 1) _room.CustomRoomSettings[role]--;
- else _room.CustomRoomSettings.Remove(role);
- }
- break;
- }
- }
- private void SwitchRole(Roles role)
- {
- if (_room.CustomRoomSettings.ContainsKey(role)) _room.CustomRoomSettings.Remove(role);
- else
- {
- switch (role)
- {
- case Roles.Don:
- _room.CustomRoomSettings.Remove(Roles.Dame);
- break;
- case Roles.Dame:
- _room.CustomRoomSettings.Remove(Roles.Don);
- break;
- case Roles.Cop:
- _room.CustomRoomSettings.Remove(Roles.Journalist);
- _room.CustomRoomSettings.Remove(Roles.Detective);
- break;
- case Roles.Journalist:
- _room.CustomRoomSettings.Remove(Roles.Cop);
- _room.CustomRoomSettings.Remove(Roles.Detective);
- break;
- case Roles.Detective:
- _room.CustomRoomSettings.Remove(Roles.Cop);
- _room.CustomRoomSettings.Remove(Roles.Journalist);
- break;
- case Roles.Doctor:
- _room.CustomRoomSettings.Remove(Roles.Necromancer);
- break;
- case Roles.Necromancer:
- _room.CustomRoomSettings.Remove(Roles.Doctor);
- break;
- }
- if (role is Roles.Dame or Roles.Don or Roles.Werewolf or Roles.Lawyer)
- {
- var blackRolesCount = _room.CustomRoomSettings.Count(pair => pair.Key
- is Roles.Dame or Roles.Don or Roles.Werewolf or Roles.Lawyer);
- if (_room.CustomRoomSettings.ContainsKey(Roles.Mafia)) blackRolesCount += _room.CustomRoomSettings[Roles.Mafia];
- if (blackRolesCount < _room.Max[_room.Players.Count])
- {
- if (role is Roles.Werewolf)
- {
- if(_room.CustomRoomSettings.Keys.Any(k => k
- is Roles.Dame or Roles.Don or Roles.Mafia)) _room.CustomRoomSettings.Add(role, 1);
- }
- else _room.CustomRoomSettings.Add(role, 1);
- }
- }
- else _room.CustomRoomSettings.Add(role, 1);
- }
- }
- }
- }
|