From 972b5afab5b1c37e8bf05f70c7f1af2b49c23721 Mon Sep 17 00:00:00 2001 From: jsl12 Date: Fri, 13 Aug 2021 22:33:40 -0500 Subject: [PATCH] restructured handle_message and added GifJokes --- jokes.py | 37 +++++++++++++++++++++++++++- robopage.py | 70 ++++++++++++++++++++++++++--------------------------- 2 files changed, 70 insertions(+), 37 deletions(-) diff --git a/jokes.py b/jokes.py index 67e0ae9..4955eee 100644 --- a/jokes.py +++ b/jokes.py @@ -72,6 +72,41 @@ class DominosJoke(Joke): 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) @@ -103,4 +138,4 @@ def unblack(s): 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()}' \ No newline at end of file + return f'Or as I would say, {text.lower()}' diff --git a/robopage.py b/robopage.py index 91e6cee..b4b790b 100644 --- a/robopage.py +++ b/robopage.py @@ -22,7 +22,7 @@ class RoboPage(discord.Client): def __init__(self, *args, **kwargs): super(RoboPage, self).__init__(*args, **kwargs) - attrs = filter(lambda n: n.endswith('Joke') and not n.startswith('Joke'), dir(jokes)) + attrs = filter(lambda n: n.endswith('Joke') and n not in ['Joke', 'GifJoke'], dir(jokes)) attrs = map(lambda n: getattr(jokes, n)(), attrs) self.jokes = list(attrs) self.most_regex = re.compile( @@ -56,43 +56,39 @@ class RoboPage(discord.Client): # await alive() async def handle_message(self, message): - if hasattr(self, 'data'): - await self.data.add_msg(message) + if message.author != self.user: + if hasattr(self, 'data'): + await self.data.add_msg(message) - async with self.data.lock: - if message.author != self.user: - if (m := self.leaderboard_regex.match(message.content)) is not None: - try: - await message.reply(await self.data.emoji_leaderboard( + if (m := self.leaderboard_regex.match(message.content)) is not None: + try: + await message.reply(await self.data.emoji_leaderboard( + client=self, + emoji_name=m.group('emoji').lower(), + days=14 + )) + except KeyError as e: + LOGGER.exception(e) + await message.reply(f"I couldn't find any {m.group('emoji')} reactions. Leave me alone!") + return + + elif (m := self.most_regex.match(message.content)) is not None: + days = m.group('days') or 14 + try: + await message.reply( + await self.data.biggest_single( client=self, - emoji_name=m.group('emoji').lower(), - days=14 + emoji=m.group('emoji').lower(), + days=int(days) )) - except KeyError as e: - LOGGER.exception(e) - await message.reply(f"I couldn't find any {m.group('emoji')} reactions. Leave me alone!") + except IndexError as e: + await message.reply('NObody') + return - elif (m := self.most_regex.match(message.content)) is not None: - days = m.group('days') or 14 - try: - await message.reply( - await self.data.biggest_single(client=self, emoji=m.group('emoji').lower(), days=int(days)) - ) - except IndexError as e: - await message.reply('NObody') - - elif 'not like this' in message.content.lower(): - await message.reply(self.gifs['not like this']) - - elif 'beans' in message.content.lower(): - await message.reply('Somebody help! I\'ve got beans in my motherboard!\n') - await message.channel.send(self.gifs['beans']) - - else: - for joke in self.jokes: - if (scan_res := joke.scan(message)): - print(f'{joke.__class__.__name__} detected:\n{message.content}\n{scan_res}') - await joke.respond(message, self, scan_res) + for joke in self.jokes: + if (scan_res := joke.scan(message)): + LOGGER.info(f'{joke.__class__.__name__} detected: {message.content}, {scan_res.group()}') + await joke.respond(message, self, scan_res) if __name__ == '__main__': @@ -116,13 +112,15 @@ if __name__ == '__main__': @client.event async def on_raw_reaction_add(payload): LOGGER.info(payload) - await client.data.update_reaction(payload=payload, client=client) + if hasattr(client, 'data'): + await client.data.update_reaction(payload=payload, client=client) @client.event async def on_raw_reaction_remove(payload): LOGGER.info(payload) - await client.data.update_reaction(payload=payload, client=client) + if hasattr(client, 'data'): + await client.data.update_reaction(payload=payload, client=client) client.run()