aboutsummaryrefslogtreecommitdiff
path: root/wplink/wplink.py
blob: e9781fc9cc3dbca20a5655bbb852f61510500054 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import aiohttp
import discord
from redbot.core import commands
import re
import urllib.parse


class WPLink(commands.Cog):
    def __init__(self, bot):
        self.bot = bot

    @commands.Cog.listener()
    async def on_message(self, message: discord.Message):
        wikilink_pattern = r"\[\[(.+)\]\]"
        match = re.search(wikilink_pattern, message.content)
        if match is not None:
            title = match.group(1)
            page_url = await self.look_up_page(title)
            if page_url is not None:
                await message.reply(
                    page_url, allowed_mentions=discord.AllowedMentions.none()
                )

    async def look_up_page(self, title: str) -> str | None:
        query_url = f"https://en.wikipedia.org/wiki/Special:Search?search={urllib.parse.quote(title)}&go=Go"
        async with aiohttp.ClientSession() as session:
            async with session.get(query_url) as response:
                result_url = str(response.url)
                return (
                    result_url
                    if not result_url.startswith(
                        "https://en.wikipedia.org/wiki/Special:Search?"
                    )
                    else None
                )