Example #1
0
        public async Task Subscriptions()
        {
            using (SubDBContext DBContext = DBFactory.Create <SubDBContext>())
            {
                SimpleStopWatch watch        = new SimpleStopWatch();
                string          channelId    = Context.Channel.Id.ToString();
                var             cnnSub       = DBContext.CNNSubscribers.FromSql("SELECT * FROM CNNSubscribers WHERE Id = {0} LIMIT 1", channelId).AsNoTracking().FirstOrDefault();
                var             redditSubs   = DBContext.RedditSubscribers.FromSql("SELECT * FROM RedditSubscribers WHERE Id = {0}", channelId).AsNoTracking().ToList();
                EmbedBuilder    embedBuilder = new EmbedBuilder();
                EmbedService.BuildFeedbackEmbed(embedBuilder);
                embedBuilder.Title        = $"Subscriptions for {Context.Channel.Name.UpperFirstChar()}";
                embedBuilder.Description  = "\n\n";
                embedBuilder.Description += $":newspaper: CNN Subscription Status: {(cnnSub == null ? "Not subscribed." : "Currently subscribed.").Bold()}\n\n";
                embedBuilder.Description += ":monkey_face: Reddit Subscriptions: ";
                if (redditSubs == null || redditSubs.Count == 0)
                {
                    embedBuilder.Description += "Not subscribed to any subreddits.".Bold();
                }
                else
                {
                    foreach (RedditSubscriber sub in redditSubs)
                    {
                        embedBuilder.Description += $"{sub.Subreddit.Bold()}, ";
                    }
                    embedBuilder.Description = embedBuilder.Description.Substring(0, embedBuilder.Description.Length - 2);
                }
                TimeSpan timeTook = watch.Stop();
                embedBuilder.WithFooter(footer =>
                {
                    footer.Text = $"⏰ {"Generated in:"}  {Math.Round(timeTook.TotalMilliseconds)}ms";
                });

                await ReplyAsync("", embed : embedBuilder.Build());
            }
        }
Example #2
0
        public async Task GuildInfo()
        {
            DateTime     startTime    = DateTime.Now;
            var          orderedRoles = Context.Guild.Roles.Where(x => x.IsMentionable).ToList().OrderByDescending(x => x.Permissions.ToString());
            EmbedBuilder embedBuilder = new EmbedBuilder();

            EmbedService.BuildFeedbackEmbed(embedBuilder);
            embedBuilder.Title       = $"{Context.Guild.Name.ToString()} Info";
            embedBuilder.Description = $"{Context.Guild.DefaultChannel.Topic.SpliceText(50)}\n\n{"Roles:".Bold()} ";

            foreach (IRole role in orderedRoles)
            {
                embedBuilder.AppendEmbedDescription($"{role.Mention} ({Context.Guild.Users.Where(x => x.Roles.Contains(role)).Count().ToString().Bold()}), ");
            }
            using (BotDBContext DBContext = DBFactory.Create <BotDBContext>())
            {
                embedBuilder.AddField(x => { x.Name = ":desktop: Default Channel"; x.Value = Context.Guild.DefaultChannel.Name; x.IsInline = true; });
                embedBuilder.AddField(x => { x.Name = ":man: Users"; x.Value = Context.Guild.MemberCount; x.IsInline = true; });
                embedBuilder.AddField(x => { x.Name = ":abc: Text Channels"; x.Value = Context.Guild.TextChannels.Count(); x.IsInline = true; });
                embedBuilder.AddField(x => { x.Name = ":speaking_head: Voice Channels"; x.Value = Context.Guild.VoiceChannels.Count(); x.IsInline = true; });
                embedBuilder.AddField(x => { x.Name = ":love_letter: Stored Messages"; x.Value = DBContext.Messages.FromSql("SELECT Messages.Id, Messages.ChannelId, TextChannels.GuildId FROM Messages INNER JOIN TextChannels ON TextChannels.Id = Messages.ChannelId WHERE TextChannels.GuildId = {0}", Context.Guild.Id.ToString()).AsNoTracking().Count().ToString(); x.IsInline = true; });
                //embedBuilder.AddField(x => { x.Name = ":love_letter: Stored Messages"; x.Value = DBContext.Messages.Where(y => Context.Guild.Channels.FirstOrDefault(z => z.Id.ToString() == y.ChannelId) != null).Count().ToString(); x.IsInline = true; });
                embedBuilder.AddField(x => { x.Name = ":camera_with_flash:  Multifactor Authentication Level"; x.Value = Enum.GetName(typeof(MfaLevel), Context.Guild.MfaLevel); x.IsInline = true; });
                embedBuilder.AddField(x => { x.Name = ":tools: Commands Executed"; x.Value = DBContext.CommandLogs.Where(y => y.GuildId == Context.Guild.Id.ToString()).Count().ToString().Number().Bold(); x.IsInline = true; });
            }
            embedBuilder.WithThumbnailUrl(Context.Guild.IconUrl);
            embedBuilder.WithFooter(x =>
            {
                x.Text = $"⏰ Generated in:  {Math.Round((DateTime.Now.Subtract(startTime).TotalMilliseconds)).ToString()}ms";
            });
            await ReplyAsync("", embed : embedBuilder.Build());
        }
