import discord, traceback, discord_slash, sys from discord.ext import commands from .utilFunctions import emojiToCommand class EventHandler(): def __init__(self, bot): self.bot = bot async def on_slash_command(self, ctx): if ctx.subcommand_name is not None: subcommand = f" {ctx.subcommand_name} " else: subcommand = " " args = " ".join([str(i) for i in ctx.args]) fullCommand = f"/{ctx.command}{subcommand}{args}" logMessage = f"{ctx.author.display_name} ran {fullCommand}" self.bot.log(logMessage, str(ctx.channel_id), level = 25) async def on_ready(self): await self.bot.databaseFuncs.syncCommands() self.bot.log("Logged in as "+self.bot.user.name+", "+str(self.bot.user.id), level = 25) game = discord.Game("Use /help for commands") await self.bot.change_presence(activity=game, status = discord.Status.online) async def on_reaction_add(self, reaction, user): if user.bot == False: message = reaction.message channel = message.channel self.bot.log(f"{user.display_name} reacted to a message",str(channel.id)) try: connectFourTheirTurn, piece = self.bot.databaseFuncs.connectFourReactionTest(channel,message,"#"+str(user.id)) except: connectFourTheirTurn = False bedreNetflixMessage, addMovie, imdbIds = self.bot.databaseFuncs.bedreNetflixReactionTest(channel, message) if connectFourTheirTurn: column = emojiToCommand(reaction.emoji) await self.bot.games.connectFour.placePiece(message, f"#{user.id}", column-1) elif bedreNetflixMessage and addMovie: moviePick = emojiToCommand(reaction.emoji) await message.delete() if moviePick == "none": imdbID = None else: imdbID = imdbIds[moviePick-1] await self.bot.other.bedreNetflix.addMovie(channel,imdbID) elif bedreNetflixMessage and not addMovie: showPick = emojiToCommand(reaction.emoji) await message.delete() if showPick == "none": imdbName = None else: imdbName = imdbIds[showPick-1] await self.bot.other.bedreNetflix.addShow(channel,imdbName) elif self.bot.databaseFuncs.hangmanReactionTest(channel, message, f"#{user.id}"): self.bot.log("They reacted to the hangman message") if ord(reaction.emoji) in range(127462,127488): guess = chr(ord(reaction.emoji)-127397) await self.bot.games.hangman.guess(message, f"#{user.id}", guess) else: self.bot.log("Bot they didn't react with a valid guess") class ErrorHandler(): def __init__(self, bot): self.bot = bot async def on_slash_command_error(self, ctx, error): if isinstance(error, commands.CommandNotFound): await ctx.send("That's not a command (error code 001)") elif isinstance(error, discord.errors.NotFound): self.bot.log("Deleted message before I could add all reactions") elif isinstance(error, commands.errors.MissingRequiredArgument): self.bot.log(f"{error}",str(ctx.channel_id)) await ctx.send("Missing command parameters (error code 002). Try using `!help [command]` to find out how to use the command.") else: exception = traceback.format_exception(type(error), error, error.__traceback__) stopAt = "\nThe above exception was the direct cause of the following exception:\n\n" if stopAt in exception: index = exception.index(stopAt) exception = exception[:index] exceptionString = "".join(exception) self.bot.log([f"exception in /{ctx.name}", f"{exceptionString}"],str(ctx.channel_id), 40) if isinstance(error, discord.errors.NotFound): self.bot.log("Context is non-existant", level = 40) else: await ctx.send("Something went wrong (error code 000)") async def on_error(self, method): errorType = sys.exc_info()[0] if errorType == discord.errors.NotFound: self.bot.log("Deleted message before I could add all reactions") else: exception = traceback.format_exc() stopAt = "\nThe above exception was the direct cause of the following exception:\n\n" if stopAt in exception: index = exception.index(stopAt) exception = exception[:index] exceptionString = "".join(exception) self.bot.log([f"exception in {method}", f"{exceptionString}"], level = 40)