From ff48dbff5912fd381ec22f870ebcda610a96e7a8 Mon Sep 17 00:00:00 2001 From: NikolajDanger Date: Mon, 12 Apr 2021 09:22:26 +0200 Subject: [PATCH 1/4] :pencil: updated requirements --- requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index f41696d..e66d93c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -11,7 +11,7 @@ d20==1.1.0 discord-py-slash-command==1.1.1 discord.py==1.7.1 dnspython==2.1.0 -docutils==0.17 +docutils==0.16 fandom-py==0.2.1 finnhub-python==2.4.0 gitdb==4.0.7 @@ -21,7 +21,7 @@ idna==2.10 IMDbPY==2020.9.25 isort==5.8.0 jaraco.context==4.0.0 -lark-parser==0.11.2 +lark-parser==0.9.0 lazy-object-proxy==1.6.0 lxml==4.6.3 mccabe==0.6.1 From 1acc0d407d0dda99ac843f478692d880976846d5 Mon Sep 17 00:00:00 2001 From: NikolajDanger Date: Mon, 12 Apr 2021 10:20:07 +0200 Subject: [PATCH 2/4] :bug: Fixed logging bug with /movie --- utils/utilFunctions.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/utils/utilFunctions.py b/utils/utilFunctions.py index b821576..92c655a 100644 --- a/utils/utilFunctions.py +++ b/utils/utilFunctions.py @@ -2,6 +2,7 @@ import json import logging import os import sys +import imdb from .helperClasses import Options FORMAT = " %(asctime)s | %(name)-16s | %(levelname)-8s | %(message)s" @@ -17,6 +18,8 @@ handler.setFormatter(logging.Formatter(fmt = PRINTFORMAT, datefmt=DATEFORMAT)) printer.addHandler(handler) printer.propagate = False +imdb._logging.setLevel("CRITICAL") + def getParams(): with open("resources/slashParameters.json", "r") as f: params = json.load(f) From 78d8575e15170c9f0406823d800c3915e89a43f6 Mon Sep 17 00:00:00 2001 From: NikolajDanger Date: Mon, 12 Apr 2021 10:20:25 +0200 Subject: [PATCH 3/4] :bug: Change the way defer works, so it's all done by the bot instance --- Gwendolyn.py | 6 ++++++ cogs/MiscCog.py | 2 +- funcs/games/blackjack.py | 30 ++++++------------------------ funcs/games/connectFour.py | 10 ++-------- funcs/games/hangman.py | 2 +- funcs/games/hex.py | 5 +---- funcs/games/invest.py | 5 +---- funcs/games/money.py | 7 ++----- funcs/games/trivia.py | 5 +---- funcs/other/bedreNetflix.py | 6 +++--- funcs/other/nerdShit.py | 10 +++++----- funcs/other/other.py | 4 ++-- 12 files changed, 31 insertions(+), 61 deletions(-) diff --git a/Gwendolyn.py b/Gwendolyn.py index 0154046..5a48420 100644 --- a/Gwendolyn.py +++ b/Gwendolyn.py @@ -50,6 +50,12 @@ class Gwendolyn(commands.Bot): self.log(f"{ctx.author.display_name} tried to stop me! (error code 201)",str(ctx.channel_id)) await ctx.send(f"I don't think I will, {ctx.author.display_name} (error code 201)") + async def defer(self, ctx): + try: + await ctx.defer() + except: + self.log("defer failed") + if __name__ == "__main__": diff --git a/cogs/MiscCog.py b/cogs/MiscCog.py index ef50213..136c0fb 100644 --- a/cogs/MiscCog.py +++ b/cogs/MiscCog.py @@ -2,7 +2,7 @@ import discord, codecs, string, json from discord.ext import commands from discord_slash import cog_ext -from utils import getParams +from utils import getParams # pylint: disable=import-error params = getParams() diff --git a/funcs/games/blackjack.py b/funcs/games/blackjack.py index e111f10..b3d4379 100644 --- a/funcs/games/blackjack.py +++ b/funcs/games/blackjack.py @@ -172,10 +172,7 @@ class Blackjack(): # When players try to hit async def hit(self, ctx, handNumber = 0): - try: - await ctx.defer() - except: - self.bot.log("Defer failed") + await self.bot.defer(ctx) channel = str(ctx.channel_id) user = f"#{ctx.author.id}" roundDone = False @@ -239,10 +236,7 @@ class Blackjack(): # When players try to double down async def double(self, ctx, handNumber = 0): - try: - await ctx.defer() - except: - self.bot.log("Defer failed") + await self.bot.defer(ctx) channel = str(ctx.channel_id) user = f"#{ctx.author.id}" roundDone = False @@ -317,10 +311,7 @@ class Blackjack(): # When players try to stand async def stand(self, ctx, handNumber = 0): - try: - await ctx.defer() - except: - self.bot.log("Defer failed") + await self.bot.defer(ctx) channel = str(ctx.channel_id) user = f"#{ctx.author.id}" roundDone = False @@ -378,10 +369,7 @@ class Blackjack(): # When players try to split async def split(self, ctx, handNumber = 0): - try: - await ctx.defer() - except: - self.bot.log("Defer failed") + await self.bot.defer(ctx) channel = str(ctx.channel_id) user = f"#{ctx.author.id}" roundDone = False @@ -506,10 +494,7 @@ class Blackjack(): # Player enters the game and draws a hand async def playerDrawHand(self, ctx, bet : int): - try: - await ctx.defer() - except: - self.bot.log("Defer failed") + await self.bot.defer(ctx) channel = str(ctx.channel_id) user = f"#{ctx.author.id}" collection = self.bot.database["blackjack games"] @@ -565,10 +550,7 @@ class Blackjack(): # Starts a game of blackjack async def start(self, ctx): - try: - await ctx.defer() - except: - self.bot.log("Defer failed") + await self.bot.defer(ctx) channel = str(ctx.channel_id) blackjackMinCards = 50 blackjackDecks = 4 diff --git a/funcs/games/connectFour.py b/funcs/games/connectFour.py index d6fdf9f..a01ec11 100644 --- a/funcs/games/connectFour.py +++ b/funcs/games/connectFour.py @@ -26,10 +26,7 @@ class ConnectFour(): # Starts the game async def start(self, ctx, opponent): - try: - await ctx.defer() - except: - self.bot.log("Defer failed") + await self.bot.defer(ctx) user = f"#{ctx.author.id}" channel = str(ctx.channel_id) game = self.bot.database["connect 4 games"].find_one({"_id":channel}) @@ -228,10 +225,7 @@ class ConnectFour(): # Parses command async def surrender(self, ctx): - try: - await ctx.defer() - except: - self.bot.log("Defer failed") + await self.bot.defer(ctx) channel = str(ctx.channel_id) game = self.bot.database["connect 4 games"].find_one({"_id":channel}) diff --git a/funcs/games/hangman.py b/funcs/games/hangman.py index 0bafdbf..df94339 100644 --- a/funcs/games/hangman.py +++ b/funcs/games/hangman.py @@ -10,7 +10,7 @@ class Hangman(): self.draw = DrawHangman(bot) async def start(self, ctx): - await ctx.defer() + await self.bot.defer(ctx) channel = str(ctx.channel_id) user = f"#{ctx.author.id}" game = self.bot.database["hangman games"].find_one({"_id":channel}) diff --git a/funcs/games/hex.py b/funcs/games/hex.py index 6711670..e6b8b5c 100644 --- a/funcs/games/hex.py +++ b/funcs/games/hex.py @@ -93,10 +93,7 @@ class HexGame(): # Starts the game async def start(self, ctx, opponent): - try: - await ctx.defer() - except: - self.bot.log("Defer failed") + await self.bot.defer(ctx) user = f"#{ctx.author.id}" channel = str(ctx.channel_id) game = self.bot.database["hex games"].find_one({"_id":channel}) diff --git a/funcs/games/invest.py b/funcs/games/invest.py index c34310a..75bb33a 100644 --- a/funcs/games/invest.py +++ b/funcs/games/invest.py @@ -106,10 +106,7 @@ class Invest(): return "no" async def parseInvest(self, ctx, parameters): - try: - await ctx.defer() - except: - self.bot.log("Defer failed") + await self.bot.defer(ctx) user = f"#{ctx.author.id}" if parameters.startswith("check"): diff --git a/funcs/games/money.py b/funcs/games/money.py index ef9458f..dea2812 100644 --- a/funcs/games/money.py +++ b/funcs/games/money.py @@ -15,7 +15,7 @@ class Money(): else: return 0 async def sendBalance(self, ctx): - await ctx.defer() + await self.bot.defer(ctx) response = self.checkBalance("#"+str(ctx.author.id)) if response == 1: new_message = ctx.author.display_name + " has " + str(response) + " GwendoBuck" @@ -36,10 +36,7 @@ class Money(): # Transfers money from one user to another async def giveMoney(self, ctx, user, amount): - try: - await ctx.defer() - except: - self.bot.log("Defer failed") + await self.bot.defer(ctx) username = user.display_name if self.bot.databaseFuncs.getID(username) == None: async for member in ctx.guild.fetch_members(limit=None): diff --git a/funcs/games/trivia.py b/funcs/games/trivia.py index f8d17c0..eeb4003 100644 --- a/funcs/games/trivia.py +++ b/funcs/games/trivia.py @@ -86,10 +86,7 @@ class Trivia(): return None async def triviaParse(self, ctx, answer): - try: - await ctx.defer() - except: - self.bot.log("defer failed") + await self.bot.defer(ctx) if answer == "": question, options, correctAnswer = self.triviaStart(str(ctx.channel_id)) if options != "": diff --git a/funcs/other/bedreNetflix.py b/funcs/other/bedreNetflix.py index a4aceff..6a7d9ec 100644 --- a/funcs/other/bedreNetflix.py +++ b/funcs/other/bedreNetflix.py @@ -13,7 +13,7 @@ class BedreNetflix(): #Returns a list of no more than 5 options when user requests a movie async def requestMovie(self, ctx, movieName): - await ctx.defer() + await self.bot.defer(ctx) self.bot.log("Searching for "+movieName) movieList = imdb.IMDb().search_movie(movieName) @@ -92,7 +92,7 @@ class BedreNetflix(): #Returns a list of no more than 5 options when user requests a show async def requestShow(self, ctx, showName): - await ctx.defer() + await self.bot.defer(ctx) self.bot.log("Searching for "+showName) movies = imdb.IMDb().search_movie(showName) #Replace with tvdb @@ -307,7 +307,7 @@ class BedreNetflix(): await ctx.send("```"+messageText[:cutOffIndex]+"```") await SendLongMessage(ctx,messageText[cutOffIndex+1:]) - await ctx.defer() + await self.bot.defer(ctx) # showDM, showMovies, showShows, episodes params = [False, False, False, False] diff --git a/funcs/other/nerdShit.py b/funcs/other/nerdShit.py index e2e64f8..53f5306 100644 --- a/funcs/other/nerdShit.py +++ b/funcs/other/nerdShit.py @@ -1,4 +1,4 @@ -import discord, wolframalpha, requests, os +import discord, discord_slash, wolframalpha, requests, os from PIL import Image, ImageDraw, ImageFont class NerdShit(): @@ -7,8 +7,8 @@ class NerdShit(): self.bot = bot async def wolfSearch(self,ctx,content): + await self.bot.defer(ctx) fnt = ImageFont.truetype('resources/fonts/times-new-roman.ttf', 20) - await ctx.defer() self.bot.log("Requesting data") bot = wolframalpha.Client(self.bot.credentials.wolfKey) res = bot.query(content) @@ -36,19 +36,19 @@ class NerdShit(): heights = [] for count, pod in enumerate(chunk): heights += [height] - width = max(width,int(list(pod.img)[0]["@width"])) + width = max(width,int(pod.img['@width'])) if titleChucks[x][count] == "": placeForText = 0 else: placeForText = 30 - height += int(list(pod.img)[0]["@height"]) + 10 + placeForText + height += int(pod.img["@height"]) + 10 + placeForText width += 10 height += 5 wolfImage = Image.new("RGB",(width,height),color=(255,255,255)) for count, pod in enumerate(chunk): - response = requests.get(list(pod.img)[0]["@src"]) + response = requests.get(pod.img["@src"]) file = open("resources/wolfTemp.png", "wb") file.write(response.content) file.close() diff --git a/funcs/other/other.py b/funcs/other/other.py index 5239e6c..2955641 100644 --- a/funcs/other/other.py +++ b/funcs/other/other.py @@ -34,7 +34,7 @@ class Other(): # Picks a random movie and returns information about it async def movieFunc(self, ctx): - await ctx.defer() + await self.bot.defer(ctx) self.bot.log("Creating IMDb object") imdbClient = imdb.IMDb() @@ -138,7 +138,7 @@ class Other(): # Finds a page from the Senkulpa Wikia async def findWikiPage(self, ctx, search : str): - await ctx.defer() + await self.bot.defer(ctx) foundPage = False if search != "": From 648308831dcb8b8726b3d7103973ea15f1fde375 Mon Sep 17 00:00:00 2001 From: NikolajDanger Date: Mon, 12 Apr 2021 15:37:34 +0200 Subject: [PATCH 4/4] :bug: Fixed clear reactions bug Gwendolyn used to throw an error when trying to remove messages from DMs. Now she just doesn't try :thumbs-up: --- funcs/other/bedreNetflix.py | 31 ++++++++++++++++++++++++++----- utils/eventHandlers.py | 18 ++++++++++++++---- 2 files changed, 40 insertions(+), 9 deletions(-) diff --git a/funcs/other/bedreNetflix.py b/funcs/other/bedreNetflix.py index 6a7d9ec..3523f1b 100644 --- a/funcs/other/bedreNetflix.py +++ b/funcs/other/bedreNetflix.py @@ -61,11 +61,18 @@ class BedreNetflix(): await message.add_reaction("❌") + message = await ctx.channel.fetch_message(message.id) + if message.content != "" and not isinstance(ctx.channel, discord.DMChannel): + await message.clear_reactions() + #Adds the requested movie to Bedre Netflix - async def addMovie(self, message, imdbId): + async def addMovie(self, message, imdbId, editMessage = True): if imdbId == None: self.bot.log("Did not find what the user was searching for") - await message.edit(embed = None, content = "Try searching for the IMDB id") + if editMessage: + await message.edit(embed = None, content = "Try searching for the IMDB id") + else: + await message.channel.send("Try searching for the IMDB id") else: self.bot.log("Trying to add movie "+str(imdbId)) apiKey = self.bot.credentials.radarrKey @@ -81,13 +88,23 @@ class BedreNetflix(): r = requests.post(url= self.radarrURL+"movie?apikey="+apiKey,json = postData) if r.status_code == 201: - await message.edit(embed = None, content = postData["title"]+" successfully added to Bedre Netflix") + if editMessage: + await message.edit(embed = None, content = postData["title"]+" successfully added to Bedre Netflix") + else: + await message.channel.send(postData["title"]+" successfully added to Bedre Netflix") + self.bot.log("Added "+postData["title"]+" to Bedre Netflix") elif r.status_code == 400: text = f"{postData['title']} is either already on Bedre Netflix, downloading, or not available" - await message.edit(embed = None, content = text) + if editMessage: + await message.edit(embed = None, content = text) + else: + await message.channel.send(text) else: - await message.edit(embed = None, content = "Something went wrong") + if editMessage: + await message.edit(embed = None, content = "Something went wrong") + else: + await message.channel.send("Something went wrong") self.bot.log(str(r.status_code)+" "+r.reason) #Returns a list of no more than 5 options when user requests a show @@ -140,6 +157,10 @@ class BedreNetflix(): await message.add_reaction("❌") + message = await ctx.channel.fetch_message(message.id) + if message.content != "" and not isinstance(ctx.channel, discord.DMChannel): + await message.clear_reactions() + #Adds the requested show to Bedre Netflix async def addShow(self, message, imdbName): if imdbName == None: diff --git a/utils/eventHandlers.py b/utils/eventHandlers.py index 77a3bed..491846b 100644 --- a/utils/eventHandlers.py +++ b/utils/eventHandlers.py @@ -50,16 +50,26 @@ class EventHandler(): imdbID = None else: imdbID = imdbIds[moviePick-1] - await message.clear_reactions() - await self.bot.other.bedreNetflix.addMovie(message, imdbID) + + if isinstance(channel, discord.DMChannel): + await message.delete() + await self.bot.other.bedreNetflix.addMovie(message, imdbID, False) + else: + await message.clear_reactions() + await self.bot.other.bedreNetflix.addMovie(message, imdbID) elif bedreNetflixMessage and not addMovie: showPick = emojiToCommand(reaction.emoji) if showPick == "none": imdbName = None else: imdbName = imdbIds[showPick-1] - await message.clear_reactions() - await self.bot.other.bedreNetflix.addShow(message, imdbName) + + if isinstance(channel, discord.DMChannel): + await message.delete() + await self.bot.other.bedreNetflix.addShow(message, imdbName, False) + else: + await message.clear_reactions() + await self.bot.other.bedreNetflix.addShow(message, imdbName) elif self.bot.databaseFuncs.hangmanReactionTest(channel, message, f"#{user.id}"): self.bot.log("They reacted to the hangman message")