Exemple #1
0
        public async Task GetMoreJpegAsync(string url, int amount = 1)
        {
            if (amount > 10 || amount < 1)
            {
                await ReplyAsync("JPEG amount incorrect. Number should be above 0 and under 11");
            }

            var request  = HttpBuilder.BuildJpegRequest(url);
            var response = HttpBuilder.MakeRequest(request);

            if (response.ResponseUri.Segments.Length == 1)
            {
                await ReplyAsync("Could not JPEG image; is the url a direct link?");
            }

            var responseHeadersCollection = response.ResponseUri;

            for (int i = 1; i < amount; i++)
            {
                request  = HttpBuilder.BuildJpegRequest("http://morejpeg.com/Image/JPEG/" + responseHeadersCollection.Segments[3].ToString());
                response = HttpBuilder.MakeRequest(request);
                responseHeadersCollection = response.ResponseUri;
            }
            var imageUrl = "http://morejpeg.com/Image/JPEG/" + response.ResponseUri.Segments[3].ToString();

            EmbedBuilder builder = new EmbedBuilder();

            builder.WithColor(3447003)
            .WithTitle($"{amount}x JPEG requested by {Context.User.Username}")
            .WithFooter(CustomEmbedBuilder.EmbedFooter(Context))
            .ImageUrl = imageUrl;

            await ReplyAsync("", false, builder.Build());
        }
        private static async Task <Message> GetLeaderboardMessageAsync(DatabaseContext dbContext, IConfigurationRoot configuration)
        {
            var users = await SharedLeaderboardManager.GetTopUsersAndTeams(dbContext, 20, configuration.GetValue <bool>("DynamicScoring"));

            var eb = new CustomEmbedBuilder();

            eb.WithTitle("Leaderboard");

            for (int i = 0; i < users.Count; i++)
            {
                if (users[i].IsTeam)
                {
                    eb.Description += $"\n**{i + 1}. {users[i].TeamName}** (team) - {users[i].Score} points";
                }
                else
                {
                    eb.Description += $"\n**{i + 1}. {users[i].WebsiteUser?.UserName ?? users[i].DiscordUsername}** - {users[i].Score} points";
                }
            }

            var builder = new ComponentBuilder().WithButton("Full Leaderboard", style: ButtonStyle.Link, url: "https://imaginaryctf.org/leaderboard");

            return(new Message {
                Embed = eb.Build(), MessageComponent = builder.Build(), Ephemeral = true
            });
        }
Exemple #3
0
        private static Embed GetHelpEmbed(CommandService commandService)
        {
            var eb = new CustomEmbedBuilder();

            eb.WithTitle("Available Commands");

            var mainCommandsNames = new string[] { "flag", "stats" };
            var mainCommands      = commandService.Commands.Where(x => mainCommandsNames.Contains(x.Name));

            eb.Description += "\n**Main Commands**";

            foreach (var command in mainCommands)
            {
                eb.Description += $"\n`.{command.Name}";
                foreach (var parameter in command.Parameters)
                {
                    if (parameter.IsOptional)
                    {
                        eb.Description += $" [{parameter.Name}]";
                    }
                    else
                    {
                        eb.Description += $" <{parameter.Name}>";
                    }
                }
                eb.Description += "`";
                var requirePermission = command.Preconditions.OfType <RequireUserPermissionAttribute>().FirstOrDefault();
                if (requirePermission != null)
                {
                    eb.Description += " :star:";
                }
                eb.Description += $"\n➜ {command.Summary}";
                var requireContext = command.Preconditions.OfType <RequireContextAttribute>().FirstOrDefault();
                if (requireContext != null)
                {
                    switch (requireContext.Contexts)
                    {
                    case ContextType.DM:
                        eb.Description += " (DMs only)";
                        break;

                    case ContextType.Guild:
                        eb.Description += " (Guild only)";
                        break;
                    }
                }
            }

            eb.Description += "\n\n**Other Commands**";

            foreach (var module in commandService.Modules)
            {
                eb.Description += $"\n`.help {module.Name}`";
            }

            eb.WithFooter("Starred commands require the user to have certain permissions");

            return(eb.Build());
        }
