diff --git a/cogs/internet.py b/cogs/internet.py new file mode 100644 index 0000000..511a3f6 --- /dev/null +++ b/cogs/internet.py @@ -0,0 +1,103 @@ +import discord, praw, json, requests, datetime +from discord.ext import commands +from random import randint, choice +import time +from tokens import token_reddit as token # à l'importation de l'extension, le fichier se retrouve dans le '/' et non dans 'cogs/', ignorez l'erreur pylint si il y a + +def setup(bot): + bot.add_cog(Internet(bot)) + +class Internet(commands.Cog): + """Commandes relatives à ce qui provient d'internet.""" + + def __init__(self, bot): + self.bot = bot + + @commands.command(name='memes', aliases = ['meme']) + async def _memes(self, ctx, *, args = ""): + """Envois un meme de reddit.\n ➡ Syntaxe: .memes/meme [subreddit]⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢""" + try: + reddit = praw.Reddit(client_id = token['client_id'], client_secret = token['client_secret'], user_agent = f"{token['user_agent']}, http://localhost:8080") + + if args != "": # si il y a un arg différent d'un meme + subredditchoix = args + + else: # si il n'y a pas d'arguments + subredditchoix = choice(['memes', 'anime_irl', 'goodanimemes', 'BikiniclienttomTwitter', 'dankmemes', 'DeepFriedMemes', + 'educationalmemes', 'funny', 'marvelmemes', 'me_irl', 'meme', 'MemeEconomy', 'Memes_Of_The_Dank', 'MinecraftMemes', + 'physicsmemes', 'reactiongifs', 'blackpeopletwitter', 'metal_me_irl', 'bee_irl', '195', + 'shittyadviceanimals', 'meirl', '2meirl4meirl', 'AdviceAnimals', 'weirdmemes']) + + memes_submissions = reddit.subreddit(subredditchoix).hot() + post_to_pick = randint(1, 10) + for i in range(0, post_to_pick): # i pas important + i = i #retire l'erreur sur vscode + submission = next(x for x in memes_submissions if not x.stickied) + + image = ["png", "jpg", "jpeg", "bmp", "gif"] + if submission.url[-3:] in image: + embed = discord.Embed(title = f"r/{subredditchoix} pour {ctx.author.name}", color = randint(0, 0xFFFFFF), description = f"[lien du meme]({submission.url})") + embed.set_footer(text = f"Meme de Reddit") + embed.set_image(url = submission.url) + message = await ctx.send(embed = embed) + else: + await ctx.send(f"```r/{subredditchoix} pour {ctx.author.name}```\n{submission.url}") + message = await ctx.send("```Meme de Reddit```") + await ctx.message.add_reaction(emoji = '✅') + await message.add_reaction('👍') + return await message.add_reaction('👎') + + except Exception as error: + print(f"args: {args}, subreddit: {subredditchoix}, error: {error}") + await ctx.message.add_reaction(emoji = '❌') + return await ctx.send(f"Ce subreddit est interdit, mis en quarantaine ou n'existe pas. ({subredditchoix})") + + def _random_image(self, link): + temps_requete = int(round(time.time() * 1000)) + try: + request_data = requests.get(link) + except Exception as e: + raise Exception(f"Une erreur s'est produite lors de la tentative de demande de l'API {link} : {e}") + + if not request_data.status_code == 200: + raise Exception(f"Code HTTP {request_data.status_code} au lieu de HTTP 200 à l'appel de {link} : {request_data.text}") + + try: + json_data = json.loads(request_data.text) + except Exception as e: + raise Exception(f"Erreur lors de la transformation les données de {link} en json : {e}") + + temps_requete = int(round(time.time() * 1000)) - temps_requete + return (json_data, temps_requete) + + @commands.command(name='cat', aliases = ['chat']) + async def _cat(self, ctx): + """Te montre un magnifique chat\n ➡ Syntaxe: .cat/chat""" + + if ctx.author.nick: + name = f"{ctx.author.nick} ({ctx.author.name}#{ctx.author.discriminator})" + else: + name = f"{ctx.author.name}" + embed = discord.Embed(title = f"Poticha pour {name}", colour = randint(0, 0xFFFFFF)) + cat = self._random_image("http://aws.random.cat/meow") + embed.set_image(url = cat[0]['file']) + embed.set_footer(text = f"random.cat a pris {cat[1]} ms.") + await ctx.message.add_reaction(emoji = '✅') + message = await ctx.send(embed=embed) + return await message.add_reaction('❤️') + + @commands.command(name='dog', aliases = ['chien']) + async def _dog(self, ctx): + """Te montre un magnifique chien\n ➡ Syntaxe: .dog/chien""" + + if ctx.author.nick: + name = f"{ctx.author.nick} ({ctx.author.name}#{ctx.author.discriminator})" + else: + name = f"{ctx.author.name}" + embed = discord.Embed(title = f"Potichien pour {name}", colour = randint(0, 0xFFFFFF)) + dog = self._random_image("https://dog.ceo/api/breeds/image/random") + embed.set_image(url = dog[0]['message']) + embed.set_footer(text = f"dog.ceo a pris {dog[1]} ms.") + await ctx.message.add_reaction(emoji = '✅') + message = await ctx.send(embed=embed) + return await message.add_reaction('❤️')