Example #3
0
        public async Task Tag([Summary("Retrieves the specified tag.")] string name)
        {
            using (BotDBContext DBContext = DBFactory.Create <BotDBContext>())
            {
                ChannelTag selectedTag = DBContext.ChannelTags.FirstOrDefault(x => x.ChannelId == Context.Channel.Id.ToString() && x.Name.ToLower() == name.ToLower());
                if (selectedTag != null)
                {
                    DiscordUser user = DBContext.Users.FirstOrDefault(x => x.Id.ToString() == selectedTag.OwnerId);
                    if (user == null)
                    {
                        await ReplyAsync("", embed : EmbedService.MakeFailFeedbackEmbed("You are not the owner of that!"));

                        return;
                    }
                    EmbedBuilder embedBuilder = new EmbedBuilder();
                    embedBuilder.WithAuthor(x =>
                    {
                        x.Name    = user.Username;
                        x.IconUrl = user.AvatarUrl;
                    });
                    embedBuilder.WithTimestamp(selectedTag.CreatedBy);
                    EmbedService.BuildFeedbackEmbed(embedBuilder);
                    embedBuilder.Description = "";
                    embedBuilder.AddField(x =>
                    {
                        x.Name  = name;
                        x.Value = $":notepad_spiral:{selectedTag.Content}";
                    });
                    await ReplyAsync("", embed : embedBuilder.Build());
                }
                else
                {
                    await ReplyAsync("", embed : EmbedService.MakeFailFeedbackEmbed("There's no tag on this channel with that name."));
                }
            }
        }
Example #4
0
        public async Task RandomDog()
        {
            DateTime startTime = DateTime.Now;

            using (var typingState = await Context.Channel.EnterTypingState(Config.ImageManipulateTypeTime))
            {
                string result = await HttpService.Get("http://shibe.online/api/shibes?count=1&urls=true&httpsUrls=true");

                dynamic obj = await Task.Factory.StartNew(() => JsonConvert.DeserializeObject <List <string> >(result));

                EmbedBuilder builder = new EmbedBuilder();
                EmbedService.BuildFeedbackEmbed(builder);
                builder.Description = "";
                builder.Title       = "Random Dog";
                builder.WithImageUrl(obj[0]);
                builder.WithFooter(footer =>
                {
                    footer.Text = $"⏰ {"Generated in:"}  {Math.Round((DateTime.Now.Subtract(startTime).TotalMilliseconds)).ToString()}ms";
                });
                await ReplyAsync("", embed : builder.Build());

                //await Context.Channel.SendFileAsync((Image<Rgba32>)await HttpService.GetImageBitmap(obj[0]), ImageFormat.Png, "random_dog.png");
            }
        }
Example #5
0
        public async Task UrbanDefine([Summary("The word to define.")][Remainder] string word)
        {
            string result = await HttpService.Get($"https://mashape-community-urban-dictionary.p.mashape.com/define?term={word}", new Dictionary <string, string> {
                { "X-Mashape-Key", Config.MashapeKey }
            });

            Dictionary <string, dynamic> json = await Task.Factory.StartNew(() => JsonConvert.DeserializeObject <Dictionary <string, dynamic> >(result));

            if (json["result_type"].ToString() != "no_results")
            {
                dynamic      randWord     = json["list"][MathService.RandomRange(0, json["list"].Count)];
                EmbedBuilder embedBuilder = new EmbedBuilder();
                EmbedService.BuildFeedbackEmbed(embedBuilder);
                embedBuilder.Title        = $"Urban Dictionary Definition";
                embedBuilder.ThumbnailUrl = "http://www.userlogos.org/files/logos/pln_xp/ud.png";
                embedBuilder.Description  = "";

                embedBuilder.AddField(field =>
                {
                    field.Name  = $":pencil2: {word}";
                    field.Value = randWord["definition"];
                });

                embedBuilder.AddField(field =>
                {
                    field.Name  = ":paperclip: Example";
                    field.Value = randWord["example"];
                });

                embedBuilder.WithFooter(footer =>
                {
                    footer.Text = $"Written By: {randWord["author"]}";
                });

                await ReplyAsync("", embed : embedBuilder.Build());
            }
            else
            {
                Embed failEmbed = EmbedService.MakeFailFeedbackEmbed($"{word.ToString().Bold()} could not be found.");
                await ReplyAsync("", embed : failEmbed, lifeTime : Config.FeedbackMessageLifeTime);
            }
        }