Exemple #4
0
        private static Embed GetAboutEmbed()
        {
            var eb = new CustomEmbedBuilder();

            eb.WithThumbnailUrl("https://cdn.discordapp.com/avatars/669798825765896212/572b97a2e8c1dc33265ac51679303c41.png?size=256");
            eb.WithTitle("About");
            eb.AddField("Author", "This bot was created by Et3rnos#6556");
            eb.AddField("Support", "If you want to support me you can visit my Patreon:\n<https://www.patreon.com/et3rnos>");
            return(eb.Build());
        }
Exemple #5
0
        public async Task SendGerbenAsync()
        {
            EmbedBuilder builder = new EmbedBuilder();

            builder.WithColor(3447003)
            .WithTitle($"Gerben picture requested by {Context.User.Username}")
            .WithFooter(CustomEmbedBuilder.EmbedFooter(Context))
            .ImageUrl = "https://image.prntscr.com/image/bd9a127e4fda43f1adffed6a6523d14d.png";

            await ReplyAsync("", false, builder.Build());
        }
Exemple #6
0
        public async Task SendRaidPhotoAsync()
        {
            EmbedBuilder builder = new EmbedBuilder();

            builder.WithColor(3447003)
            .WithImageUrl("https://i.gyazo.com/f15026bba9f7adb2d78135869567939a.png")
            .WithFooter(CustomEmbedBuilder.EmbedFooter(Context));

            await ReplyAsync("", false, builder.Build());
            await ReplyAsync("");
        }
Exemple #7
0
        public async Task SendTomAsync()
        {
            EmbedBuilder builder = new EmbedBuilder();

            builder.WithColor(3447003)
            .WithTitle($"Tom picture requested by {Context.User.Username}")
            .WithFooter(CustomEmbedBuilder.EmbedFooter(Context))
            .ImageUrl = "https://i.gyazo.com/34e5abdccafb8313b6d8fcf607a7ab6a.png";

            await ReplyAsync("", false, builder.Build());
        }
Exemple #8
0
        private static Embed GetCategoryHelpEmbed(CommandService commandService, string category)
        {
            var module = commandService.Modules.FirstOrDefault(x => x.Name.ToLower() == category.ToLower());

            if (module == null)
            {
                return(null);
            }

            var eb = new CustomEmbedBuilder();

            eb.WithTitle("Available Commands");

            foreach (var command in module.Commands)
            {
                eb.Description += $"\n`.{command.Name}";
                foreach (var parameter in command.Parameters)
                {
                    if (parameter.IsOptional)
                    {
                        eb.Description += $" [{parameter.Name}]";
                    }
                    else
                    {
                        eb.Description += $" <{parameter.Name}>";
                    }
                }
                eb.Description += "`";
                var requirePermission = command.Preconditions.OfType <RequireUserPermissionAttribute>().FirstOrDefault();
                if (requirePermission != null)
                {
                    eb.Description += " :star:";
                }
                eb.Description += $"\n➜ {command.Summary}";
                var requireContext = command.Preconditions.OfType <RequireContextAttribute>().FirstOrDefault();
                if (requireContext != null)
                {
                    switch (requireContext.Contexts)
                    {
                    case ContextType.DM:
                        eb.Description += " (DMs only)";
                        break;

                    case ContextType.Guild:
                        eb.Description += " (Guild only)";
                        break;
                    }
                }
            }

            eb.WithFooter("Starred commands require the user to have certain permissions");

            return(eb.Build());
        }
Exemple #9
0
        public async Task DefaultJeroenAsync()
        {
            EmbedBuilder builder = new EmbedBuilder();

            builder.WithColor(3447003)
            .WithTitle("Use the '!jeroen <boss>' to see Jeroens gear that he uses for that boss")
            .WithDescription("Note: these setups might be outdated.")
            .AddField("corp", "Gear used at Corporeal Corporeal Beast.")
            .WithFooter(CustomEmbedBuilder.EmbedFooter(Context));

            await ReplyAsync("", false, builder.Build());
        }
