Esempio n. 1
0
        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;
            }
        }
Esempio n. 2
0
        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);
        }