From c565e41a4b5f8ca03a3ea795b02c160bbe4f5132 Mon Sep 17 00:00:00 2001 From: Peter van Arkel Date: Tue, 16 Jul 2024 16:49:32 +0200 Subject: [PATCH 1/6] Prepare jeeves repository for refactor. Removed obsolete commands. --- LICENSE.md | 4 +-- cogs/games.py | 11 +----- cogs/misc.py | 10 +----- help/info.md | 3 -- scripts/emojivvdd.py | 85 -------------------------------------------- 5 files changed, 4 insertions(+), 109 deletions(-) delete mode 100644 scripts/emojivvdd.py diff --git a/LICENSE.md b/LICENSE.md index 6d6fe21..24e2877 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2022 - Peter van Arkel +Copyright (c) 2024444 - Peter van Arkel Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file +SOFTWARE. diff --git a/cogs/games.py b/cogs/games.py index ed1580a..b4b4644 100644 --- a/cogs/games.py +++ b/cogs/games.py @@ -17,15 +17,6 @@ class Games(commands.Cog): self.bot = bot - @commands.command() - @commands.guild_only() - async def bingo(self, ctx): - """ Maak een babbelbingo kaart (staat niet altijd aan) """ - name = ctx.message.author.name - bingocard = babbelbingo.bingo(name) - await ctx.author.send(file=discord.File(bingocard)) - - @commands.command() async def roll(self, ctx): """ Roll the dice! @@ -68,4 +59,4 @@ class Games(commands.Cog): async def setup(bot): - await bot.add_cog(Games(bot)) \ No newline at end of file + await bot.add_cog(Games(bot)) diff --git a/cogs/misc.py b/cogs/misc.py index 500a1d2..a63bd18 100644 --- a/cogs/misc.py +++ b/cogs/misc.py @@ -2,11 +2,9 @@ import discord from discord.ext import commands from logging import getLogger - # setup logging log = getLogger(__name__) - e = discord.Embed() @@ -17,12 +15,6 @@ class Misc(commands.Cog): self.bot = bot - @commands.command() - async def hug(self, ctx): - msg = f'Jeeves geeft {ctx.message.author.mention} een grote knuffel' - await ctx.send(msg) - - @commands.command() async def eirik(self, ctx): await ctx.send('Deze vraag heeft Eirik Fatland al beantwoord in 1997.') @@ -34,4 +26,4 @@ class Misc(commands.Cog): async def setup(bot): - await bot.add_cog(Misc(bot)) \ No newline at end of file + await bot.add_cog(Misc(bot)) diff --git a/help/info.md b/help/info.md index 5d81b31..b79a2e7 100644 --- a/help/info.md +++ b/help/info.md @@ -3,9 +3,6 @@ Om te voorkomen dat mensen een linkje posten die direct een confronterende preview kan geven, staan embeds uit in sommige kanalen waar daar meer kans op is. Dit zorgt er helaas wel voor dat GIFjes in die kanalen niet werken. Door Jeeves is het toch mogelijk om het GIFje te laten zien, zonder dat confronterende previews van links er ook zijn. -** Flair ** -In het #rollen kanaal staat een bericht met daar onder emoji. Als je een voornaamwoord of andere flair rol in je account wil hebben, kun je op de emoji klikken en dan krijg je de rol automatisch. - ** Extra informatie voor het !roll commando ** - Simpele rolls diff --git a/scripts/emojivvdd.py b/scripts/emojivvdd.py deleted file mode 100644 index fcbc5dc..0000000 --- a/scripts/emojivvdd.py +++ /dev/null @@ -1,85 +0,0 @@ -#!/usr/bin/env python3 - -import time -import discord -from discord.ext import commands -import sys -import ast -from ..jeevesbot import env - -## Standalone script for emoji-vvdd - -# setup discord.py bot -intents = discord.Intents().all() -client = commands.Bot(command_prefix='!', intents=intents) - -if len(sys.argv) >= 2: - params = sys.argv[1:] -else: - print("Missing parameter input.") - -async def score(question, score): - e = discord.Embed(title='Emoji-VVDD', color=discord.Color.green()) - e.set_author(name='Jeeves', icon_url='https://cdn.hippogrief.nl/jeevesbot/jeeves.jpg') - e.add_field(name=question, value='\u200b', inline=False) - e.add_field(name='Hoogste score:', value=score, inline=False) - e.set_thumbnail(url='https://cdn.hippogrief.nl/jeevesbot/logo.jpg') - return score - -async def run_script(params): - params = params - channel = client.get_channel(729667183126511617) # vvdd 729667183126511617 # tech 790908319005933598 # test 749399756752814105 - emoji_numbers = ['1️⃣', '2️⃣', '3️⃣', '4️⃣', '5️⃣', '6️⃣', '7️⃣', '8️⃣', '9️⃣'] - question = params[0] # string - answers = ast.literal_eval(params[1]) # list - number_of_responses = len(answers) # int - e = discord.Embed(title='Emoji-VVDD', description='Klik de emoji beneden dit bericht om te stemmen op het antwoord wat bij de emoji hoort.', color=discord.Color.blue()) - e.set_author(name='Jeeves', icon_url='https://cdn.hippogrief.nl/jeevesbot/jeeves.jpg') - e.add_field(name=question, value='\u200b', inline=False) - for emoji, answer in zip(emoji_numbers, answers): - e.add_field(name=emoji, value=answer, inline=False) - e.set_thumbnail(url='https://cdn.hippogrief.nl/jeevesbot/logo.jpg') - message = await channel.send(embed=e) - for i in range(number_of_responses): - await message.add_reaction(emoji_numbers[i]) - for i in range(24, -1, -1): - time.sleep(60) - message = await channel.fetch_message(message.id) - - values = {} - for i in message.reactions: - itervalues = {str(i): int(i.count)} - values.update(itervalues) - max_key = max(values, key=values.get) - all_values = values.values() - max_value = max(all_values) - highest_keys = [key for key in values if values[key] == max_value] - - if len(highest_keys) == 1: - max_key = highest_keys[0] - hoogste_score = 'Hoogste score:' - elif len(highest_keys) != 1: - max_key = highest_keys - print(max_key) - hoogste_score = 'Gelijkspel tussen:' - - score = (str(max_key) + ' met ' + str(max_value) + ' stemmen.') - f = discord.Embed(title='Emoji-VVDD', color=discord.Color.green()) - f.set_author(name='Jeeves', icon_url='https://cdn.hippogrief.nl/jeevesbot/jeeves.jpg') - f.add_field(name=question, value='\u200b', inline=False) - f.add_field(name=hoogste_score, value=score, inline=False) - f.set_footer(text="Je mag blijven doorstemmen, deze tussenstand zal niet worden bijgewerkt meer verder.") - f.set_thumbnail(url='https://cdn.hippogrief.nl/jeevesbot/logo.jpg') - message = await channel.send(embed=f) - - await client.close() - -@client.event -async def on_ready(): - print('### Active with id %s as %s ###' % (client.user.id,client.user.name) ) - activity = discord.Activity(name='!help', type=discord.ActivityType.listening) - await client.change_presence(activity=activity) - await run_script(params) - -if __name__ == '__main__': - client.run(env.TOKEN) From 1fc1ac5feb8cf3461d236fc8f5ec879155045587 Mon Sep 17 00:00:00 2001 From: Peter van Arkel Date: Tue, 16 Jul 2024 16:52:04 +0200 Subject: [PATCH 2/6] Update LICENSE.md --- LICENSE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE.md b/LICENSE.md index 24e2877..770d075 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2024444 - Peter van Arkel +Copyright (c) 2024 - Peter van Arkel Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal From 9fd6701f53299cc2801052cfcedc2552fcf6e26c Mon Sep 17 00:00:00 2001 From: Peter van Arkel Date: Tue, 16 Jul 2024 22:58:18 +0200 Subject: [PATCH 3/6] Removed unused parameters of the FLAIR cog and related code --- jeevesbot/env.py.dist | 3 --- 1 file changed, 3 deletions(-) diff --git a/jeevesbot/env.py.dist b/jeevesbot/env.py.dist index 80ef7c6..68a3025 100644 --- a/jeevesbot/env.py.dist +++ b/jeevesbot/env.py.dist @@ -3,6 +3,3 @@ TOKEN = 'discord-bot-token-here' ADMIN_ROLE = 'role-to-exclude-from-gifbot' PREVIEWCHANNELS = [add-channel-ids-for-bot-to-work-in] -BOTCHANNEL = [add id of bot channel] -FLAIRROLES = [add list of role ids to correspond to the emoji] -FLAIRROLE = [add id of flair separator role] \ No newline at end of file From ceed2ad105038d0279d871d440f3ae20279c9bfc Mon Sep 17 00:00:00 2001 From: Peter van Arkel Date: Tue, 16 Jul 2024 23:39:39 +0200 Subject: [PATCH 4/6] Remove all code for babbelbingo, also remove requirements for this code. --- cogs/games.py | 2 +- help/help.md | 5 +- jeevesbot/babbelbingo.py | 84 --------------------------- jeevesbot/files/Overpass-Regular.ttf | Bin 116608 -> 0 bytes jeevesbot/files/bingokaart.png | Bin 33533 -> 0 bytes requirements.txt | 3 - 6 files changed, 2 insertions(+), 92 deletions(-) delete mode 100644 jeevesbot/babbelbingo.py delete mode 100644 jeevesbot/files/Overpass-Regular.ttf delete mode 100644 jeevesbot/files/bingokaart.png diff --git a/cogs/games.py b/cogs/games.py index b4b4644..4f03fc2 100644 --- a/cogs/games.py +++ b/cogs/games.py @@ -1,6 +1,6 @@ import discord from discord.ext import commands -from jeevesbot import functions, babbelbingo +from jeevesbot import functions from logging import getLogger diff --git a/help/help.md b/help/help.md index 1353724..3d452dc 100644 --- a/help/help.md +++ b/help/help.md @@ -3,9 +3,6 @@ `!roll ` Rolt dobbelstenen voor je! De standaard notatie is xdx, maar ook ingewikkelde rolls zijn mogelijk. Zie `!info` voor meer informatie. -`!bingo` - Maakt een Babbelbingo kaart voor je aan. Deze optie wordt doorgaans alleen aangezet tijdens digitale evenementen. - ** Links ** `!youtube` `!donatie` @@ -14,4 +11,4 @@ `!organisaties` ** Misc ** -`!eirik` \ No newline at end of file +`!eirik` diff --git a/jeevesbot/babbelbingo.py b/jeevesbot/babbelbingo.py deleted file mode 100644 index 9d4c77f..0000000 --- a/jeevesbot/babbelbingo.py +++ /dev/null @@ -1,84 +0,0 @@ -#!/usr/bin/env python3 - -import gspread -from oauth2client.service_account import ServiceAccountCredentials -import random -from PIL import Image, ImageFont, ImageDraw -import textwrap - -# setup gspread -scope = ['https://www.googleapis.com/auth/spreadsheets', 'https://www.googleapis.com/auth/drive'] -creds = ServiceAccountCredentials.from_json_keyfile_name('jeevesbot/secret.json', scope) -gclient = gspread.authorize(creds) - -# load babbelbingofile -def babbelbingo_file(): - file = gclient.open_by_key("1zdWl17fhdT2P96ZgjSwB_2wsCHi_ZVA42JroX5d1ylc") - babbelbingo = file.get_worksheet(1) - values = babbelbingo.get_all_values() - list_values = [item for sublist in values for item in sublist] - questions = random.sample(list_values, k=24) - return questions - -def make_bingocard(name, questions): - image = Image.open('jeevesbot/files/bingokaart.png') - font_name = ImageFont.truetype('jeevesbot/files/Overpass-Regular.ttf', 13) - draw = ImageDraw.Draw(image) - wrapper = textwrap.TextWrapper(width=20, break_on_hyphens=True) - box01 = '\n'.join(wrapper.wrap(questions[0])) - box02 = '\n'.join(wrapper.wrap(questions[1])) - box03 = '\n'.join(wrapper.wrap(questions[2])) - box04 = '\n'.join(wrapper.wrap(questions[3])) - box05 = '\n'.join(wrapper.wrap(questions[4])) - box06 = '\n'.join(wrapper.wrap(questions[5])) - box07 = '\n'.join(wrapper.wrap(questions[6])) - box08 = '\n'.join(wrapper.wrap(questions[7])) - box09 = '\n'.join(wrapper.wrap(questions[8])) - box10 = '\n'.join(wrapper.wrap(questions[9])) - box11 = '\n'.join(wrapper.wrap(questions[10])) - box12 = '\n'.join(wrapper.wrap(questions[11])) - box13 = '\n'.join(wrapper.wrap(questions[12])) - box14 = '\n'.join(wrapper.wrap(questions[13])) - box15 = '\n'.join(wrapper.wrap(questions[14])) - box16 = '\n'.join(wrapper.wrap(questions[15])) - box17 = '\n'.join(wrapper.wrap(questions[16])) - box18 = '\n'.join(wrapper.wrap(questions[17])) - box19 = '\n'.join(wrapper.wrap(questions[18])) - box20 = '\n'.join(wrapper.wrap(questions[19])) - box21 = '\n'.join(wrapper.wrap(questions[20])) - box22 = '\n'.join(wrapper.wrap(questions[21])) - box23 = '\n'.join(wrapper.wrap(questions[22])) - box24 = '\n'.join(wrapper.wrap(questions[23])) - draw.multiline_text((95, 280.5), box01, (0, 0, 0), font=font_name, align='center', anchor='mm', spacing=8) - draw.multiline_text((229, 280.5), box02, (0, 0, 0), font=font_name, align='center', anchor='mm', spacing=8) - draw.multiline_text((363, 280.5), box03, (0, 0, 0), font=font_name, align='center', anchor='mm', spacing=8) - draw.multiline_text((497, 280.5), box04, (0, 0, 0), font=font_name, align='center', anchor='mm', spacing=8) - draw.multiline_text((631, 280.5), box05, (0, 0, 0), font=font_name, align='center', anchor='mm', spacing=8) - draw.multiline_text((95, 399.5), box06, (0, 0, 0), font=font_name, align='center', anchor='mm', spacing=8) - draw.multiline_text((229, 399.5), box07, (0, 0, 0), font=font_name, align='center', anchor='mm', spacing=8) - draw.multiline_text((363, 399.5), box08, (0, 0, 0), font=font_name, align='center', anchor='mm', spacing=8) - draw.multiline_text((497, 399.5), box09, (0, 0, 0), font=font_name, align='center', anchor='mm', spacing=8) - draw.multiline_text((631, 399.5), box10, (0, 0, 0), font=font_name, align='center', anchor='mm', spacing=8) - draw.multiline_text((95, 518.5), box11, (0, 0, 0), font=font_name, align='center', anchor='mm', spacing=8) - draw.multiline_text((229, 518.5), box12, (0, 0, 0), font=font_name, align='center', anchor='mm', spacing=8) - draw.multiline_text((497, 518.5), box13, (0, 0, 0), font=font_name, align='center', anchor='mm', spacing=8) - draw.multiline_text((631, 518.5), box14, (0, 0, 0), font=font_name, align='center', anchor='mm', spacing=8) - draw.multiline_text((95, 637.5), box15, (0, 0, 0), font=font_name, align='center', anchor='mm', spacing=8) - draw.multiline_text((229, 637.5), box16, (0, 0, 0), font=font_name, align='center', anchor='mm', spacing=8) - draw.multiline_text((363, 637.5), box17, (0, 0, 0), font=font_name, align='center', anchor='mm', spacing=8) - draw.multiline_text((497, 637.5), box18, (0, 0, 0), font=font_name, align='center', anchor='mm', spacing=8) - draw.multiline_text((631, 637.5), box19, (0, 0, 0), font=font_name, align='center', anchor='mm', spacing=8) - draw.multiline_text((95, 756.5), box20, (0, 0, 0), font=font_name, align='center', anchor='mm', spacing=8) - draw.multiline_text((229, 756.5), box21, (0, 0, 0), font=font_name, align='center', anchor='mm', spacing=8) - draw.multiline_text((363, 756.5), box22, (0, 0, 0), font=font_name, align='center', anchor='mm', spacing=8) - draw.multiline_text((497, 756.5), box23, (0, 0, 0), font=font_name, align='center', anchor='mm', spacing=8) - draw.multiline_text((631, 756.5), box24, (0, 0, 0), font=font_name, align='center', anchor='mm', spacing=8) - table = str.maketrans({'(':None, ')':None, '/':None, ' ':'_'}) - image.save('jeevesbot/files/generated_bingocards/' + str(name).translate(table) + '.png') - -def bingo(name): - questions = babbelbingo_file() - make_bingocard(name, questions) - table = str.maketrans({'(':None, ')':None, '/':None, ' ':'_'}) - bingoimage = ('jeevesbot/files/generated_bingocards/' + str(name).translate(table) + '.png') - return bingoimage diff --git a/jeevesbot/files/Overpass-Regular.ttf b/jeevesbot/files/Overpass-Regular.ttf deleted file mode 100644 index 0deeda57a8ec3b1ebf4637644060891d382c2d5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 116608 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 S%pMw}M^Fo4^U9&{_x}OT3opn3 diff --git a/jeevesbot/files/bingokaart.png b/jeevesbot/files/bingokaart.png deleted file mode 100644 index 5ca3687c80dfe8535e70321e8f52534658eaf6ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33533 zcmeEt_d8qv`@dGvnq6qA(MhR2YsG5qz4xYeZ9-_x)~->T+B1n2dla=ttOz1#ZLx_J z;gi?<`)_=I$aP;i*E#2UKJVu}ANS*Y*Hl-aB4;2cA|j$vQk2&wBDy_8L`1B4my~dY zGM>GWAntuuH1Z-MqImS*?-o&J_7lRzTVC1*LZ|L*nSKEBNK zFMPmrr|`>dNT{d(uP@fpy~$JTq3jGKqkBWeO1^0q$YbA5Ng*MSu3jf-HuXQj{-le6AU=Pwq#_7W>FWQs^NiJym>{U{SKT5A zvb%(h5`7`Q<4h30Z-ojG#4^$Ue~h3Kz(ay!NL^6&YQ-Op-_!>8*k8Dts+oXPlcwB(>CFkV20=66Uk7o=oe-mbrf^ zj-yVYpmo-LjGmyvttpk~m_N!m9lHJAXOk*)sCGCWT;#qlS2V1FQbM--o^gCo8_gpD zU8nh&lQ<@qvvOS@D_@M@K;O^s;`{KQLG>IfpuB)?t)oj+OnXSH{x~la(31X98BHoT z|3DzXM>75F^hE}*&(8q&;VwvBKX#8hC#0oSHT~#e>L{t(d3Bd3eq087ZHknnLZaiv zqt2eZPMd83!5MCGe9?cBlo~nzMR*bQfTnq!TE=dCTzvCSVYcq`PE^xe_)Y)?eMU8G z6<%qZmSa4Og2xGW;l2s*j52g+&AC(${^{5U{=!~%_r5vb4BY1@+7d2`@%xSJGs!zy z-mi8un?li=Ex9#^1kK%+TDTkO)XFrmn+(=ZU=aDheS;6Xo$|1YfmTjqg`_ffH;`Ho z!JU#vT5O#+gZzS+qmWhhOJaab@S=ToN%%*^k01Y}T39L``y6z=Hh+?bF-l;SR4H(P zHMlNLU$s@zm-zBofcX~zUt12xiLYuJ%`&d>>sl)#ftB8%bN{{M^_^0PO5mwPPKA(i zwElhFJ7`T(zi-CiH@XI-VCvKYgPBOD;sg=zaV5{2^S7aq3Sse)Spx0k)=wCc%%C<5 zWp7k7UQcbjW7QOS*rL95Ixs1~BCN|vHC4!*XYE$_92fg2{-oi#4hcIg$4uGXj0%J? z*w(@DDStb_YFeL3B!kIZDvD_qb`A0;GdK$nSHA7rQ)FeNG3NkukC8#bwxAecp9bmax?=j65|02{hG1?s&^MgPtjnGVc;+1fZCkV(t%QA8F8x3>=G zn-BO3y@-N@0IiB3Aq@td`7Ob-tiaIYgGPEgl*Z=i!1h0J3euF@T?}@m;`6_@pzrSM zlHOG7*?T9@7?fy$TPgV*fTb>BqQ9LaPNY>T2QG{2cNKbI!Am|-GquC&;Gz$8wovcH z_g{`@BKEb(TrOefg{g!EBB;t=c3ZxwT!F9v>D)ae5fwG-E0c=x}PH#-u9+|(cynjE0XnV;Rm554UZi;HEl{$ z^}v1R*W&Zio`)6-6{up~uFPm5kvz%rN?j9#&9ag!$8yi zjZak4N9dX9oG?4n+?_cRxZ8SQyK#}Rv=lB0e@{7vu*xC9RXPw1@p@_}XsUhcrv9sL zS}U}@dTd{;B8*9l~c0gr`@cnsOPv;-o&1b`eo0oD0ez6OEB#|+4MHRTwhI+(Q zk|CT7Gx}(wfwF2>F29)a8o% za!u)JB?7@)&#*l#xaMuMNfUh8^&sE9)q3xb_vQ>wE7R53nb#WzAQp>x_GHBuMiI0O4U@NZI{e&*wiNd%f+xHDha6MzFM?#luFKatd)f1{I{7wsxr^pLr z0Zm}55qKYnEXh3hnek3+eiaUz?VDw@AoAI^=SLe>L=e z;2abq4Jb!7@vFTn+4Q{a&`4zmo4XJAPRX?fo}J zu|Cr-jy~D3r(j8S8&pU&s+mFRSeW2P9E{Tn4-&#B6X%!sv2JPBlEWgPW)L%Q8RGD} zOusOjU`SQUAfM)9aUn^&*=|(V))u0d1sr{1TCZ#q*aK7Mw;8+bFwF0LpyZkEx72c+ zb2=0nD;aw^EB5dU(-Kx-zsAA85&S3S`}9E!DN=k5TIyV=+j63OBWv=}dn2&@ESPBq zTp6%LBYK@3+o%$id$+V{catV!68F9*(A|frnh>hI%vMRp?ghy9R9obx>>-!}QK|Ot zR+Q;?^0@5Br{Qt&Okj-m0j%9_`aC=DuPu#N@(Dbmp7F7GY$U$wj}g3dG}pp?;jsGT zupWTo?(A5!GVfUyn|LAT9OoA0^InuV((|QZVZ|o3Or=_eFQo_1p9#xf2xoA|*a3%F zM0jN@w6%Jy7t~cA?-Nz@_3io9e}#%-r4W29iL-63tZ0G|t`+wxP>PjNZ}!z-x-YF zUXpjXe@P(QQ8z_))1hFL8tfU|5sKRXzQafXTX2u%aV|PnG75A)645n zo%_y0`hE-ZBITtqSdV)8Lx?jEuMF2xuZn)j0|6(Nmvg~MmBvMXS%-Knihsf1Z?5CI zVP7^eB{v=J&@jx2niKm$CtXY3jGYDF+2BZ*?w?qf<)w0m%GkvrmB(!JV0> zfL5lH&YO!FF93)NkJ=5Q&)UY^99BMB+aUA)`P^X1t)UetUGOqv6STD|e8DX4uhn`Z zRJZak0T>kR_nBAki)W#AT&=N1C`GDwPvu_)zi@{@M&A(J*GO?m+JHL0OWvVXLF4y` z9F-iYL3t-rBOcoeKjRjgiT>t=%96*E75UUBWl z7{M1AAO37OiEYO!AJ0xsm>u(S|^T`jg~1N#as6ULSKE zH1qX^%p(YliO1rrokzRuN6(xFvPDdLokrTyWVW`t?8Ij32vCsR?1>;dSr&}vDC$hF-R@i*1HL)Be9cu(fqL*dyAs|%XoTC68Z6P&v0 zQs}+e!YqMHyYR)HJ(^c=lk<^l`bmTcBa}WIzJLY8x;kgO+mV>5@avqIoN3u8q!TOz zP)AI$_xWG$5$qN>>g(6*xwl{M>5sU$1j3R%CqJ`Ptw%DE{4upnC;!kz^ox*_h~zXl zF(6W!cPAdO+Z*(hE?qe=^N|v$(E+@UgoO%!DcYs;xAo&)_PzsxPa2^>c3ttJm^CLjNnW&zAHB!VZ6$>*K! zSFLY%sm(5LLYp?6@@ndOw&p@D%P94ik6=$I8M7&GpT$+8WRpQ73tjdZePs6j&JT`= zIA(p5wurj78PaRTP>SSOhcXj`4F^}Pdyo}qXHNUkeo}||JO)2judrit5S_KXhyG6DIF} zT5r-f0~s3E6e^)Uc_DZy?ZCJ%#hCs<`o%=7^h9S{Mz;m;z_yIa+md8I53UIAR_0fj zTSX8J@F`#{8+=zP1iy1(L53=!ee6PCLmzKnhf#;+yG=KZ(358Q@>(R$U^%AlXm^Eu zkSvRlL&{<5cnTX4B%EVbxe7;K2(cAkILnC-)T|;Pg*oBFYu&4S- z5*>DuUMpKdzCaK*f%Y%YO~Vr0kvxnLeyr_=^V{u*pLP`&HPHQtWmknzt;?(Wwbw}C zD$Q8Nd|t~P6!W!drV;gSgjWmYg~As@$G%rcrxUwHBWk?ge1DaUab+e$i5I9OEUz6X z2P?L}g{WgZZJ3`-c3~Up$el;d#119fWEI0lJJoF&hPXv-(N<(1SuQn+AvgGVFII4J z`*}nF^XYMhW9uqF^WK!TZJ2*Lme&wZ%?;3e`-wzm4z$7 z9Jy7H`&X0Uu|UKh%io-9Vg(NI{5g`7$f?dnZ$h#CR{k?%L8k-I)u&Zp`_N&;Yp5~! zqVa9>C5$Ts6$$}lL|RTGr6j2XIbMBq9QM$vp;AA!hW}XuO4gb+K9tb8zb@cR*lo=) zR)Fp*`vYk7i}o*qW#dNZZB6S#&ovSvA2@sxL%*+dDKx!9tom6I%3e@kI@?dB^VFMb z_VzhH6eUf4SX+YCXhy1=Mdf+Cq)ywXwsUe6 z{dM$79AYb=8viA@ZxF>^}<3NZw`YRzh9UF`` z_-NKpn+vAzOBJ4q%u^suDHG^E&fXI!&_|e(H+-25Mu-~hkoDw}#+ z`)?RQorEYmjh$pxjA9A{q3AA<$mOm{)+xFNA*vYB-B%n>^u6L7Txk~hT`hLz9&#?V ztmhrD?*QMw{9IFnm$;o8{=YTH8jF@0lF1onJ=6QKyfw^A`xu<`$#U2yUx)YEB~MT^ zhfDALQm%IN?|pigTg?*I7BGuyNtv*t@h-N=>oZ@nymGQ>mUL`^Jc^XxMjdTFWvSU< zqjN?82l`I)EMvj|g0@NJLhPbDrjG}|OdtYx_3d+FUtTm7@3+GHv9Gi;DsXcp%``p# z+XniYu~T(8z3l+z=6*PPH(8N{6YmiiA7&+l^q&D9{B*_Dx<)!b@H}J*ij@2{?h9GQ zWjPzl{dz_~Q^Z4FPkc!5;jLaJf8V97v}E2){A0JD*%Pt*-mljA$do9}49!=xgR$nZ z9d773KKq^qq~p)A8V!*yxMd3rf7>4B-TyR*#^=1ASKI;w^@7RW!CkoCzi0l0b|HWz zvx3xI@O(A)D_Y&dJ>uT`F5)4-9bwInSodUZB(B?FYwQ91D zu140g1}8cpQ5o2Y_<~14L7>qx!IsTzj;;lnM zz-Q3dsp$zEOUMRBkln%#n$r=RlELb}MPI$evxZ}hLbJ+Se?C-y{7_AQ)YRn9=dYEx zSUPrEBCekUR_pYh5uu{Qh`3aFnNX<%#l=0suigCavvi70sIoqMBkD9hRDTGs*O_4o zCAH7Veq*vW7Ek$b!Dy=!fkOb0n!7KiBU35O42naLzIWTl$0AheQ!kdXSjB6@cR_I9 zL-Pa4i5%C4U(ech(@mfwV&t*p`jez2Z&+$}0!svh<10jlZBFed7snvUR&ub(sq3zx zOEaWd;$g#O=C;G1_@COUdGFoGCI*eSJCVC1_X97?P0ZYKs^u+Eax|N!8!$xTGkd0! z)~mBQz@wI2yG-eiJuvl@DW0CEg1E&_NmuV24;21JztN-1N8=_(9S1oRA24yaLPfLP z?$O<@JrAppO6X{(9t+^}EO}tD<2kzvArxyrI_SH?LQ7emSoK{spv-QL!E@Sv>qcg5 z80yM74$Rl&>kQ`4WQ|zqnpX{OOLZT=@YjjIMo-j>EsMSlkBn%{W6Wtha^R`1>k?#P zN_ams?$J_n2EX%Zi+Ug)Re}G_u=la}b}OmN&6utRZJwB50C34-P&vM_ZRW}ZZM8Yp zJl&)2xLJEkE-xmYc*hfH)mk@lBDKBpPN_XIXVg|gZ4&;{Vj!rW;#CglW!&Z_V}=_P zg!Ut|Pn>1~Lau#49oIgCV|UBpDoA3g$8U5sKyR5`uAnw0cGKhK2x%q`_5Gd@voDbs zxc1M?Yd*+w6b2sKJQm9Y&I91DHf=V&5F6&v&o2ZA=I0*PwXrFCIBN= z2QchXsg#0v;9o0ri@i(Qy};@$s4_UA*k++okqZ9_dN_X8cQbEitd85?aj*?F7zN-m z#gC-OBo7$>xf*x}dZ!uiNnLdR4M0Y?U_8+q^@FBiKgwJ3zIV`MP|spLLM68@#n2n= z4ws9W@S(-ltk1z0`+GbWK5S*?1e7qAFh~+$lw-248n^oGxvQ&JYiE@`clhbcfKR5O zoYul}#Th=<;QQdI#EyEO+X;+gn?+Vx!x5+OVtkEZUC+l@(B0bpA*FanjdROOBvT9d zBm0%fHN^e&eQW8p5Dl+Gvb&P4KU_KNsM1;BpxQCu51tb{@$|_J+c32f;`-{+8!pr_ z<5@fW%pZ8uvY1){9$-l_C2=m^&*ye-Sk6%Du!A?c))X**!-zrh%7f0bwl4ltASzS! zWW>CBa+l`tViN;S-EfH@zwv?_5KZ*AUvzl9w~#Y)KZ#XoaBWI~%H|7KnMq7KbRfwyBg}0x6QQddswrNKi(WsvYf*>Iq(7i}1<+;$bjt%30 zVLDA0)DH;M*s)T?#KOtQj7fFtk2o;V9;pJ7qz`GT{q>vqrg_Ir_NSP%Lz=e~qcf*h zPN|u^9sm)SJgsf1e0Fb_jIm zcXc>f+R|NqRMO!xKX~NYABu5XAbyA5+x{Bb{>cP+p^5>6#;!3BYIC>-u-RBC0=(Ql zhAG~6$Va)cQilq0M1qYSH93(k#td}W`YoV}@_nk8o0QrjF zb40dRS3Hpm+$vwr%*eMgEM9L83wNURQ^=!?IwZChBB8vgKj>wi z*JuuMWn2+1oW?Mt%mm;3cWeR=d%AmnL^4wJm=j>ibWZdodAjxdeg>IBdaer9cZQ&o zD%rQPut?6FA=CbZnFq|K8ZSbJ3Rl8t#3ptfScv{NW|`_}>L`zynhAn&zkl(Se%X(i3}ss6%&IQEpkTt@rb+-o@68Y~@Dti_ zS-;$jH#!GX6~#F}h9gBoX0ONmJmMB-^d+zr{($!Gw)}XjmW~lxmt7^6)8T_D84Rx4 z)iU$EdgmMY8iVZpwN#1Y8ez$#J4Ax=ghAJb4$Yi6fJ;<<^7E!ls_JJQoL+F)sjhPq z5^AmcaQD7Da9Kc(js5TKl8TZZbi~uTXG9#dT@0^FtwvcYT(L%TMoXpx!Z!5XIJcg@ zlh|l6VX(Ta)~DYMU`gW)b8CCZOVyW3VLlxhIHF%k53000fnSp{^qi+f1G+2O$-+|0 zm04yHs_V;nJFHcG(|IO)F;DSaf|qr{TY&`*l+-G5Q&p}n<|9{19|;!mxLkSWY$YJS zbIhaz*c4w19A~J#f+n+{%`p&tBj7PfQ-?(`@=VuP_o&S6Bj4|<%*_o@V`hYG#v69; z7~jhIi_hv4yml|9>MZq6m&CV(n4WKCeyw&pq;5iO8g8*XsJbO6G1B&pbg&^wu;J+z zghgzi-o$V%JAyEqmzV2hpn5p9c$?^pa$PD>nc;}&T_S111dEj8NooKQ5d*}r$954zQFI@#A+7{G+2rs;Pbq}DS%lJkRBQ9dG=73RPl=0MOi(^PbVLFSo9Z?qms zdv0;{QiqxC622vK-y_WgU{QQkWp{ia_wqI5c&tmp?dVFoNpYzX129Hwy$(PrA$4@*@ zS)Y0wGd)C7o7)wQBUz)7OXjaUw#K%rgs7u^sR zEhkqW87l>f_pM#%g3qhE2Vj580=$ZKhkP`sp7PJO#Yd!P7>g(?_1Ha!rs_*GT32&> zH#@gMJ>U7gJViXj{eR6R7N}m}RRW3n|lgY9T2ub)vZKPtQ%lnj_;xJMhQWbC-Ee zApqPqs&1^zpFqvv51O@fT=KG9HKG^NbS9b}3g)YjZ2t6(LBN;5n`j_)0);5UbU0@m zxUw4Q$9^=;K+7225<~_3e3SwE8mj(9zkD|H9=-qsH7f_tns#>QIpcZ4D|ex2^)kXJ zv+_LVn;BPQh`3(G8uyvhl;=eN_iCLnw^rkWfw*X&mj!wVMt8+X_ydv#sixDuK$W#o z68G;jAIAWA|G9<$$FRK1v=H~*oW%|U<|iKCpUs0+27S{tByTFJ%(5sSUd~>Om^86# zAFw<8YVgjPf)WP(Xg-XX#Wu$ee3fH5U`agAc+i#4FCjqr;rHFI%b!uUK8_gs#Y zwv9QCMMO!;yrq6D&n#e3Iv`}L|HD0m6F>p;dmalIs4t&dOJ^oi>NH1lN*T5q@6mK# zRkravH$3w?mwAnr(hrS13E+-2VF~KSLHz`GcJnNPuGD3$?#{#|x_x2+eky9aIC}R~ z(n@)PJ2b|6u0L-mZ_&tFs)ZQG^nC5Woy%mfA3VwE1ry-aKZ$i@X}gxPThvCJZb06{BZ|6_ zxkTmTKHRX}(&?;}LIza!oq3xoGo#4+ix~R#c3mDk?ldLG_@*`6e-EbpE}{WqDBgf3 z3@=-CJI*f|GsF+go3Ccbij!zP>EO^_UoN|@*1@oRocm?mg6EBYx$tE`u*YRG|4PPN z{?qT}w1k5sMT_(>MWURGyovdi4Z>`%>k`r{R9^Gy)veNKb9Y{?NoPoa8eCuq{Spox z^6%3IPo_57tU9{Kx1*V*^_0sRywR;I^AvU?t_DNg;th1jdRZvhqcn3*86!DZUIRJ$ zW?Aw5uBgcK{$h5F#ey%J^Hj;`qES9>#6j|6`JUt7b_Ii6@!$0ppvD@}y6>47@@FKN z8L){m5|Yzqi3h*CS*=TQW&1ZSAPgCs+2qG;>M=kbeFt*@n`5?EOyuL=Z@tR6K39By z96p4TC_H*l#mI-2o_0Yg?{)0S>g01l<%^htYBtAK$_fJqcg+#N9ajS-$7ya@r42dN zPlk1lANm`uOnlOd<|jW!g8wm>Vsc5@CDTP4;6Jn-jbU!Dk)|QV68pP}F&@$nOq_~U zR*fzMb?JeL!ogRzMvZ%nI^_)srTLc#5dgcB^H=jKOp+U$_ftVzePyc`$@piD(o8##1-_APN9# zz|C8p!}yh=bW^=bFgHV$WD9j(fc2U_ml^D;pV*~=ohkwMmHvj!cL%daq&d43k!##4?Mw!EP1 z1u0;XUp1d%1J~!O#WwE%ong~WUlmS7s#NyW^xLV?i+g7OcsegX3cD=4S}CQITCgsT za#HadxIq=9#-5IS)0KsB{)+(O6Rp|cEXzR9Y3xw-D{k)N`m=dj=1ba(hU*dDrGH4 z5{*v!rqM|qY^rIwKBocXr(UIgDO|Ju(07F3rW{RF(rN9_!<|%mu>W9Lb_YrdX`m?6 zoSWjk-*z}*Sp$6^+#;G%zPckNIOqmYw?4+Izghg z^!@!TL6ERyU+yCfF?IFMb2?~fh__y2KdVHj4~f!P#d&$qLD$3MVt~81cMV($=l%0F z3z(mAxPWX>g5z(QA z_3w-~hXM6vXjP~{R916g*Q4U;OaSNnd&pwP_d_n6ULJBUY!s68*(lmAJ<#*+1pm~% z^sa?$i0_ZrzT#pX@`24y`rZd^dF!SsyO4RHNv(@fGHnGtR%E`Z$|dx}P85>`A5^9+ zI1Pe1xOY4H-Ht3UB11xcv5@ErA@csufwcd&O7oI&dyKBZ>iQx&oK1~|^F5W*IYC2* zN5^?LBX_z*=XX1@E`m{VkL(U(LQ-)3YFv2UAd}aojg0j2l`}k}nJ+a)(>akejIYve zIuv`HGRQ$!BuJeOLP*Mg9H#%2p3C^nlK)b&jcaLl=b5(&u(Uf%*zq4&+;z14ke80f zJX4~$%(>?5#*6GEHO8I!wMWL{((~TA4A)cNp)6rG8dIP5S%N-*?tz;Av(#aQ1r8gx zmI3ilrR;|?%Odw$^3PX*JT5-RJif+bw<{@+;3+VY)hzcL<5u#3o93Va$JdUx zv~aW+Kw`6{y!3;V_verzX}z7bnF*N^|1O`S*!Kh_KJ2fbae_^s3mcT@IcswkmRknq z`EWg>WDDPI#P@jl{ywHifM%S4?+3M&9BZ1?5lYNqXAq#La%B{6O98>09Xw71C zEv}+0RcP4K-_$MDIj``3En|xx_|Kc?+|;N@$>w3lZ-%(YyzA0tNA!eFiQi&C-aE7G zY~G@ePTQTYeb24%sPLQ6#_)GWwW@T17RGT>{|0*2Mr81qJ3DC>xt!m@PV`3$U;8tK z6Prx$0E)rn4Dsf{c5drfIP$FXatgkxv+ulJC(vez9<1!67NW1AmF09;KfF2deSoZa zw)2hkD^{cb7Ed_HESW5Ruz#)@>+3nh7nSPrlqSv)JQD_>8n((f8x!{*ufVp8P=eFH zJcUu&&Zu~e@D^G*ihnZ?uPO{PU1ws~JF?~TovNT8-VWA*V#Wcgdm9w8=V}xOVzz+{^Om_bh$VLDJ*1XHy^YJ#Q!vLZ*ANY`rvyKM|tBGxWA+LybCy8 zHet_bp`+7k)|k3^(xZY_`{g=U=kVm-tlRx6&hd*<7B&Nm&n*P%uJMJN+)+=f>v73{ z9MQFy&LA5O*PF>#^Al%pETE^_P;1aOUzEz*4Et}HLpy(4#w+a?ynFUXKKOp9RPHr( zp)V9-2T#Ydh`cu|Rx9e?P4woS55WEOJP2kQ@xvdvhx>f$rdkxMKS@R$^#u;Er5c#0 z&Mg}3zobr+G5)c&f)~Fie|9leXV^Bh`L9^Ll8B+laHy3Lg{S}1AZ;<0J@dowKy^Y(>gk5@SB znO^eKelfzbp^_hpSju?Xs8%83sliW*!5k;uchTQ>T1-ruSAHmc$k>+H z>k8kSJw-Jh#6+EVw+AEQ?Xndcov&P$s6D+Ci0yvYNUn7v-BSVx`CEK^j$#q)#nNJf z-eW@z^+sjCgG&X)v>jga6ADmBTRFXNjt69?LjkoaSxSc$+`pDGJJypCUy)5SlY>P9 zs1QRTlfRnji{M)!RYuqGyQm?$eRrSID&zW3PO_(-`>fVq{qFNQFUkh&&Asuwy4SC4 z+7j=WHAwaH=997P{Mj@1wSNWfW}FDj49GdS0U2(p-%WQP(Id|LiSBQK4HNhy^!50! zr^Q^$%X?&*F`k^oOs||62mXCf8Ld??b7Nv6WS`UpYHOVW{mQys0a!G;(a-Pwes)() z80^MpYVr8L3FD(zH$bUh7Vd*W4}StyKXUzCo7^}EYeN<}u9J};i<8S%LwGM_)7_?V z!8O93)#l}LzrGhGvUOZQ`z=BGcAC`E!K0buZ_vM9lX_26v^~eVJC`b~<#T< z;z^i&29xk;>w-N+p69f{3Mn)(h9#~S7aZ?*z*`i;@>FE)_4~gI&X|aypp(-n2OeGv zktM*`vu_f|<7!7UWFhLLF8hCdU9ica9BEN>O*@0pPPl_eOo#Za}+e4KK%ZoroM&X5x)ws}5JP@F}; z#evvad5MHXK@k@#$M!kGm$3B^L2EK8e_li<{ekH(Y;eiRGeV?f! zWcdt3Zsn(CvX%jC0^!i32Z36fyiP4zYEqir*)KSJs?}d{bcSI$zt9+Rjw`k3|PlYYt57&+43+`)XnSkM2G#j7lDCj&Ba&@-F&T7JtC8(9*;+8rWKu z94;@JJ}zChB8KsVD(ApryY)|DOslbvI9xnA#Gh&nNUBU@d*Liq!ybL~1Q4$!boPEq z9P`8?0UP_iU7WUF1ijYFIb9eP$G0mh5942!&`Q%ljfbN?h`g@VO zo1cxLZ4$^ks>e;`fT@gwovll2U4FspZBR(HOGGT;OO=0s69f=YkV@qvWQC0$Ut~RBG9z8cScqqQ+_l4Q<46yqO zYJ8%&`a2)7-Om!p-|UsTO309S@r;;hWu;1T6B3{#=frn5Z1M*dsBkI3Y)mubK>fMG z9L0{-@(G$Jkk%xSwb1vp+m4UGV>ttz3i+iQNv+K1|L!=NTdc)}!A_&bK*yjAsST>P z(`7__1sJoMga z%{P^v121Jl>*_1TG__Fwp{-H(8Wte1)n;Io2N(TU|8>(J>)Tm?0h_bkk7$S&REwjw zj>@Qfr8O3I`qr{!=wk7yMeD_klTSJPJhDqOAT^8`L!K}2^7@64+;qIFU$Sea%gZ$L zNkPPAP3u$YcN}1K)1X74tqIl>o6=jD^d6cd3p0<(l%$zT#%?kTzgz|gv=gV5fm>B% zBUpq+mP*l!?qD44IC;$}qrkfN?pIaW68p`sh%gwlWVDG8BIknEVDbLe(qsO@Y{+qg zHMrgw}e=P=T0I-Atc< z-$A2@0~sBvXLsr=IZY?l2d z!~Q;O)Q(L3MC1@rc?--Mmv|bM13KkBHk(Vx(BB`EY_}N1Jx|ss_!~3}a{_gdI1Fxn z7g!}wDc-g2JOOMzZLns_w>4Ab{PvXOw^aSB{*;aY-KUFQ54`esI3Im1>C6pgy%D+{ z@k}?pCKc2kS?Z5)LKeDL89oRpo&RIfnCVZ;1G`Fwk8WYDTX#>hitfMM50>t@xh6aG zb6XU+>aMN-QdXAQuhC9Cy5C+$Y*K7bvRkcS65xATHNYh~PhGITl(o;33|YjL*tDi8 zXA39x3hS1R8RHB3zaEX8Z01Gy?#^dkuM(Q}ISx2UEHLr<&!YrITsleztPjr=5`S;< z?{-`&n zy4eRC52Y&!j6}pnL>pJ})LXm4sdrZO=*|{FX-V<3%cby@j{edi7UnFD1i*1pqs>@n z80Tttue*-i&Q==aSnO6TCVyhbR>eceb$&WXc2$_3Ca zcgeyjUVo`%#E}LpVcov0nSJ(YrpO^!vPD7UQEYuN8;7`ZpANip+jsSs1R+MuI>FF% zn**Y7xRE8~(KlHNDl$L7z}3~iwg_4wv2Qm8K`KZZ$-5I2cx+42DaqrveUegx;+O_* zbZJM7LH71?d%VCiQ>Ydt)z-*on~$7|#Eml)~-yFph1W!OIQ-P>qzgAjAa$Nm^f8x|a4XHCQ-Can zlc!zK#QdlNamw%%Pe~~XX?)t*X+1%z{h-WH#1fdPjFQxcnC3iF=148UBL{sJy+i^) zN9+N6Yk*YHdX=YsRlkNm$C0LvZ^iLnzXYyNJI2T6)8SBK5w6dq5O-}IwaPHH-iDD< zu1D99jenCAx2Im_`#(Qur6QqT$nNU94b>R;y$y5mY)QR?7#x)|*Pus+Qus!{@+^58yr zIKdMAW$V82e;6qNT9EIHZP$3C7OWdDRgpG#OW1uz9wO%cOO+89*nCz~I?P;wPu5N8 z5i!TA@km5(6MFj56!frxe4c3+)HDWC8Unacxl&Ry<(N}RWDo#tFc||=2UE3wJRF3F z>7V$#nO2_OKbI= zqwn7S9be09ps=_Nf~E4U{7O@)nvf1cI1#?1AvCbhB#-a2**b}Tn^X#>7U#XLPPbxW zD5R3FM4TS$Co|l$%XM#FiJd6~d$-I;3E8-PP^Vi7jW+-dzD5oidp)SXR;rB(lG`PI@$OqT!m*sjNGS|vXJ`x^SnY9dvdae~6eTA}A}WpDnLNPA@-Yq38t5N;hiS^@ zD~}4L;NAIMV=cWH`HIkIz9tp}N0`9Wpq!XSo42-3w#6?`&o%hyQL_rcEs;>tRt>R%M00>Qo6Tgh|7dMNU|lD88?vfoWB5%j8e_)=K@?vSO9wm-*=) zt!MkMDm$-Q#ui9CB4ek06VbjXMEEehMPQ{?eHbAnke=MY=0s+BT?@+3=6#$xO`HV5 z{hW;?e~xmB-&w6N@v|C=c-~-XepuuPDe8~p7@j`3J0!MX?zAI=PHebz_+I7s+^V9a zK!j3AN7=BUQ!7z7+Gc3dSVAf82{)Ae@}L5KpO2Sh|vdhfk=si7o6Dbk7500E-(5JCh(LJRDN|M%^yy)Vu<4Go+c(#&;HCw!hb|U%_%EjMk{b`Va(;R*><+>scg8bXHZlcwM zHdo=TnZvFcM|8OG(`zQxFQeIilM`H9X76+pmyxLN`e6sYvOU!kwBmrKyhhNdVo35) zMPgZYq2H@;jdJIAVKXk%p6O!`mu=f4<4w33tOk^p8I39*}_#qmhBnXc_n&-WChfHFl1IvAW%s z0?d7l404Iw-|xndw4X77^Z8`r z&Nce+*5BP9GOynY6Zq-h77mftuh7jcE?UOr5-#c0uRbz2Sbj!bJg z3(_cJNhFL3Bxh#o6YSR-q}k&P^Y7c`2dTjqhDukn*6uuoF6CS+(B1Wat5;mGj`k`_ zZkQX|Y{YJ;88&i{aBm-P31IS(Z)pPz+%E(Fd?A_$CX=~~Ep3UF5&kld${t@EyCyi# zdZk#lZ75SV#hx}#fV7A9>tkQIFYl=AD|H@O_E9&=tLGUtnBQZ84lp%98RV}LdYS-1 z?Mc#1*StBdd(b}3Zy>IeP6<1x`-^VvoC(a7Aqo!$ZjrVI!mImtI?k$SDOU2A8_?v@TlPJ1`_<>E@N+Dvbl?h!%dmp&bX-OW*hG+h@o;v zKE{1z(6O&OU$xH5(k8LxMR?=J>A4!MZi+7?h-|~yHzdnb{sI5$H~{S(*4V1{rc@kc z!*)z#O?q+Hk84<&S7ERI%_KQwy(J!N%>nlV3yY7s@ByT2zv<@5M5}`q7e)LK_H%{6 z?>{2Vm`|!Hr%MA7rSoyE8?5}v8sLmmQnaEcl4mD z1APjMhc08jSAm3|Z`@i8=-&>K4&kG*-ow z>cLVH?wAO{SGOH6a9vJj#@n!#*PB}P)VkOkaA`Sqk4oN1o;TF0)Ka9)1Yj_B#YA{~ zSC9ztw4_E5&za29VewP2eGcyA!;L35{jmnmaG$RF-O*F;Rnvd2Tx^y`QTz?vHb zszNzk;cM6fYktPeWb5DW>jp4*26R#&?7&|!TX=yp`@uWBYn4k`i&}r z7xN8VzM`1<$x20&>)-rA(wrOxBgqHAR4t7Z?>G<(FoK2c|6p?_75tE^{xeN#?gvEb zOY@VV`r*+ZwXJy9^mHaD`{lCn#9(WS;C2;s6SwL*%6}{2h^bn5z^vD^mqJJ)hGcWT zYT4ilqV33}$~D(>-~MQ@x;-*CB0luk;Haa#C=n{OeZx^;87XOX{@rFFTc0HMFkFt- z?lSaYC+2SG&NaU7>zbPrT_KbyS$QUF(LMi`#Bk_QT>q!Ozy6%@xWlchD~@Ll1sXWo zfhjNthusuk`JkO>mB4Ny>SPz&31DQni6XKMA_sP&!hi;b<9n~U+`{^)nnXmy?@D9L zJ${QSmqqx?<(ioMVq+!e~-i z1nN2LCV$7Dw?rRM6-#r#4QbnbF8GjFw6$M>MkZT2zMr;EkW)XZA<>rdc8mF1y#PP@ zL6>$f@nX`aheT=1Hk)|oR`+3+5$z;wW5{8lIq?pDqxWNm?6+)$;op<~0yB_{EFj{L}$hb5V5`=Uh#k zTD=+fw#(2=)6$g9Q#-)fb|>`LpN%9D+C$pGkR{Z$+RODNpimM?>L0;)4@~+H?UFc~ z)Pr_7_JS1mb#ydSxx9?=LnYVl$us5W1966A?i^t_FHs6CELdC=kf*sv^v`rdnG%CC zJlEy54ZGg(j}l@%eXwC!DTYae*k9i+RS0U-UXotXsP{AMS%*lJ>fB07eR34;eG5Kh z`*Lqd#(KC6-~oMEfdzaSGLV45SvVFC94hVROGa25QZi7jyzbw#r0f1Ny@JjxAFIFN zUdi&+T?{!-i?Hy+hq^B?hgx+O3d<6Ve+)oX&XfotGlsNt`?Tnj$>u0t!@?qO_&4)V$!yF_N{bjvnKIt2+>f3 zzwQc%Bfg(otrbPbw&4Ior6yBO#?Ma8F;kto`|?rM&s#WOOygF=BWC1`UpfF(>-Ruw zCL9%CLn)7gcQU572hd&*I`sC*B~nb*H2_W1^UvE{0wO9Ig$|xw#IIO+$jmlJU9-fW z>^N|yoLaZMNIgfv-TGi-2gIQW$Dn)Ao`LlA6EJ4w4O^GXD-&~>OJ;*fw^AR$8p#BU zJx1RjYDjH`2wMxabsmnJ?N$c>a#y`2yOc>B zQ@p8hAdh^AX@RbP5wG>#`f~h&x=Zl;woMVX4>MGZ{RjOMhkqVR_^!%oX_*fHKCs0G zpgj-zf2{PEc2ge04n?NTqKFG_t1Y^#GtK#k!>w{L-=F5qixu&-)3!?lG4iGgMhi5+L&->Mc)lQx5gfBi!d08+%$ z)!~|`$r>-B>6C4?*H(~Oqfa8f$kHIEbbTfC7MsC^%v|OfuN3bZjA!pq~gE z3rNq*Q@^#4t|AVMGn#%dIYobdCF?^-2u#dNme~0G(Cai)<(<|s1qq8o)U&D?bl{SK z$8cV(jO|I+v2VAu@TQ{0lK(iVd4>Lp+&m{@71+&|lKLVyH{atIv^39HOw#+$NM4ke z{ri>eEpVxR$CvfC!X&GNg>uSaG>kKG2{rs=9&z>^R%xP&_LGU?;UXpWqt1ikjax?@ zWiv8!-g)OF+rz*bAz?7vkH%X~_r4|z6)a}^yn24)tC^7WVoZqLFykw`Ji|(VX!W7B zhTw~5C&jqD%mk=SUbb}>kIp`J$mBN7bS7=LU4>Ua79O`U9eP(WDt><18q1ntSgEHs z!uFIeB6WL22oLq_D04CiMUYHuFkgN7u}0>L;sLYj71m$!EH z_w?N5#GCg!1S3}86gL7>*zuMa$(T|-$DR`y85*x;nlu4dcL^TqE6)#5DeSLg+jkx} z^&gNuuD8IqJ8IOv&a5`gBi`|=RJnZusoCJ#`Rx7s;qzsUqY(2zm&2Ww$q`|z5AONh zEiYHU?=f9RB%(f7_{O^qc=q`PKUdTLUMz2x?W|qnSIJa)e0GKVB@*#M{z^_v0n!)KU@ z#=v^xy8899w=3h~FOT!E*NjvLH$Rqx+Tu(e9jsNDHk;0i<%jrCcK~#)Z6u2>@bhJf z*%MQpX@iGJX)@gHZ+dGvSF@cTM!hQE@vBC+?I&gU0>IKkmyzS%!N!nI8`j$sK4%^v zC)?gACw=;Mf4M>EZS+@Yq7S}My0*6w=419d+nZoMk57pAuXnd7uGtyD)z26JYufaY!UA-QzdKd3Z)FAL z%yJtjQVKT8l@KC)0uu(nrqs(yHIz-Nq-NXt-R8NHC2WyhJjSjDug^Q{m#mkGH735s zKaWfo;6gMjnI6|Yy5N<|aa)_Yb;E0~H%Vhl>snxyo^k`l@W7erGsTeW-EyHWn39N# zb7b}uJ>S2{cU#bkMs=7X({PLXxxnT!YVM#U!L-@0f~f6pvyeF&zKrOe)vfEADst-?_wE6-`;sOU zorPVFc@u?oWbeJm9X7@CiL@NC__~jsGil(L4zRvIh48JLA!D%`vL7}!UBV0g*;~jo z>Rmu1v`4OA6zqGl)Dz2kH6V7qdF9wt1hwboyZj@4;K3!Gs)b4K?4ip>`xl<9g&t2G zaV(*_vtw_1%zbv38Y!|p3_RkFT6f;B;PW5HKFGJbI(BxRLz@Tvf(N$}<-ft(hNMQv z3YIf+Tnbven>jzD57h&*zTx<|WN{N_$f;z)(k1gA%w+9-X?=e7$7G?5MEK`30uzyQ zuJBoIK}8b-tm!Ij^(=*OAE5DAO=lt?NfosLiyA>T1wnt@$~D6bcbac$u5K@nIXZ{dA|6-1W{2)=K@9E9U*f z{{&=PXnxs?V?Y@cC+s=nSvkGoZ7p?Ed~dJE){IJI4?5c>h1mH~VQ&_P?3|?%FS_*k zaC{IG$&CD_7Vo+k`Z*pDu{m379Zb8;0~b9RbG{I1834=QZ7M#Ad`NtF3aN!iAvZB4}? zY%kl&DdhU)2BU@KyCxW(?58|KypE;s9?n_5=e+9Nq>yjLYO=L&p87DbR=?mD6#_py z7WPvSm=?_G{){@xuMk`a4mB)=Uj51hY8sGZ4Fc629fq-osg(yEV``&$bJ!$Zr!H4@ zR_A}a>Zj!UGqt!k!icRe`iTF~bH!A6);4oqeOg{#hdYpz~&>pm6{>Qva|S#5xKt^EHK$?V+Kro9$vCZ+<{xA%Rz+!cZ8G|13v#65W zHg1M2KJZ;y8Ueu-miJaH1+M6Jw5BE{kKrVM0YH&LK;0pYbR44xLOki?U+Z^sxXWQS z84N!w%yHjtx97S2?zbnoA9`%Uer7jop{G~R2}zV*Qj#GymkUMdG#G?ZQoXez<3xMQ z=RTFXT^EZ&xGhK(P9Ks*Wg8*v<))SAEjEA~likEI+snr?pR+PwG+Hd-;HzHd=$=mK z8h>~C(cYI)OMWM>!FhpWI(neHdaLE#xDssIxh?L1#1%g`xi9atUAQ%!&Xqt+@Qh3- zW$xqyN5jiYhr-8qivF}t zTQHa2CVOc7HYc1}UpyBr@vPKbQDNzs?<%}wF zp(pA24EJ7pu?%R#LDRoV;yW{YK;A%>PqdtvbJ2{nUtH>!O8b7|KLQXwAeN8i67r+@j9+D0CU9tSwDg;ZsFv$YuFx# z7P5&cnEw_kNVa+xdqMvAa_Ui!aFL<{_L*yFV=yAumVDqjQ&&0jR_idl4l2t@-J5JY z$5FY^4?N69Xl{&-_E-Rx{OXYV@ zmvC`#FdWOQM*XfdT}6g_cpREzQY%V^{9e05Xe~60t8)LTs#b<26|_!~A2l8;wV!Ak4f&!t z^Kc;Jhk%N^Y*4f(ahuRWs`GtY${{O5+bcuHv>!ECcGuCoj<2`G=sDspb3e3NA}$=Q z1RYC}rzTJ2lTmFb)1-hyXXFCSFFMPzE$(=D#e49KW6!aw58}a_z*V0y5TU|0b+V0V zBP0nary2ElA+9#!>1lz9XZB@%GTcduhrDZnnxoiCYbA2%ha8#Qad?O*mk6mm6s~+@ zvKpR23SAqw3b>C%BY3=U7Q9fex2Toh(bFa&)a%~D^bN{QQygYnj%Hk}3Sly6?t7Kz zqqDc-%-?AS-Q342PV&VBa_W-a>7rfAD_!Ssa)R(Y^ zQ#-ju8+s4fV6fd@N3k*4@;Fcg84&zA+}bj8;p(SePgPXYYSKUOr5w-LL^sy1cC^F2 zTQp&Cn|#l|6H7~__PEzvg36yMkQLWzs@@!-i10e4_caS~!eE2*fUDtdDNt~hd(bT% zupjiUuL@INGh%%?IBR_CToDZONwv!a2w1t!B0CQ9^yhcS?5R%YI{RU!XjKJeQ^>(O z&gScwGL^9_P&kmK|hyGKHMDcd-Uds=hih!WSthI}S_ zE0hdlO397WgnQ1zh%bi$$3wMq>!)SsO;Wid=)zaCZ63qb($w&ftzpSNy*0jxT*Qq za;BS@m|>Xe^D9>m4a%$~`1kzVBRaLCBC`~&S=l|~tz961jm}~mn&Ik5qe&mxzX^^$((w|FPOVe#> zfkw=qfE^&$TvgEVRD)QHd9mNOPp-v`Rq6PpXTotqw}lSd52gW#@Un;DntlDHX3c=g z%`+%#$=H2HB^&1^g#Fm#=Dpgw#g86U+o6%uN|n@>#63B;e?G=cqdy)!8j!s+p1N0m zp9jnD$?@(9E@a8_T(VHVUOMbUu!0&cy@@vdWZxXRD?>w^=CVpf!;gNK-{uX{V1ex7 zEFWUDtHfuQZ)urfc_n>9Q$VQwB2D9ZY-~%1!G2b-g(8w9BlTm@-eF1b1J=eJgF;5&cOqz+u=y`-Nk2LJd@_h1P1N zlty&lhQ|?^a`{SM`1rZX0d5V zOXorJ4K{T=f7vz5Z=QeF%ORkWYj(fBgjzs38?JSZC@i;DA+^sBqgKAxX5@|T=y;!| z`9YIK{7E8KfjgCO7B|hXbr51L!GsZ6{gI?p@@$lMSxF}d*IWMD86C(ZpR&#Jn@l?L zr>O!%te1O-{m`v_*>L2}Tb(`74cPo$a2jk*Q-fT^odO%0`av7NT8s}c;O?RX4Lk00p zC`&q<*IwS+hHPO>;MvoJxZyJQ^s#I6`#*+r@)QZl{|LujSQK^-_(i!m#~lq!Wim*W>IFy3!EU&b637` z+@G1UpIFietQ4N67o^MC{BMhbhf)995&XY)Xb9x7{|i(H=d5WyXv<|;!kI&3P|QDs zGh#MKC0;M&gZn3v2md-h{A-5suRqBD#rx#W$=ycc6c8afcl7_uDdpdQ`qw7r|ABMP zd*D!Q2ZU>Yt@E$B4)75Ex8Klz>7@YQpu76<>woh4_vnHPM@O5t=_|NMQ~d#s$oE|T zot`S#dOEAv3RSxPr`Z>kyndy4G!{Tlcb>{kPxlB+ka9}`$j0J0U~b!Y08Tw>WwV6! z2axJl+)mLwxB&Pt2~28H@aad=u`kB@X@30%E6f#FzUBXlL6P(A5?cXUoaF-uAArobL^X~j z49IVRJA1|bfS$-@x)Q^aPoms`@5Fnkk9(om&fYhmpE&lKDbMr-VC8!=Okb@6h%ner zq^Dv|{DpO_**^KuWa8`k&E%Q5H66{AgVIY@4)CDg(xixmMMN--rz{f=N!=IOYL!PP z*$Wy1Fd>onf4Hl+Ke$r9Zu3B-Ndb25TQx{+T5CUA^LQ4Ri~!mXE=$v`KVPtujxYhV z$VHDIe`A*w8WQb#Uqz>qCR|w+_~8nN1=KW=#MJ0H)uyxB4S-oznJPQzul#X0b^tv+ z^tOjz*}kJ_koS<25UNqxWV($rSu^Kw&D9g^ zo34s|GyEcDCUB{lq2S;s6G7LS*^Hz}6Nn*c{y*f^WxGV>Sson+uE@FGZq%*p&*1;1 z_;wVs`0c1IHfrvN3MwhaW#jgOFxGr~`vT}OBP3|&OmTWy!&$;82xYRY2y3HLlDKEg zQ1a6B-T3*2Pfz|KiyMAbEYwS`twV6xA~=+khANGcx5(vptZF8QIyW2_Tk&xva422_Dm|4pqWIit zVhuiLRCO>4phsMgkrW-re4-e|GAl#Dj4tOEaNO!weyr{`b^rK^8H1H{0q2!98dsoy z^<6?((X3E?wPzuf`q-7tc^9UxQ2Xo(O_2oeHosU~Ne<-;HSpiF_9(1l8wk0ohyT%c z=$*6(i=@jD1sMqMH6_(PXEwXk}@uylzJcqgjBzK=PSZrZkNErhI8 z&;LZW{jQWa2Lc3fBG@D+TA@+0n54`3yuN>4D>Rq=nznL%8nh;8btW*G!?XzNLdKm^ zYPbu0taGMQ4dYIu;MiyNO0HP#I7OF4DUJw_nZT8?bKI#;548$Zd3p^Z8@+mULgy~# zuib|3(dUQ)zgc3sCo;3WZRCPEyze0~K>@E2riRF*b8V8G)}Q*cL>pye=Q3g|eo! zySH}`DR<${=tupzG*6`+(YAvMcij> zWcl^)fp<)>sy*X$Wmiw0fN3^3z2`YrX)XXH(V4~esFj2fCAbn(#xDQ)pg5STh^L#E9)CYjlfDv3t2nsh9Lmn4#wwwkf?}D2+h&F{ z<96?C8&9#$6LBIH{$C0f2wKp`{NN!S?3h*jvFX(c>by6%<{b;mB|mUfDqH?^ zQ|Zx#aK9h($e@6qhlg9)bJvnJWsX0Qow!X)G52vMpsWftPL-3PlBd%|<51f_iUObK zG$J38?!5;;`*v1)yq&DVwSES_JlH5o8#1k#5P($G6fi|5G7{_Hk033PfId#ho5}hq z^>bbUZ&Amcx{?;xZfq+&+lWeS9K#?tNJy{gl3|viV!@ z9u&uDA~ty$nYrUtb+$#eP%C|4 zPA{+9khW(7076f~#G$PGlK+#p6SLPvC`?^2fRB!UTyR;yYgqE`SmJ)+iEPT8UQv6LC%=sPm7D> zyJ{rxPhTlL{`HzU=jF*c2(mimdL{23hkabaFE&;`_-JFa`Xe5$F(||%eFqrNZzYy* zD}+7Bot~MvFqlk}98P-X#6Yh-{-0yyW7cn=#mfuZzODi9eb>JlGAMz57bFwdfNV3_ zo*O(cCu#@Sw7+e+#`8Q>+ETs9jyXr>TxV1A{u{)NV29jVM9)YZ5Ri)4va>@Bp0tcF)$&jlrHyI7x!5OLvV|aR+DX%WVhj7%_Y(&-TC~ z9^KJ8`}5+J&c)XvBNsMPl2AnwrQL3TcnAG^urd&4iR$Mr+`Iwg0e%DFs#w7xY2gEA z+Y3@`%M&u|mW()|i00MMM6c$F3JX4IE;ui4L9%l6Y#hm&XDTcUF)DeNZ;bx^&yPSl zeK{UwtrKr6gjW+^E-({#B$Va#2EFd>TsrLHD>0N zN_&-L49l64{sLtdhx}Zu>R(L&sYCal>=yIl>`0D;WemcDytoLm{DvU?40p#xllI&H zZg+fa{Zk5K(c(J2c)+$i|B~dje<)>FDh8RXZ>D@%_F>_`!Zj4T&ya)%{aOpTg3?gG zYPf-9oA{qf7HaxLZ1E*?VRyENh5Kh&^tBb1n2>GrdMCH^jf@htV{AaXVV*~%>U?rw z)*J`OEVdb3+3)B8do%ZF1;)IJ6`W<+0@Stak+YrnI=yHUZlmm=mj7KQGtF6~y}KdJ zJmW1Vr{i~FHOld5z8TojUk6q`*|c&?QeTV?8E9Hu0Z#NFA9vL^a>TYQ=`TZ z7XRbD@6ga^K6xHW09;zH-ao-ln*H zHi_w*7sZF~lm(j|TZZf{cw1#sHy@qTg6%rs0p5D=^N<}q%T>&8f7-0=5(;<3OY@FL z+8dk*MV?*?07wIgCs#vF(+L_hXf=^Gth9eSFh&l*wA}O`r_V7x ziKfUdkOFVj4hbthLezRp-Jf1-(7d?;Go$o^^#GATEm_Ln3^uh-m0~X6VL)xNyvgfJ z??3ewt-fnT87?mRTA4e2dM}1e3*2N0Tzj_wHADbaydzV-!1B+{-?NUz$mvuD;G%kR zWqxp%xpg|NCQxsASjO}b)M#^@6AVMhs%nX`iADvwr=>R8A6j4l?v0}M{NtbH>I62r z90lMsPDs(*9YLrFU%6HFe3qPE5u^yn!JVRe8v>jo1{Kos!*std0Hq7?^*`E-`QOG5 zu!sIN*Z$XU{QoNp_J0HF-+=lbo-_XcJuLpufT9CB?{xpu2BX2ptg5oPoQIHU^^>AQ N?U|-Z)l=&a{|m Date: Tue, 16 Jul 2024 23:42:30 +0200 Subject: [PATCH 5/6] update README.md because secrets.json is not necessary anymore --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index f27abaf..1071c2c 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,6 @@ - Clone this repository to a directory you want the bot to run from - `pip3 install -r requirements.txt` - Copy `jeevesbot/env.py.dist` to `jeevesbot/env.py` and change the variables. -- Copy `jeevesbot/secret.json.dist` to `jeevesbot/secret.json` and add your Google Drive API secret.json - `cp scripts/jeeves.service /etc/systemd/system/jeeves.service` and change the variables to suit your environment. - `systemctl daemon-reload` -- `systemctl start jeeves.service` \ No newline at end of file +- `systemctl start jeeves.service` From fa2e4a78cd0c7cbf15a35f0df783e3acaa08d13e Mon Sep 17 00:00:00 2001 From: Peter van Arkel Date: Wed, 17 Jul 2024 15:52:39 +0200 Subject: [PATCH 6/6] added first slashcommand and refactored the preview cog as result of breaking changes in slashcommand --- .gitignore | 6 +-- cogs/admin.py | 1 - cogs/preview.py | 92 ++++++++++++++++++--------------- cogs/reminders.py | 41 +++++++++++++++ jeeves.py | 112 ++++++++++++++++++++++++++++------------- jeevesbot/database.py | 34 +++++++++++++ jeevesbot/env.py.dist | 3 +- jeevesbot/functions.py | 13 ----- requirements.txt | 3 +- 9 files changed, 211 insertions(+), 94 deletions(-) create mode 100644 cogs/reminders.py create mode 100644 jeevesbot/database.py diff --git a/.gitignore b/.gitignore index 6b9f5ee..046ee76 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,9 @@ jeevesbot/env.py -jeevesbot/secret.json +jeevesbot/databases/* +jeevesbot/__pycache__/* logs/ __init__.py *.pyc __pycache__/* cogs/__pycache__/* -jeevesbot/__pycache__/* -.vscode/ \ No newline at end of file +.vscode/ diff --git a/cogs/admin.py b/cogs/admin.py index 1f5ea92..aaade32 100644 --- a/cogs/admin.py +++ b/cogs/admin.py @@ -1,4 +1,3 @@ -import discord from discord.ext import commands from logging import getLogger import typing diff --git a/cogs/preview.py b/cogs/preview.py index 3d58fdc..3700792 100644 --- a/cogs/preview.py +++ b/cogs/preview.py @@ -1,69 +1,74 @@ import discord from discord.ext import commands -from jeevesbot import functions +from jeevesbot import functions, env from logging import getLogger import re import pytube -from pytube.exceptions import RegexMatchError +from pytube.exceptions import RegexMatchError, VideoUnavailable, ExtractError # setup logging log = getLogger(__name__) -e = discord.Embed() - - class Preview(commands.Cog): """ Ensures that high-risk channels don't display embedded links, but only gifs and youtube previews.""" + def __init__(self, bot): self.bot = bot self.video_id_regex = re.compile(r'(?:youtube\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/|m\.youtube\.com/(?:watch\?v=|embed/|v/))([^"&?/ ]{11})') - + self.e = discord.Embed() @commands.Cog.listener() async def on_message(self, message): + if message.author.bot: + return # Ignore messages from bots + + if message.content.startswith('https://tenor.com/'): - roles = functions.checkrole(message.author.roles) - channel = functions.checkchannel(message.channel.id) + is_admin = message.author.guild_permissions.administrator + is_high_risk_channel = self.check_channel(message.channel.id) embed_url = message.content follow_url = embed_url + '.gif' full_url = await functions.resolve(follow_url) gif_url = full_url.split('?')[0] - embed = e.set_image(url=gif_url) - if channel is True: - if roles is not True: - await message.channel.send(embed=embed) - logline = (str(message.author) + ' requested a gif: ' + str(gif_url)) - log.info(logline) - if message.content.endswith('.gif'): - roles = functions.checkrole(message.author.roles) - channel = functions.checkchannel(message.channel.id) - embed_url = message.content - embed = e.set_image(url=embed_url) - if channel is True: - if roles is not True: - await message.channel.send(embed=embed) - logline = (str(message.author) + ' requested a gif: ' + str(embed_url)) - log.info(logline) + embed = self.e.set_image(url=gif_url) + if is_high_risk_channel and not is_admin: + await message.channel.send(embed=embed) + logline = (str(message.author) + ' requested a gif: ' + str(gif_url)) + log.info(logline) + + if message.content.startswith('https://giphy.com/'): - roles = functions.checkrole(message.author.roles) - channel = functions.checkchannel(message.channel.id) + is_admin = message.author.guild_permissions.administrator + is_high_risk_channel = self.check_channel(message.channel.id) embed_url = message.content image_code = embed_url.split('-')[-1] gif_url = 'https://media.giphy.com/media/' + image_code + '/giphy.gif' - embed = e.set_image(url=gif_url) - if channel is True: - if roles is not True: - await message.channel.send(embed=embed) - logline = (str(message.author) + ' requested a gif: ' + str(gif_url)) - log.info(logline) - if 'https://youtu' or 'https://m.youtu' or 'https://www.youtu' in message.content(): - roles = functions.checkrole(message.author.roles) - channel = functions.checkchannel(message.channel.id) - if channel is True: - if roles is not True: - url = message.content + embed = self.e.set_image(url=gif_url) + if is_high_risk_channel and not is_admin: + await message.channel.send(embed=embed) + logline = (str(message.author) + ' requested a gif: ' + str(gif_url)) + log.info(logline) + + + if message.content.endswith('.gif'): + is_admin = message.author.guild_permissions.administrator + is_high_risk_channel = self.check_channel(message.channel.id) + embed_url = message.content + embed = self.e.set_image(url=embed_url) + if is_high_risk_channel and not is_admin: + await message.channel.send(embed=embed) + logline = (str(message.author) + ' requested a gif: ' + str(embed_url)) + log.info(logline) + + + if 'https://youtu' in message.content or 'https://m.youtu' in message.content or 'https://www.youtu' in message.content: + is_admin = message.author.guild_permissions.administrator + is_high_risk_channel = self.check_channel(message.channel.id) + if is_high_risk_channel and not is_admin: + url = message.content + try: youtube = pytube.YouTube(url) video_title = youtube.title video_author = youtube.author @@ -71,12 +76,19 @@ class Preview(commands.Cog): if video_id: embed = discord.Embed() embed.set_image(url=f"https://img.youtube.com/vi/{video_id}/hqdefault.jpg") - embed.set_author(name=f"{video_author}") - embed.add_field(name=f"", value=f"[{video_title}]({url})") + embed.set_author(name=video_author) + embed.add_field(name="", value=f"[{video_title}]({url})") await message.channel.send(embed=embed) log.info(f'User {message.author} requested preview for {url}') + except (VideoUnavailable, ExtractError, KeyError) as e: + log.error(f'Error extracting YouTube video details for {url}: {e}') + await message.channel.send('Sorry, there was an error retrieving the YouTube video details.') + def check_channel(self, channel_id): + high_risk_channels = env.PREVIEWCHANNELS + return channel_id in high_risk_channels + def extract_video_id(self, url): try: match = self.video_id_regex.search(url) diff --git a/cogs/reminders.py b/cogs/reminders.py new file mode 100644 index 0000000..5349816 --- /dev/null +++ b/cogs/reminders.py @@ -0,0 +1,41 @@ +import discord +from discord.ext import commands +from jeevesbot import env +import datetime +from jeevesbot.database import add_reminder +from logging import getLogger + + +# setup logging +log = getLogger(__name__) + + +class Reminders(commands.Cog): + """ Reminder command""" + def __init__(self, bot): + self.bot = bot + + + @discord.app_commands.command(name='remindme', description='Set a reminder - Use YY-MM-DD HH:MM:SS notation') + @discord.app_commands.guilds(discord.Object(id=env.GUILD_ID)) + async def remindme(self, interaction: discord.Interaction, time: str, message: str): + try: + reminder_time = datetime.datetime.strptime(time, '%Y-%m-%d %H:%M:%S') + add_reminder(interaction.user.id, message, reminder_time.isoformat()) + await interaction.response.send_message(f'Reminder set for {reminder_time}') + log.info(f'Reminder set by {interaction.user} for {reminder_time}: {message}') + except ValueError: + await interaction.response.send_message('Invalid time format. Use YYYY-MM-DD HH:MM:SS', ephemeral=True) + log.warn(f'Reminder set by {interaction.user} went wrong.') + + + @commands.Cog.listener() + async def on_ready(self): + log.info(f'module active') + +async def setup(bot): + await bot.add_cog(Reminders(bot)) + log.info(f'Added Reminders.remindme as command') + + + diff --git a/jeeves.py b/jeeves.py index f384c3f..3cc7078 100755 --- a/jeeves.py +++ b/jeeves.py @@ -1,66 +1,108 @@ #!/usr/bin/env python3.8 import discord -from discord.ext import commands +from discord.ext import commands, tasks from jeevesbot import env +from jeevesbot.database import init_db, get_due_reminders import os import log import logging.config from logging import getLogger +import datetime import asyncio -# setup root logger handlers -logging.config.dictConfig(log.LOGGING) +# Initialize the database +init_db() + + # setup logging +logging.config.dictConfig(log.LOGGING) log = getLogger(__name__) # setup discord.py bot intents = discord.Intents().all() -bot = commands.Bot(command_prefix='!', intents=intents, help_command=None) +intents.message_content = True e = discord.Embed() - -@bot.command(name='load', hidden=True) -@commands.has_permissions(administrator=True) -async def load(ctx, extension): - bot.load_extension(f'cogs.{extension}') - log.info(f'{ctx.message.author} loaded the {extension} module') +class Jeeves(commands.Bot): + def __init__(self): + super().__init__(command_prefix='!', intents=intents, help_command=None) + self.guild_ids = [env.GUILD_ID] -@bot.command(name='unload', hidden=True) -@commands.has_permissions(administrator=True) -async def unload(ctx, extension): - bot.unload_extension(f'cogs.{extension}') - log.info(f'{ctx.message.author} unloaded the {extension} module') + @commands.command(name='load', hidden=True) + @commands.has_permissions(administrator=True) + async def load(self, ctx, extension): + self.load_extension(f'cogs.{extension}') + log.info(f'{ctx.message.author} loaded the {extension} module') -@bot.command(name='reload', hidden=True) -@commands.has_permissions(administrator=True) -async def reload(ctx, extension): - bot.unload_extension(f'cogs.{extension}') - bot.load_extension(f'cogs.{extension}') - log.info(f'{ctx.message.author} reloaded the {extension} module') + @commands.command(name='unload', hidden=True) + @commands.has_permissions(administrator=True) + async def unload(self, ctx, extension): + self.unload_extension(f'cogs.{extension}') + log.info(f'{ctx.message.author} unloaded the {extension} module') -async def load_extensions(): - for filename in os.listdir('./cogs'): - if filename.endswith('.py'): - await bot.load_extension(f'cogs.{filename[:-3]}') + @commands.command(name='reload', hidden=True) + @commands.has_permissions(administrator=True) + async def reload(self, ctx, extension): + self.unload_extension(f'cogs.{extension}') + self.load_extension(f'cogs.{extension}') + log.info(f'{ctx.message.author} reloaded the {extension} module') -@bot.event -async def on_ready(): - log.info(f'Active with ID:{bot.user.id} as {bot.user.name}') - activity = discord.Activity(name='!help', type=discord.ActivityType.listening) - await bot.change_presence(activity=activity) + async def load_extensions(self): + for filename in os.listdir('./cogs'): + if filename.endswith('.py'): + await self.load_extension(f'cogs.{filename[:-3]}') + + + @tasks.loop(seconds=60) + async def check_reminders(self): + now = datetime.datetime.now().isoformat() + reminders = get_due_reminders(now) + for reminder in reminders: + user = self.get_user(reminder[1]) + if user: + try: + await user.send(reminder[2]) + except Exception as e: + log.error(f'Error sending reminder to user {reminder[1]}: {e}') + + + async def on_ready(self): + log.info(f'Active with ID:{self.user.id} as {self.user.name}') + activity = discord.Activity(name='!help', type=discord.ActivityType.listening) + await self.change_presence(activity=activity) + # Sync commands for all guilds + for guild_id in self.guild_ids: + guild = discord.Object(id=guild_id) + try: + await self.tree.sync(guild=guild) + log.info(f'Successfully synced commands for guild {guild_id}') + except discord.errors.Forbidden as e: + log.error(f'Failed to sync commands for guild {guild_id}: {e}') + # Start the reminder check loop + if not self.check_reminders.is_running(): + self.check_reminders.start() + + + async def on_command_error(self, ctx, error): + if isinstance(error, commands.CommandNotFound): + await ctx.send('Command not found.') + log.warning(f'Command not found: {ctx.message.content}') + else: + await ctx.send('An error occurred.') + log.error(f'An error occurred: {error}') async def main(): - async with bot: - await load_extensions() - await bot.start(env.TOKEN) + bot = Jeeves() + await bot.load_extensions() + await bot.start(env.TOKEN) - -asyncio.run(main()) +if __name__ == "__main__": + asyncio.run(main()) diff --git a/jeevesbot/database.py b/jeevesbot/database.py new file mode 100644 index 0000000..aca158d --- /dev/null +++ b/jeevesbot/database.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python3 + +import sqlite3 + +def init_db(): + conn = sqlite3.connect(r"jeevesbot/databases/reminders.db") + c = conn.cursor() + c.execute(''' + CREATE TABLE IF NOT EXISTS reminders ( + id INTEGER PRIMARY KEY, + user_id INTEGER, + message TEXT, + reminder_time TIMESTAMP + ) + ''') + conn.commit() + conn.close() + +def add_reminder(user_id, message, reminder_time): + conn = sqlite3.connect(r"jeevesbot/databases/reminders.db") + c = conn.cursor() + c.execute('INSERT INTO reminders (user_id, message, reminder_time) VALUES (?, ?, ?)', (user_id, message, reminder_time)) + conn.commit() + conn.close() + +def get_due_reminders(current_time): + conn = sqlite3.connect(r"jeevesbot/databases/reminders.db") + c = conn.cursor() + c.execute('SELECT id, user_id, message FROM reminders WHERE reminder_time <= ?', (current_time,)) + reminders = c.fetchall() + c.execute('DELETE FROM reminders WHERE reminder_time <= ?', (current_time,)) + conn.commit() + conn.close() + return reminders \ No newline at end of file diff --git a/jeevesbot/env.py.dist b/jeevesbot/env.py.dist index 68a3025..698827f 100644 --- a/jeevesbot/env.py.dist +++ b/jeevesbot/env.py.dist @@ -2,4 +2,5 @@ TOKEN = 'discord-bot-token-here' ADMIN_ROLE = 'role-to-exclude-from-gifbot' -PREVIEWCHANNELS = [add-channel-ids-for-bot-to-work-in] +GUILD_ID = 'id-of-guild' +PREVIEWCHANNELS = ['add-channel-ids-for-bot-to-work-in'] \ No newline at end of file diff --git a/jeevesbot/functions.py b/jeevesbot/functions.py index 9e0a838..1298974 100644 --- a/jeevesbot/functions.py +++ b/jeevesbot/functions.py @@ -17,16 +17,3 @@ def roll(notation): result = int(roll) return roll,result -# check if user has admin role and output True if it's the case. -def checkrole(roles): - for role in roles: - if str(role) == env.ADMIN_ROLE: - return True - -# check if the source channel is in the list of channels that are watched by the bot. -def checkchannel(channelid): - if channelid in env.PREVIEWCHANNELS: - return True - else: - return False - diff --git a/requirements.txt b/requirements.txt index d2af5a3..c8d793d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,13 +2,14 @@ aiohttp async-timeout dice -discord.py +discord.py[voice] docopt multidict pyparsing typing-extensions pylint pytube +sqlite3 # needs this version, otherwise TypeErrors will break stuff yarl==1.4.2