Exemple #10
0
        public async Task ChangeNameAsync([Remainder] string name)
        {
            var currentUsername = Context.Guild.CurrentUser.Nickname;
            await Context.Guild.CurrentUser.ModifyAsync(x => x.Nickname = name);

            EmbedBuilder builder = new EmbedBuilder();

            builder.WithColor(3447003)
            .WithTitle($"{Context.User.Username} requested a nickname change.")
            .WithDescription($"*{currentUsername}* => *{name}*")
            .WithFooter(CustomEmbedBuilder.EmbedFooter(Context));

            await ReplyAsync("", false, builder.Build());
        }
Exemple #11
0
        public async Task GetPepeAsync()
        {
            var request  = HttpBuilder.BuildRequest($"https://www.reddit.com/r/pepe/random/.json?count=1");
            var response = HttpBuilder.MakeRequest(request);
            var data     = HttpBuilder.ReadRedditResponse(response);

            data.url = WebsiteLinkFixer.ImgurFixUrl(data.url);

            var builder = CustomEmbedBuilder.RedditEmbed(data, Context);

            await ReplyAsync("", false, builder.Build());

            if (string.IsNullOrEmpty(builder.ImageUrl))
            {
                await ReplyAsync(data.url);
            }
        }
Exemple #12
0
        public async Task DefaultSiebrenAsync()
        {
            EmbedBuilder builder = new EmbedBuilder();

            builder.WithColor(3447003)
            .WithTitle("Use the '!siebren <boss>' to see Siebrens gear that he uses for that boss")
            .WithDescription("Note: these setups might be outdated.")
            .AddField("raids", "Gear used at raids (Before entering).")
            .AddField("midraids", "Gear used before Ohlm")
            .AddField("dks", "Gear used at DKS.")
            .AddField("gorillas", "Gear used at Demonic gorilla's.")
            .AddField("tankbandos", "Gear used as tank at Bandos.")
            .AddField("gargoyle", "Gear used at Gargoyle boss.")
            .AddField("corp", "Gear used at Corporeal Corporeal Beast.")
            .AddField("vorkath", "Gear used at vorkath.")
            .WithFooter(CustomEmbedBuilder.EmbedFooter(Context));

            await ReplyAsync("", false, builder.Build());
        }
Exemple #13
0
        private static async Task <Embed> GetStatsEmbedAsync(DiscordSocketClient client, DatabaseContext dbContext, IConfigurationRoot configuration, IUser user, User player)
        {
            bool isTeam         = player.Team != null;
            bool dynamicScoring = configuration.GetValue <bool>("DynamicScoring");

            SharedStatsManager.Stats stats;
            if (isTeam)
            {
                stats = await SharedStatsManager.GetTeamStats(dbContext, player.Team, dynamicScoring);
            }
            else
            {
                stats = await SharedStatsManager.GetStats(dbContext, player, dynamicScoring);
            }

            var solvedChallengesTitles   = stats.SolvedChallenges.Select(x => x.Challenge.Title).ToList();
            var unsolvedChallengesTitles = stats.UnsolvedChallenges.Select(x => x.Challenge.Title).ToList();

            var eb = new CustomEmbedBuilder();

            if (isTeam)
            {
                eb.WithTitle($"Stats for {player.Team.Name} (team)");
                eb.AddField("Score", $"{stats.Score} ({stats.Position}/{stats.PlayersCount})");
            }
            else
            {
                eb.WithTitle($"Stats for {user.Username}");
                eb.WithThumbnailUrl(user.GetAvatarUrl() ?? user.GetDefaultAvatarUrl());
                eb.AddField("Score", $"{stats.Score} ({stats.Position}/{stats.PlayersCount})");
            }

            if (solvedChallengesTitles.Count > 0)
            {
                eb.AddField("Solved Challenges", string.Join('\n', solvedChallengesTitles), true);
            }
            if (unsolvedChallengesTitles.Count > 0)
            {
                eb.AddField("Unsolved Challenges", string.Join('\n', unsolvedChallengesTitles), true);
            }

            return(eb.Build());
        }