Example #6
0
        public async Task <bool> RequestImageAPI(string apiEndpoint, Dictionary <string, string> parameters, bool getUserAvatar)
        {
            DateTime startTime = DateTime.Now;

            if ((!parameters.ContainsKey("Url") || (parameters.ContainsKey("Url") && parameters["Url"] == null) && !getUserAvatar))
            {
                string targetUrl = null;
                var    messages  = await Context.Channel.GetMessagesAsync(50).Flatten();

                foreach (var msg in messages)
                {
                    if (msg.Embeds.Count > 0 && msg.Embeds.FirstOrDefault().Image.HasValue)
                    {
                        targetUrl = msg.Embeds.FirstOrDefault().Image?.Url;
                        break;
                    }
                    if (msg.Attachments.Count > 0 && !string.IsNullOrEmpty(msg.Attachments.FirstOrDefault().Url))
                    {
                        targetUrl = msg.Attachments.FirstOrDefault().Url;
                        break;
                    }
                }
                //string targetUrl = (await Context.Channel.GetMessagesAsync(50).Flatten()).Where(x => x.Attachments.Count > 0).FirstOrDefault().Attachments.FirstOrDefault().Url;
                if (targetUrl == null)
                {
                    return(false);
                }

                if (!parameters.ContainsKey("Url"))
                {
                    parameters.Add("Url", targetUrl);
                }
                else
                {
                    parameters["Url"] = targetUrl;
                }
            }

            using (await Context.Channel.EnterTypingState(Config.ImageManipulateTypeTime))
            {
                PostBitmapResponse resp    = null;
                IImage             imgData = null;
                //string uploadUrl = "";
                if (getUserAvatar)
                {
                    resp = await HttpService.PostBitmap($"{MagickServerUrl}/api/{apiEndpoint}/", parameters);

                    if (resp.Status.Success && resp.Image != null)
                    {
                        imgData = await ImageService.UploadImage(resp.Image);

                        //uploadUrl = await ImageService.PomfImageUpload(resp.Image);
                        resp.Image.Dispose();
                    }
                }
                else
                {
                    Image <Rgba32> targetImage = await HttpService.GetImageBitmap(parameters["Url"]);

                    imgData = await ImageService.UploadImage(ImageService.ClampImage(targetImage, Config.MaxGeneratedImageSize, Config.MaxGeneratedImageSize));

                    parameters["Url"] = imgData.Link;
                    //uploadUrl = await ImageService.PomfImageUpload(ImageService.ClampImage(targetImage, Config.MaxGeneratedImageSize, Config.MaxGeneratedImageSize));
                    //parameters["Url"] = uploadUrl;
                    resp = await HttpService.PostBitmap($"{MagickServerUrl}/api/{apiEndpoint}/", parameters);

                    if (resp.Status.Success && resp.Image != null)
                    {
                        imgData = await ImageService.UploadImage(resp.Image);

                        resp.Image.Dispose();
                        targetImage.Dispose();
                    }
                    else
                    {
                        targetImage.Dispose();
                    }
                }

                if (!resp.Status.Success)
                {
                    await ReplyAsync("", embed : EmbedService.MakeFailFeedbackEmbed(resp.Status.Message));

                    return(false);
                }

                EmbedBuilder builder = new EmbedBuilder();
                EmbedService.BuildFeedbackEmbed(builder);
                builder.Description = "";
                builder.WithImageUrl(imgData.Link);

                //await Context.Channel.SendFileAsync(resp.Image, System.Drawing.Imaging.ImageFormat.Gif, $"{apiEndpoint}.gif");

                builder.WithFooter(footer =>
                {
                    footer.Text = $"⏰ {"Generated in:"}  {(DateTime.Now.Subtract(startTime)).ToNiceTime(false)}";
                });

                await ReplyAsync("", embed : builder.Build());

                imgData = null;

                //if (!getUserAvatar)
                //    await ImageService.DeleteImage(imgData.DeleteHash);

                return(true);
            }
        }