import logging import os import re import discord import nltk from dotenv import load_dotenv logging.basicConfig(level=logging.INFO) class RoboPage(discord.Client): def __init__(self, *args, **kwargs): super(RoboPage, self).__init__(*args, **kwargs) self.jokes = [ CumJoke(), BlackJoke(), AssJoke() ] def run(self): return super().run(os.getenv('DISCORD_TOKEN')) async def handle_ready(self): channel: discord.TextChannel = discord.utils.get(self.get_all_channels(), name='robotics-facility') await channel.send(f"I'm aliiiiiive {discord.utils.get(self.emojis, name='kaylon')}") async def handle_message(self, message): if message.author != self.user: for joke in self.jokes: if (match := joke.regex.search(message.content)): print(f'{joke.__class__.__name__} detected:\n{message.content}\n{match.group(0)}') await joke.respond(message, self, match) class Joke: @property def regex(self) -> re.Pattern: raise NotImplementedError async def respond(self, message: discord.Message, client: discord.Client, match: re.Match): raise NotImplementedError class CumJoke(Joke): @property def regex(self) -> re.Pattern: return re.compile('|'.join([ 'come', 'coming', 'came', 'cum', 'cumming', 'cummed' ]), re.IGNORECASE) async def respond(self, message: discord.Message, client: discord.Client, match: re.Match): if not match.group(0).startswith('be'): await message.add_reaction(discord.utils.get(client.emojis, name='kaylon')) class BlackJoke(Joke): @property def regex(self) -> re.Pattern: return re.compile('black (\w+)', re.IGNORECASE) async def respond(self, message: discord.Message, client: discord.Client, match: re.Match): msg = await message.reply(unblack(message.content)) await msg.add_reaction(discord.utils.get(client.emojis, name='kaylon')) class AssJoke(Joke): @property def regex(self) -> re.Pattern: return re.compile('ass( |\-)(\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")}') pattern = 'NP: {