public async Task Vote(CommandContext ctx, [RemainingText] string args = "") { if (Game.Status == Game.GameStatus.VotingFirst) { if (Game.Players.ContainsKey(ctx.Member)) { TargetCommandArgs targetCommandArgs = ParseTargetCommand(args); if (targetCommandArgs.Member != null) { await Game.ProcessVoteFirst(ctx.Member, targetCommandArgs.Member); } } } }
// -- ПАРСИНГ КОМАНД -- TargetCommandArgs ParseTargetCommand(string input) { TargetCommandArgs parsed = new TargetCommandArgs(); // Сплит по пробелу string[] inputSplitted = input.Split(' '); // Проверяем число ли в нулевом и присваиваем if (int.TryParse(inputSplitted[0], out int value)) { try { parsed.Member = Game.Players.Keys.ElementAt(value - 1); } catch (Exception) { } } // Проверяем упоминание ли в нулевом и присваиваем if (parsed.Member == null) { try { DiscordMember target = Utilities.GetPlayerByMention(inputSplitted[0]); if (Game.Players.ContainsKey(target)) { parsed.Member = target; } } catch (Exception) { } } // Джойним остальные if (inputSplitted.Length > 1) { string[] messageSplitted = inputSplitted.Skip(1).ToArray(); parsed.Message = String.Join(" ", messageSplitted); } return(parsed); }
async Task ProcessTargetCommand(DiscordChannel channel, Game.Action action, DiscordUser user, TargetCommandArgs targetCommandArgs) { // Проверяем ночь ли сейчас if (Game.Status == Game.GameStatus.Night) { DiscordMember doer = Game.FindPlayerByUser(user); // Проверяем является ли пользователь участником игры if (doer != null) { bool authorized = true; // Проверяем является ли игрок активной ролью (или ходящим мафом) или сделал ли участик ход if (!Game.Active.Contains(doer) || Game.MadeAnOrder(doer)) { authorized = false; } // Проверяем совпадает ли действие с ролью if (authorized) { switch (action) { case Game.Action.Kill: //if (!(Game.Players[doer].Role == Game.Role.Commissar || Game.Players[doer].Role == Game.Role.Mafia || Game.Players[doer].Role == Game.Role.Maniac)) ДОБАВИТЬ: возможность убийства у комиссара после введения денежной системы if (!(Game.Players[doer].Role == Game.Role.Mafia || Game.Players[doer].Role == Game.Role.Maniac)) { authorized = false; } break; case Game.Action.Check: if (!(Game.Players[doer].Role == Game.Role.Commissar)) { authorized = false; } break; case Game.Action.Heal: if (!(Game.Players[doer].Role == Game.Role.Doctor)) { authorized = false; } break; } // Если все ок, то вносим проверяем цель и вносим if (authorized) { if (targetCommandArgs.Member != null) { // Проверка чтобы мафиози не убивал мафиози if (action == Game.Action.Kill && Game.Players[doer].Role == Game.Role.Mafia && Game.Players[targetCommandArgs.Member].Role == Game.Role.Mafia && doer != targetCommandArgs.Member) { await View.Send(channel, GameMessages.ShowCannotKillLogovoMember()); } else { await Game.AddNightOrder(channel, action, doer, targetCommandArgs.Member, targetCommandArgs.Message); } } else { await View.Send(channel, GameMessages.ShowNoPlayer()); } } } } } }