diff options
Diffstat (limited to 'bot/exts/evergreen/wikipedia.py')
-rw-r--r-- | bot/exts/evergreen/wikipedia.py | 100 |
1 files changed, 0 insertions, 100 deletions
diff --git a/bot/exts/evergreen/wikipedia.py b/bot/exts/evergreen/wikipedia.py deleted file mode 100644 index eccc1f8c..00000000 --- a/bot/exts/evergreen/wikipedia.py +++ /dev/null @@ -1,100 +0,0 @@ -import logging -import re -from datetime import datetime -from html import unescape - -from discord import Color, Embed, TextChannel -from discord.ext import commands - -from bot.bot import Bot -from bot.utils import LinePaginator -from bot.utils.exceptions import APIError - -log = logging.getLogger(__name__) - -SEARCH_API = ( - "https://en.wikipedia.org/w/api.php" -) -WIKI_PARAMS = { - "action": "query", - "list": "search", - "prop": "info", - "inprop": "url", - "utf8": "", - "format": "json", - "origin": "*", - -} -WIKI_THUMBNAIL = ( - "https://upload.wikimedia.org/wikipedia/en/thumb/8/80/Wikipedia-logo-v2.svg" - "/330px-Wikipedia-logo-v2.svg.png" -) -WIKI_SNIPPET_REGEX = r"(<!--.*?-->|<[^>]*>)" -WIKI_SEARCH_RESULT = ( - "**[{name}]({url})**\n" - "{description}\n" -) - - -class WikipediaSearch(commands.Cog): - """Get info from wikipedia.""" - - def __init__(self, bot: Bot): - self.bot = bot - - async def wiki_request(self, channel: TextChannel, search: str) -> list[str]: - """Search wikipedia search string and return formatted first 10 pages found.""" - params = WIKI_PARAMS | {"srlimit": 10, "srsearch": search} - async with self.bot.http_session.get(url=SEARCH_API, params=params) as resp: - if resp.status != 200: - log.info(f"Unexpected response `{resp.status}` while searching wikipedia for `{search}`") - raise APIError("Wikipedia API", resp.status) - - raw_data = await resp.json() - - if not raw_data.get("query"): - if error := raw_data.get("errors"): - log.error(f"There was an error while communicating with the Wikipedia API: {error}") - raise APIError("Wikipedia API", resp.status, error) - - lines = [] - if raw_data["query"]["searchinfo"]["totalhits"]: - for article in raw_data["query"]["search"]: - line = WIKI_SEARCH_RESULT.format( - name=article["title"], - description=unescape( - re.sub( - WIKI_SNIPPET_REGEX, "", article["snippet"] - ) - ), - url=f"https://en.wikipedia.org/?curid={article['pageid']}" - ) - lines.append(line) - - return lines - - @commands.cooldown(1, 10, commands.BucketType.user) - @commands.command(name="wikipedia", aliases=("wiki",)) - async def wikipedia_search_command(self, ctx: commands.Context, *, search: str) -> None: - """Sends paginated top 10 results of Wikipedia search..""" - contents = await self.wiki_request(ctx.channel, search) - - if contents: - embed = Embed( - title="Wikipedia Search Results", - colour=Color.blurple() - ) - embed.set_thumbnail(url=WIKI_THUMBNAIL) - embed.timestamp = datetime.utcnow() - await LinePaginator.paginate( - contents, ctx, embed - ) - else: - await ctx.send( - "Sorry, we could not find a wikipedia article using that search term." - ) - - -def setup(bot: Bot) -> None: - """Load the WikipediaSearch cog.""" - bot.add_cog(WikipediaSearch(bot)) |