Exemple #14
0
        public async Task HelpAsync()
        {
            EmbedBuilder builder = new EmbedBuilder();

            builder.WithColor(3447003)
            .WithTitle("This bot used the '!' (exclamation mark) prefix.")
            .WithDescription("{this is required} [this is optional].")
            .AddField("help", "Will show all commands with their instructions.")
            .AddField("randompost {subreddit}", "Will return a random post from given subreddit with it's details.")
            .AddField("pepe", "Will return a random pepe with it's details.")
            .AddField("emoji {text}", "Will turn your text into emoji's.")
            .AddField("morejpeg {text} [jpegamount]", "Will turn your text into emoji's. jpegamount defaults to 1 and can't be lower than 1 or higher than 10.")
            .AddField("name {text}", "Will change the nickname of the bot.")
            .AddField("tom", "Will return an image of the almighty Tom.")
            .AddField("gerben", "Will return an image of the almighty Gerben.")
            .AddField("siebren [boss]", "Returns Siebrens boss gear used at requested boss.")
            .AddField("raids", "Returns raids cycle.")
            .WithFooter(CustomEmbedBuilder.EmbedFooter(Context));

            await ReplyAsync("", false, builder.Build());
        }
Exemple #15
0
        public async Task InraidsAsync()
        {
            var builder = CustomEmbedBuilder.RunescapeGearEmbed("Siebrens", "mid-raid", "https://image.prntscr.com/image/NYE9USInRx_BdEKjVe8eMw.png", Context);

            await ReplyAsync("", false, builder.Build());
        }
Exemple #16
0
        public async Task RaidsAsync()
        {
            var builder = CustomEmbedBuilder.RunescapeGearEmbed("Siebrens", "Raids", "https://image.prntscr.com/image/0FVbquRkSSSHoppLWtKtdA.png", Context);

            await ReplyAsync("", false, builder.Build());
        }
Exemple #17
0
        public async Task CorpAsync()
        {
            var builder = CustomEmbedBuilder.RunescapeGearEmbed("Siebrens", "Corporeal Corporeal", "https://image.prntscr.com/image/uXMoIhaLSyqbzEaoHbti9w.png", Context);

            await ReplyAsync("", false, builder.Build());
        }
Exemple #18
0
        public async Task DksAsync()
        {
            var builder = CustomEmbedBuilder.RunescapeGearEmbed("Siebrens", "DKS", "https://image.prntscr.com/image/IF-LmrjdQuSDxOqOIB1VBQ.png", Context);

            await ReplyAsync("", false, builder.Build());
        }
Exemple #19
0
        public async Task CorpAsync()
        {
            var builder = CustomEmbedBuilder.RunescapeGearEmbed("Jeroens", "Corporeal Corporeal", "https://i.gyazo.com/d3f23c76f3b098005d72373a99215c78.png", Context);

            await ReplyAsync("", false, builder.Build());
        }
Exemple #20
0
        public async Task VorkathAsync()
        {
            var builder = CustomEmbedBuilder.RunescapeGearEmbed("Siebrens", "Vorkath", "https://image.prntscr.com/image/cVuUNV2FTSK7274VrXNsWA.png", Context);

            await ReplyAsync("", false, builder.Build());
        }
Exemple #21
0
        public async Task GargoyleAsync()
        {
            var builder = CustomEmbedBuilder.RunescapeGearEmbed("Siebrens", "Gargoyle", "https://image.prntscr.com/image/vJIYsH49RPSuY2KmWpKPaQ.png", Context);

            await ReplyAsync("", false, builder.Build());
        }
