private WarViewModel BuildWarViewModel(CurrentWar currentWar, WarPlanModel warPlan) { var memberName = Queries.RetrieveMemberName(User.Identity.GetUserName()); return(new WarViewModel { CurrentWar = currentWar, WarPlan = warPlan, MemberName = memberName }); }
public async Task DisplayWarInfoAsync() { WarInformation clanCurrentWar; WarClanInformation friendlyClan; WarClanInformation opponentClan; if (_clanInformation.StoredClan == null) { await ReplyAsync("No clan selected"); return; } if (_clanInformation.StoredClanCurrentWar == null) { if (_clanInformation.StoredClanCurrentLeagueWar == null) { await Context.Channel.SendMessageAsync("Clan " + _clanInformation.StoredClan.Name + " is not currently at war."); return; } else { ClanWarLeagueWar currentLeagueWar = _clanInformation.StoredClanCurrentLeagueWar; friendlyClan = new WarClanInformation(currentLeagueWar.Clan, currentLeagueWar.Clan.BadgeUrls, currentLeagueWar.Clan.ClanLevel, currentLeagueWar.Clan.Attacks, currentLeagueWar.Clan.Stars, currentLeagueWar.Clan.DestructionPercentage, currentLeagueWar.Clan.Members); opponentClan = new WarClanInformation(currentLeagueWar.Opponent, currentLeagueWar.Opponent.BadgeUrls, currentLeagueWar.Opponent.ClanLevel, currentLeagueWar.Opponent.Attacks, currentLeagueWar.Opponent.Stars, currentLeagueWar.Opponent.DestructionPercentage, currentLeagueWar.Opponent.Members); clanCurrentWar = new WarInformation(currentLeagueWar, friendlyClan, opponentClan); } } else { CurrentWar currentWar = _clanInformation.StoredClanCurrentWar; friendlyClan = new WarClanInformation(currentWar.Clan, currentWar.Clan.BadgeUrls, currentWar.Clan.ClanLevel, currentWar.Clan.Attacks, currentWar.Clan.Stars, currentWar.Clan.DestructionPercentage, currentWar.Clan.Members); opponentClan = new WarClanInformation(currentWar.Opponent, currentWar.Opponent.BadgeUrls, currentWar.Opponent.ClanLevel, currentWar.Opponent.Attacks, currentWar.Opponent.Stars, currentWar.Opponent.DestructionPercentage, currentWar.Opponent.Members); clanCurrentWar = new WarInformation(currentWar, friendlyClan, opponentClan); } await Context.Channel.SendMessageAsync("", false, clanCurrentWar.BuildWarDescription()); }
public async Task SearchClanAsync([Remainder] string clan_tag) { Clan selectedClan = null; try { selectedClan = await _clashClient.Clans.GetAsync(clan_tag); } catch (ClashOfClansException ex) { Console.WriteLine(ex.Error); } if (selectedClan == null) { await ReplyAsync($"Clan with tag {clan_tag} could not be found"); return; } await Context.Channel.SendMessageAsync("Processing info about clan " + selectedClan.Name + "..."); _clanInformation.StoredClan = selectedClan; EmbedBuilder embedBuilder = _clanInformation.CreateClanDescription(); CurrentWarLeagueGroup currentWarLeagueGroup = null; try { currentWarLeagueGroup = await _clashClient.Clans.GetCurrentWarLeagueGroupAsync(selectedClan.Tag); } catch (ClashOfClansException ex) { Console.WriteLine(ex.Error); } if (currentWarLeagueGroup != null) { // Clan in league _clanInformation.StoredClanCurrentLeagueWar = await GetClanCurrentLeagueWar(selectedClan, currentWarLeagueGroup); if (_clanInformation.StoredClanCurrentLeagueWar != null) { // Clan in ongoing league war _clanInformation.StoredClanLeagueOpponent = _clanInformation.StoredClanCurrentLeagueWar.Opponent; embedBuilder.Description += "\n In league war against " + _clanInformation.StoredClanCurrentLeagueWar.Opponent.Name; } } else { CurrentWar selectedClanCurrentWar = null; try { selectedClanCurrentWar = await _clashClient.Clans.GetCurrentWarAsync(selectedClan.Tag); } catch (ClashOfClansException ex) { Console.WriteLine(ex.Error); } if (selectedClanCurrentWar != null) { // Clan in normal war _clanInformation.StoredClanCurrentWar = selectedClanCurrentWar; _clanInformation.StoredClanOpponent = selectedClanCurrentWar.Opponent; embedBuilder.Description += "\n At war with: " + _clanInformation.StoredClanOpponent.Name; } } await Context.Channel.SendMessageAsync("", false, embedBuilder.Build()); }
private async Task WarEndedAsync(SocketTextChannel channel, IList <GuildMember> guildMembers, CurrentWar currentWar) { var inDiscord = guildMembers.Where(guildMember => guildMember.Tags.Any(tag => currentWar.Clan.Members.Any(x => string.Equals(x.Tag, tag, StringComparison.InvariantCultureIgnoreCase)))).ToArray(); foreach (var member in inDiscord) { member.TotalWars++; } var missedAttacks = currentWar.Clan.Members.Where(x => x.Attacks.Count == 0).ToArray(); inDiscord = guildMembers.Where(guildMember => guildMember.Tags.Any(tag => missedAttacks.Any(x => x.Tag == tag))).ToArray(); foreach (var member in inDiscord) { member.MissedAttacks++; } _database.UpdateGuild(); var opponents = currentWar.Opponent.Members.ToDictionary(x => x.Tag, x => x); var notMirrored = currentWar.Clan.Members.Where(x => x.Attacks.All(y => opponents[y.DefenderTag].MapPosition != x.MapPosition)).ToArray(); var names = string.Join('\n', inDiscord.Select(x => $"{_client.GetUser(x.Id)?.Mention ?? "{User Not Found}"}")); var builder = new EmbedBuilder { Title = "War Breakdown", Color = new Color(0x21a9ff) } .AddField("Missed Attacks", string.IsNullOrWhiteSpace(names) ? "None :D" : names); if (notMirrored.Length > 0) { builder.AddField("Didn't Attack Mirror", string.Join('\n', notMirrored.Select(x => $"{x.Name}"))); } await channel.SendMessageAsync(string.Join(' ', inDiscord.Select(x => $"{_client.GetUser(x.Id)?.Mention ?? "{User Not Found}"}")), embed : builder.Build()); }
private async Task NeedToAttackAsync(ISocketMessageChannel channel, IEnumerable <GuildMember> guildMembers, CurrentWar currentWar) { var needToAttack = currentWar.Clan.Members.Where(x => x.Attacks.Count < 2).ToArray(); var inDiscord = guildMembers.Where(guildMember => guildMember.Tags.Any(tag => needToAttack.Any(x => x.Tag == tag))).ToArray(); var mentions = string.Join('\n', inDiscord.Select(x => $"{_client.GetUser(x.Id)?.Mention ?? "{User Not Found}"} you need to attack!")); await channel.SendMessageAsync($"War ends in one hour!\n{mentions}"); }
private async Task <IRole> WarMatchAsync(SocketTextChannel channel, Guild guild, SocketGuild discordGuild, CurrentWar currentWar) { var result = await Utilites.CalculateWarWinnerAsync(_clash, ClanTag); switch (result) { case LottoDraw lottoDraw: var highSync = _start.GetSync(); if (!highSync.HasValue) { await channel.SendMessageAsync( $"```css\nIt's a draw but I don't know what sync it is :(\n{result.WarLogComparison}```"); break; } var highTagIsClanTag = lottoDraw.HighSyncWinnerTag == lottoDraw.ClanTag; var sync = highSync == true ? "high" : "low"; var win = highSync == true ? highTagIsClanTag ? "wins" : "loses" : highTagIsClanTag ? "loses" : "wins"; _isWin = highSync == true && highTagIsClanTag; await channel.SendMessageAsync( $"```css\nIt is a {sync}-sync war and Reddit Rise {win}!\n{result.WarLogComparison}```"); break; case LottoFailed lottoFailed: await channel.SendMessageAsync(lottoFailed.Reason); _maintenanceCts.Cancel(true); _maintenanceCts.Dispose(); _maintenanceCts = new CancellationTokenSource(); break; case LottoResult lottoResult: var lottoWinner = lottoResult.ClanWin ? $"{lottoResult.ClanName}" : $"{lottoResult.OpponentName}"; await channel.SendMessageAsync( $"```css\nIt is {lottoWinner}'s win!\n{result.WarLogComparison}```"); break; } var warRole = await discordGuild.CreateRoleAsync("InWar"); await warRole.ModifyAsync(x => x.Mentionable = true); var inWar = currentWar.Clan.Members; var guildMembers = guild.GuildMembers; var inDiscord = guildMembers.Where(guildMember => guildMember.Tags.Any(tag => inWar.Any(x => x.Tag == tag))).ToArray(); foreach (var found in inDiscord.Select(x => discordGuild.GetUser(x.Id)).Where(y => !(y is null)).ToArray()) { if (found.Roles.Any(x => x.Id != guild.NoNotifsRoleId)) { _ = found.AddRoleAsync(warRole); } } return(warRole); }