import re import discord import nltk import stockquotes class Joke: @property def regex(self) -> re.Pattern: raise NotImplementedError def scan(self, message: discord.Message): if (match := self.regex.search(message.content)): return match async def respond(self, message: discord.Message, client: discord.Client, scan_res): raise NotImplementedError class CumJoke(Joke): @property def regex(self) -> re.Pattern: words = [ 'come', 'coming', 'came', 'cum', 'cumming', 'cummed' ] return re.compile(f"(? re.Pattern: return re.compile('black (\w+)', re.IGNORECASE) async def respond(self, message: discord.Message, client: discord.Client, match: re.Match): res = unblack(message.content) if res is not None: msg = await message.reply(res) await msg.add_reaction(discord.utils.get(client.emojis, name='kaylon')) class AssJoke(Joke): @property def regex(self) -> re.Pattern: return re.compile('[ \-]ass[ \-](?P\w+)', re.IGNORECASE) async def respond(self, message: discord.Message, client: discord.Client, match: re.Match): res = assify(message.content) if res is not None: await message.reply(f'{res} {discord.utils.get(client.emojis, name="kaylon")}') class DominosJoke(Joke): @property def regex(self) -> re.Pattern: return re.compile('domino\'?s', re.IGNORECASE) async def respond(self, message: discord.Message, client: discord.Client, match: re.Match): cp = stockquotes.Stock('DPZ').current_price msg = f'You know, my friend Ben has made about ${cp - 16:.0f} on Domino\'s stock. He basically owns it now' if (e := discord.utils.get(client.emojis, name="pizza")): await message.add_reaction(e) await message.reply(msg) class GifJoke(Joke): url: str def __init__(self, url: str): self.url = url async def respond(self, message: discord.Message, client: discord.Client, scan_res): await message.channel.send(self.url) class BeansJoke(GifJoke): @property def regex(self) -> re.Pattern: return re.compile('beans', re.IGNORECASE) def __init__(self): super().__init__(url='https://c.tenor.com/TjX1yORoln0AAAAM/this-is-beans-beans.gif') async def respond(self, message: discord.Message, client: discord.Client, scan_res): await message.reply('Somebody help! I\'ve got beans in my motherboard!\n') await super().respond(message, client, scan_res) class NotLikeThisJoke(GifJoke): @property def regex(self) -> re.Pattern: return re.compile('not like this', re.IGNORECASE) def __init__(self): super().__init__(url='https://tenor.com/view/not-like-this-the-matrix-panic-neo-angry-gif-5216157') async def respond(self, message: discord.Message, client: discord.Client, scan_res): await message.reply(self.url) pattern = 'NP: {
?*}' cp = nltk.RegexpParser(pattern) def token_list(s): return nltk.chunk.tree2conlltags( cp.parse( nltk.pos_tag( nltk.word_tokenize(s) ))) def assify(s): tag_list = token_list(s) for i, (text, tag, iob) in enumerate(tag_list): if text[-3:].lower() == 'ass': try: next_tag = tag_list[i + 1][1] if next_tag == 'NN' or next_tag == 'NNS': return f'ass-{tag_list[i + 1][0]}' except IndexError as e: return def unblack(s): tag_list = token_list(s) for i, (text, tag, iob) in enumerate(tag_list): if text.lower() == 'black': if tag.startswith('JJ') or tag.startswith('NN'): for text, tag, iob in tag_list[i + 1:]: if tag.startswith('NN'): return f'Or as I would say, {text.lower()}'