Exemple #22
0
        public async Task Config()
        {
            var config = await _context.Configuration.FirstOrDefaultAsync();

            if (config == null)
            {
                await Link();

                config = await _context.Configuration.FirstOrDefaultAsync();
            }

            var embed = new CustomEmbedBuilder();

            embed.WithTitle("Configuration");

            if (config.ChallengeReleaseChannelId == 0)
            {
                embed.Description += $"**Challenge Release Channel:** None\n";
            }
            else
            {
                embed.Description += $"**Challenge Release Channel:** <#{config.ChallengeReleaseChannelId}>\n";
            }

            if (config.ChallengeSolvesChannelId == 0)
            {
                embed.Description += $"**Challenge Solves Channel:** None\n";
            }
            else
            {
                embed.Description += $"**Challenge Solves Channel:** <#{config.ChallengeSolvesChannelId}>\n";
            }

            if (config.LeaderboardChannelId == 0)
            {
                embed.Description += $"**Leaderboard Channel:** None\n";
            }
            else
            {
                embed.Description += $"**Leaderboard Channel:** <#{config.LeaderboardChannelId}>\n";
            }

            if (config.TodaysChannelId == 0)
            {
                embed.Description += $"**Today's Challenge Channel:** None\n";
            }
            else
            {
                embed.Description += $"**Today's Challenge Channel:** <#{config.TodaysChannelId}>\n";
            }

            if (config.LogsChannelId == 0)
            {
                embed.Description += $"**Logs Channel:** None\n";
            }
            else
            {
                embed.Description += $"**Logs Channel:** <#{config.LogsChannelId}>\n";
            }

            if (config.BoardChannelId == 0)
            {
                embed.Description += $"**Board's Channel:** None\n";
            }
            else
            {
                embed.Description += $"**Board's Channel:** <#{config.BoardChannelId}>\n";
            }

            if (config.BoardWriteupsChannelId == 0)
            {
                embed.Description += $"**Board Writeups Channel:** None\n";
            }
            else
            {
                embed.Description += $"**Board Writeups Channel:** <#{config.BoardWriteupsChannelId}>\n";
            }

            if (config.BoardRoleId == 0)
            {
                embed.Description += $"**Board's Role:** None\n";
            }
            else
            {
                embed.Description += $"**Board's Role:** <@&{config.BoardRoleId}>\n";
            }

            if (config.FirstPlaceRoleId == 0 || config.SecondPlaceRoleId == 0 || config.ThirdPlaceRoleId == 0)
            {
                embed.Description += $"**Top Roles:** None\n";
            }
            else
            {
                embed.Description += $"**Top Roles:** <@&{config.FirstPlaceRoleId}> <@&{config.SecondPlaceRoleId}> <@&{config.ThirdPlaceRoleId}>\n";
            }

            if (config.TodaysRoleId == 0)
            {
                embed.Description += $"**Today's Challenge Role:** None\n";
            }
            else
            {
                embed.Description += $"**Today's Challenge Role:** <@&{config.TodaysRoleId}>\n";
            }

            if (config.ChallengePingRoleId == 0)
            {
                embed.Description += $"**Challenge Ping Role:** None\n";
            }
            else
            {
                embed.Description += $"**Challenge Ping Role:** <@&{config.ChallengePingRoleId}>\n";
            }

            embed.Description += $"**Release Time:** {config.ReleaseTime / 60}H{config.ReleaseTime % 60} UTC";
            await ReplyAsync(embed : embed.Build());
        }
