Ejemplo n.º 1
0
        private async Task <WikiArticle> GetArticleAsync(string pageTitle, int section)
        {
            JToken response = await this.Query($"{SearchParams}&page={pageTitle}&section={section}");

            if (response == null || !IsValidArticle(response as JObject))
            {
                return(null);
            }

            WikiArticle article = new WikiArticle()
            {
                Title     = response["parse"]["title"].ToString(),
                Body      = WikiUtils.ToMarkdown(response["parse"]["wikitext"]["*"].ToString()),
                Url       = WikiUtils.GetUrlFromTitle(pageTitle),
                Timestamp = await this.GetLatestRevisionTimestamp(int.Parse(response["parse"]["revid"].ToString(), CultureInfo.InvariantCulture)),
            };

            return(article);
        }
Ejemplo n.º 2
0
        public async Task QueryWikiAsync(CommandContext ctx, [RemainingText] string pageTitle)
        {
            if (string.IsNullOrEmpty(pageTitle))
            {
                await ctx.Channel.SendMessageAsync("Correct, we have a wiki.");

                return;
            }

            // Base embed
            DiscordEmbedBuilder wikiEmbed = new DiscordEmbedBuilder
            {
                Footer = new DiscordEmbedBuilder.EmbedFooter
                {
                    IconUrl = DiscordEmoji.FromGuildEmote(ctx.Client, PlatformEmojis.Wiki).Url,
                    Text    = "Superbossgames Wiki",
                },
                Color     = new DiscordColor(217, 187, 19),
                Timestamp = DateTime.UtcNow,
            };

            WikiArticle article = await this.wikiService.GetArticleAsync(pageTitle);

            // Found a matching article
            if (article != null)
            {
                wikiEmbed.Footer.Text += $" | Last Edited: {article.Timestamp}";
                wikiEmbed.Title        = article.Title;
                wikiEmbed.Description  = article.Body;
                wikiEmbed.Url          = article.Url.ToString();
                await ctx.Channel.SendMessageAsync(string.Empty, embed : wikiEmbed.Build());

                return;
            }

            // No exact match, find page titles containing the passed title
            List <string> suggestedPages = await this.wikiService.GetSuggestedPagesAsync(pageTitle);

            // Show what we found
            if (suggestedPages.Count > 0)
            {
                wikiEmbed.Title       = "No exact match";
                wikiEmbed.Description = $"Are you looking for any of the following pages:\n"
                                        + $"- {string.Join("\n- ", suggestedPages.Select(x => $"[{x}]({WikiUtils.GetUrlFromTitle(x)})"))}";
            }

            // No match, no suggestions, nothing
            else
            {
                wikiEmbed.Title       = "Nothing found";
                wikiEmbed.Description = @"¯\_(ツ)_/¯";
            }

            await ctx.Channel.SendMessageAsync(embed : wikiEmbed.Build());
        }
Ejemplo n.º 3
0
        public async Task Execute()
        {
            Log.Information("Checking Wiki for new posts..");

            WikiArticle article = await this.wikiService.GetLatestAsync();

            // Unable to fetch the latest post from the wiki
            if (article == null)
            {
                //this.bloonLog.Error($"Something went wrong fetching the latest wiki article! Check Log File");
                return;
            }
            else if (!await this.wikiService.TryStoreNewAsync(article))
            {
                Log.Information("Finished Wiki checks early");
                return;
            }

            DiscordChannel sbgGen = await this.dClient.GetChannelAsync(SBGChannels.General);

            DiscordChannel sbgWiki = await this.dClient.GetChannelAsync(SBGChannels.Wiki);

            DiscordEmbed wikiEmbed = new DiscordEmbedBuilder
            {
                Footer = new DiscordEmbedBuilder.EmbedFooter
                {
                    IconUrl = DiscordEmoji.FromGuildEmote(this.dClient, PlatformEmojis.Wiki).Url,
                    Text    = $"Superbossgames Wiki | Bytes Changed: {(article.ByteDifference > 0 ? "+" : string.Empty)}{article.ByteDifference}",
                },
                Color       = new DiscordColor(217, 187, 19),
                Timestamp   = article.Timestamp,
                Description = $"Recent Wiki Change by {article.Author} to [{article.Title}]({WikiUtils.GetUrlFromTitle(article.Title)})",
            };

            await sbgWiki.SendMessageAsync(embed : wikiEmbed);

            await sbgGen.SendMessageAsync(embed : wikiEmbed);

            Log.Information("Finished Wiki Scraping");
        }