2020-12-04 09:37:04 +01:00
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 :
2020-12-04 09:59:28 +01:00
reddit = praw . Reddit ( client_id = token [ ' client_id ' ] , client_secret = token [ ' client_secret ' ] , user_agent = f " disreddit / { token [ ' user_agent ' ] } , http://localhost:8080 " )
2020-12-04 09:37:04 +01:00
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 ( ' ❤️ ' )