Exemple #23
0
        public async Task Execute(IJobExecutionContext context)
        {
            Log.Information("Starting Challenge Release Job");

            SchedulerContext     schedulerContext = context.Scheduler.Context;
            DiscordSocketClient  client           = (DiscordSocketClient)schedulerContext.Get("client");
            IServiceScopeFactory scopeFactory     = (IServiceScopeFactory)schedulerContext.Get("scopeFactory");

            using var scope = scopeFactory.CreateScope();
            var dbContext = scope.ServiceProvider.GetService <DatabaseContext>();

            var config = dbContext.Configuration.FirstOrDefault();

            if (config == null || config.ChallengeReleaseChannelId == 0)
            {
                Log.Information("Aborting Challenge Release Job because some configuration values are not defined");
                return;
            }

            var channel = client.GetGuild(config.GuildId).GetTextChannel(config.ChallengeReleaseChannelId);

            var lastChall = await dbContext.Challenges.AsAsyncEnumerable().Where(x => x.State == 2).OrderByDescending(x => x.ReleaseDate).FirstOrDefaultAsync();

            var chall = ChallengesManager.GetChallengeToBeReleased(dbContext, release: true).GetAwaiter().GetResult();

            if (chall == null)
            {
                Log.Information("Aborting Challenge Release Job because no challenge is ready to be released");
                return;
            }

            if (config.TodaysChannelId != 0 && config.TodaysRoleId != 0)
            {
                Log.Information("Deleting and re-creating Today's Channel role");
                var oldRole = client.GetGuild(config.GuildId).GetRole(config.TodaysRoleId);
                var newRole = await client.GetGuild(config.GuildId).CreateRoleAsync(oldRole.Name, oldRole.Permissions, oldRole.Color, oldRole.IsHoisted, oldRole.IsMentionable);

                await client.GetGuild(config.GuildId).GetTextChannel(config.TodaysChannelId).AddPermissionOverwriteAsync(newRole, new OverwritePermissions(viewChannel: PermValue.Allow));

                await oldRole.DeleteAsync();

                config.TodaysRoleId = newRole.Id;
                await dbContext.SaveChangesAsync();

                Log.Information("Purging Today's Channel");
                var todaysChannel = client.GetGuild(config.GuildId).GetTextChannel(config.TodaysChannelId);
                var messages      = await todaysChannel.GetMessagesAsync(int.MaxValue).FlattenAsync();

                messages = messages.Where(x => (DateTimeOffset.UtcNow - x.Timestamp).TotalDays <= 14);
                if (messages.Any())
                {
                    await todaysChannel.DeleteMessagesAsync(messages);
                }

                Log.Information("Posting the challenge writeup on today's channel");
                if (!string.IsNullOrEmpty(chall.Writeup))
                {
                    var writeupEmbed = new CustomEmbedBuilder();
                    writeupEmbed.WithTitle("Intended Solution");
                    writeupEmbed.WithDescription(chall.Writeup);
                    var message = await todaysChannel.SendMessageAsync(embed : writeupEmbed.Build());

                    await message.PinAsync();
                }
            }

            if (!string.IsNullOrEmpty(chall.Writeup) && config.BoardWriteupsChannelId != 0)
            {
                Log.Information("Posting the challenge writeup on the board writeups channel");
                var writeupEmbed = new CustomEmbedBuilder();
                writeupEmbed.WithTitle($"Writeup for {chall.Title}");
                writeupEmbed.WithDescription($"{chall.Writeup}\n**Flag:** {chall.Flag}");
                var writeupsChannel = client.GetGuild(config.GuildId).GetTextChannel(config.BoardWriteupsChannelId);
                await writeupsChannel.SendMessageAsync(embed : writeupEmbed.Build());
            }

            Log.Information("Posting the challenge on Discord");
            var             embed = ChallengesManager.GetChallengeEmbed(chall);
            RestUserMessage challengeMessage;

            if (config.ChallengePingRoleId != 0)
            {
                challengeMessage = await channel.SendMessageAsync($"<@&{config.ChallengePingRoleId}>", embed : embed);
            }
            else
            {
                challengeMessage = await channel.SendMessageAsync(embed : embed);
            }
            if (channel is INewsChannel)
            {
                await challengeMessage.CrosspostAsync();
            }

            Log.Information("Ending Challenge Release Job");
        }
Exemple #24
0
        public async Task GorillasAsync()
        {
            var builder = CustomEmbedBuilder.RunescapeGearEmbed("Siebrens", "Gorillas", "https://image.prntscr.com/image/e1dws4bkS9OWRzR3w7MNVw.png", Context);

            await ReplyAsync("", false, builder.Build());
        }
Exemple #25
0
        public async Task TankBandosAsync()
        {
            var builder = CustomEmbedBuilder.RunescapeGearEmbed("Siebrens", "tank Bandos", "https://image.prntscr.com/image/kCjofuWcTnOa_E3pOYrJfw.png", Context);

            await ReplyAsync("", false, builder.Build());
        }