public async Task WarCheckAsync() { var result = await Utilites.CalculateWarWinnerAsync(Clash, Guild.ClanTag); switch (result) { case LottoDraw lottoDraw: var highSync = Start.GetSync(); if (!highSync.HasValue) { await SendMessageAsync($"```css\nIt's a draw but I don't know what sync it is :(\n{result.WarLogComparison}```"); return; } var highTagIsClanTag = lottoDraw.HighSyncWinnerTag == lottoDraw.ClanTag; var highSyncWinner = highTagIsClanTag ? lottoDraw.ClanName : lottoDraw.OpponentName; var lowSyncWinner = highTagIsClanTag ? lottoDraw.OpponentName : lottoDraw.ClanName; var sync = highSync == true ? "high" : "low"; var winner = highSync == true ? highSyncWinner : lowSyncWinner; await SendMessageAsync($"```css\nIt is a {sync}-sync war and {winner} wins!\n{result.WarLogComparison}```"); return; case LottoFailed lottoFailed: await SendMessageAsync(lottoFailed.Reason); return; case LottoResult lottoResult: var lottoWinner = lottoResult.ClanWin ? $"{lottoResult.ClanName}" : $"{lottoResult.OpponentName}"; await SendMessageAsync($"```css\nIt is {lottoWinner}'s win!\n{result.WarLogComparison}```"); return; } }
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); }