Sélectionner une révision Git
nardco.py 17,08 Kio
# -*- coding: utf8 -*-
import irclib
import ircbot
import random
import time
import module_red as red
import rateau
from fuzzywuzzy import fuzz
import requests
from HTMLParser import HTMLParser
import philotron
import pipotron
import viieux
import codage
import nordpresse
import commit
import kohlanta
# import rateau
def couper(pseudo):
return pseudo.split("!")[0]
def aram():
Champ = [" Aatrox ", " Ahri ", " Akali ", " Alistar ", " Amumu ", " Anivia ", " Annie ", " Ashe ", " Azir ",
" Bard ", " Blitzcrank ", " Brand ", " Braum ", " Caitlyn ", " Cassiopeia ", " Cho'Gath ", " Corki ",
" Darius ", " Diana ", " Dr.Mundo ", " Draven ", " Ekko ", " Elise ", " Evelynn ", " Ezreal ",
" Fiddlesticks ", " Fiora ", " Fizz ", " Galio ", " Gangplank ", " Garen ", " Gnar ", " Gragas ",
" Graves ", " Hecarim ", " Heimerdinger ", " Irelia ", " Janna ", " Jarvan IV ", " Jayce ", " Jax ",
" Jinx ", " Kalista ", " Karma ", " Karthus ", " Kassadin ", " Katarina ", " Kayle ", " Kennen ",
" Kha'Zix", " Kog'Maw ", " LeBlanc ", " Lee Sin ", " Leona ", " Lissandra ", " Lucian ", " Lulu ", " Lux ",
" Maître Yi ", " Malphite ", " Malzahar ", " Maokai ", " Miss Fortune ", " Mordekaiser ", " Morgana ",
" Nami ", " Nasus ", " Nautilus ", " Nidalee ", " Nocturne ", " Nunu ", " Olaf ", " Orianna ",
" Pantheon ", " Poppy ", " Quinn ", " Rammus ", " Rek'Sai ", " Renekton ", " Rengar ", " Riven ",
" Rumble ", " Ryze ", " Sejuani ", " Shaco ", " Shen ", " Shyvana ", " Singed ", " Sion ", " Sivir ",
" Skarner ", " Sona ", " Soraka ", " Swain ", " Syndra ", " Tahm Kench ", " Talon ", " Taric ", " Teemo ",
" Thresh ", " Tristana ", " Trundle ", " Tryndamere ", " Twisted Fate ", " Twitch ", " Udyr ", " Urgot ",
" Varus ", " Vayne ", " Veigar ", " Vel'Koz ", " Vi ", " Viktor ", " Vladimir ", " Volibear ", " Warwick ",
" Wukong ", " Xerath ", " Xin Zhao ", " Yasuo ", " Yorick ", " Zac ", " Zed ", " Ziggs ", " Zilean ",
" Zyra"]
return Champ[random.randint(0, len(Champ) - 1)]
last_args = None
last_cmd = None
global pour
pour = []
global suple
suple = -1
global cmdCarac
cmdCarac = "$"
personnalizedCmd = {}
def isCommande(string):
global cmdCarac
return string[0] == cmdCarac
def no_hl(pseudo) :
ins = u'\u200C'.encode("utf-8")
return pseudo[0] + str(ins) + pseudo[1:]
class Boooob(ircbot.SingleServerIRCBot):
def __init__(self):
ircbot.SingleServerIRCBot.__init__(self, [("irc.iiens.net", 6667)], "nardco", "Je suis un bot")
self.temps = 0
self.reddit_temps = 0
self.fichier_reddit = "canaux_reddit.txt"
self.clever = -1
#
def on_welcome(self, serv, ev):
serv.join("#nardco")
serv.join("#fokontest")
serv.join("#Titch")
# serv.join("#gynecoloc")
serv.privmsg("NickServ", "IDENTIFY MotDePasse") # rejoint #nardco à sa connexion
#
def on_join(self, serv, ev): # Quand qq entre dans le chann, le bot inclus
auteur = str(irclib.nm_to_n(ev.source()))
canal = ev.target()
def on_privmsg(self, serv, ev): # msg privé
personne = ev.source()
canal = ""
if "tichadou" in personne:
msg = ev.arguments()[0]
msg = msg.split(" ")
a = 0
for f in msg:
a = a + 1
if f[0] == "#":
canal = f
msg.pop(a - 1)
break
msg = " ".join(msg)
try:
serv.privmsg(canal, msg)
except:
serv.privmsg("#nardco", "probleeeeme")
def on_invite(self, serv, ev):
personne = ev.source()
canal = ev.arguments()[0]
serv.privmsg("Titch", couper(personne) + " m'a invité sur " + canal)
serv.join(canal)
def on_kick(self, serv, ev):
serv.join("#nardco")
print("kick")
personne = ev.source()
personne = couper(personne)
canal = ev.target()
if canal == "#Titch" and personne != "Titch" :
serv.mode(canal, "-o " + personne)
def on_pubmsg(self, serv, ev): # quand qq ecrit dans le chat
global suple
global cmdCarac
global personnalizedCmd
global last_args
global last_cmd
canal = ev.target()
personne = ev.source()
personne = couper(personne)
message = ev.arguments()[0]
message = message.lower() # Passe le message en minuscules
split = message.split(" ")
if "op pls" in message or "op plz" in message :
serv.mode(canal, "+o "+personne)
if 'nardco' in split[0] and ' ou ' in message :
splt = split[1:]
idx = splt.index("ou")
choice = random.randint(0,1)
if choice == 0 :
res = splt[:idx]
else :
if '?' in splt[-1] :
res = splt[idx+1:-1]
else :
res = splt[idx+1:]
serv.privmsg(canal, ' '.join(res)+ "!")
# lol of legends
if " aram " in message:
people = ["Jara", "Nami"]
if personne in people:
if "Jara" in personne:
serv.privmsg(canal, "TOURBILOL DEBILE MOUHAHAHA")
if "Nami" in personne:
serv.privmsg(canal, "Non Nami, ton main n'est pas op ! <3")
else:
serv.privmsg(canal, "A l'evidence," + aram() + "est totalement op.")
# les lignes suivantes sont pour le lol
if "Titch" in personne and "tg" in message:
#serv.privmsg(canal, "Oui maitre...")
suple = -1
if "Titch" in personne and "openbar" in message:
serv.privmsg(canal, "OPEN BAAAAAAR")
suple = 1
if "souple" in message and suple == 1:
serv.privmsg(canal, "et fruité")
if "fruité" in message and suple == 1:
serv.privmsg(canal, "et gouleyant")
if "gouleyant" in message and suple == 1:
serv.privmsg(canal, "et souple")
if suple == 1 and ("dur" in message or "long" in message or "court" in message or "molle" in message):
serv.privmsg(canal, "Comme ta bite " + personne + "! ")
if suple == 1:
if "aucun lien" in message:
serv.privmsg(canal, "Je suis fils unique...")
# fonctions de deplacement dans les chann
if "Titch" in personne and "goto" in message and "nardco" in message:
f = 0
for f in range(len(message) - 4):
if message[f:f + 4] == "goto":
serv.join("#" + message[f + 5:])
break
if "Titch" in personne and "leave" in message and "nardco" in message:
serv.part(canal)
# REDDIT // A COMPLETER
if isCommande(message):
args = message[1:].split(" ")
cmd = args[0]
if cmd == "!!" and last_args and last_cmd :
args = last_args
cmd = last_cmd
if cmd == "!" and last_cmd :
cmd = last_cmd
if len(args) > 1 and args[1] == "!" :
args = last_args
last_args = args
last_cmd = cmd
if cmd == "help":
if len(message.split(" ")) > 1:
if "reddit" in message.split(" ")[1]:
serv.privmsg(
canal,
("Commandes : "
"{0}reddit <sub> ; "
"{0}addsub <sub> ; "
"{0}delsub <sub> ; "
"{0}getsub ."
"(getsub renvoie des infos sur "
"tous les subs enregistrés pour le chann) ").format(cmdCarac))
else:
serv.privmsg(canal,
("Commandes disponibles :"
"{0}help reddit , "
"{0}rateau,"
"sinon, tentez de dire 'op plz' ...").format(cmdCarac))
elif cmd == "ffs" :
serv.privmsg(canal, "Nom de Dieu de putain de bordel de merde de saloperie de connard d'enculé de ta mère")
elif cmd == "chuck" :
try :
parser = HTMLParser()
r = requests.get("http://www.chucknorrisfacts.fr/api/get?data=tri:alea;nb:1")
rep = r.json()[0]['fact']
rep = parser.unescape(rep)
print(rep)
serv.privmsg(canal, rep.encode('utf8'))
except Exception :
print str(Exception)
serv.privmsg(canal, "erreur :(")
elif cmd == "thanos" and personne == "Titch" :
liste = self.channels[canal].users()
random.shuffle(liste)
serv.privmsg(canal, "snap ! ")
cleanlist = []
for f in liste :
if f[0] in ["~", "&", "@", "%", "+"] and 'nardco' not in f :
cleanlist.append(no_hl(f))
elif 'nardco' not in f :
cleanlist.append(no_hl(f))
live = cleanlist[:len(liste)//2]
dead = cleanlist[len(liste)//2 + 1 :]
pp = dead[random.randint(0,len(dead) - 1)]
ts = live[random.randint(0,len(live) - 1)]
serv.nick('{0}{1}_'.format(pp[0],pp[2:] )
serv.privmsg(canal, "I don't feel so good mr {0}{1}".format(ts[0],ts[2:])
serv.nick('nardco')
serv.privmsg(canal, "Vivants : {0}".format(", ".join(live) ))
serv.privmsg(canal, "Morts : {0}".format(", ".join(dead) ))
#serv.mode(canal, "+" + len(live)*'v' + " "+" ".join(live))
#serv.mode(canal, "+m")
elif cmd == "roll" :
content = split[1]
if len(content.split('d')) == 2 :
nbrDe = content.split('d')[0]
valDe = content.split('d')[1]
print(content, nbrDe, valDe)
res = ""
try :
for f in range(int(nbrDe)) :
res = res + " {} ".format(random.randint(1,int(valDe)))
serv.privmsg(canal, res)
except :
pass
elif cmd == "rateau" :
serv.privmsg(canal, "{0} : {1}".format(personne, rateau.getRateau()))
elif cmd == "viieux" :
serv.privmsg(canal, viieux.get_viieux())
elif cmd == "kohlanta" :
if (len(args) > 1 ) :
serv.privmsg(canal, kohlanta.kohlanta(args[1], canal))
elif cmd == "new" :
if len(args)>1 :
if args[1] in personnalizedCmd.keys() :
serv.privmsg(canal, 'commande deja existante')
else :
newCmd = {}
newCmd['result'] = ' '.join(args[2:])
newCmd['author'] = personne
newCmd['channel'] = canal
personnalizedCmd[args[1]] = newCmd
print personnalizedCmd
serv.privmsg(canal, 'commande ajoutée : ${0}, par {1}, pour le chann {2}'.format(args[1], personne, canal))
elif cmd == "del" :
if len(args) > 1 :
if args[1] in personnalizedCmd.keys() :
if personne == personnalizedCmd[args[1]]['author'] :
del personnalizedCmd[args[1]]
serv.privmsg(canal, 'done')
else :
serv.privmsg(canal, "vous n'etes pas l'auteur de cette commande !")
elif cmd == "get" :
res = []
for f in personnalizedCmd.keys() :
if personnalizedCmd[f]["channel"] == canal :
res.append(f)
serv.privmsg(canal, 'commandes pour {0} : {1}'.format(canal, ", ".join(res)))
elif cmd == "debat" :
serv.privmsg(canal, philotron.genererSujet())
elif cmd == "pipo" :
serv.privmsg(canal, pipotron.pipo())
elif cmd == "np" :
res = nordpresse.nordpresse()
serv.privmsg(canal, res)
elif cmd == "commit" :
res = commit.commit()
serv.privmsg(canal, res)
elif cmd == "zertyu" :
if len(args) > 2 :
if args[1] == "code" :
serv.privmsg(canal, codage.encode(" ".join(args[2:])))
elif args[1] == "decode" :
serv.privmsg(canal, codage.decode(" ".join(args[2:])))
elif cmd == "getsub":
res = red.get_new(self.fichier_reddit, canal)
for f in res:
serv.privmsg(canal, f)
elif cmd == "sub":
bd = open(self.fichier_reddit, "r")
for f in bd:
try:
if canal == f.split("|")[0]:
serv.privmsg(canal, "Liste des subs pour " + canal + " : " + f.split("|")[1])
except:
pass
elif cmd == "delsub":
sub = message.split(" ")[1]
bd = open(self.fichier_reddit, "r")
rem = 0
tmp = []
for f in bd:
tmp.append(f)
try:
if sub in f.split("|")[1] and canal == f.split("|")[0]:
rem = 1
except:
pass
bd.close()
if rem == 1:
bd = open(self.fichier_reddit, "w")
for f in tmp:
if canal == f.split("|")[0]:
h = f.split("|")[1]
h = h.split(",")
h.remove(sub)
g = f.split("|")[0] + "|" + ",".join(h)
else:
g = f
bd.write(g)
serv.privmsg(canal, "sub : " + sub + " enlevé de la bd pour " + canal)
else:
serv.privmsg(canal, "Erreur, le sub n'est pas dans la bd")
elif cmd == "addsub":
sub = message.split(" ")[1]
bd = open(self.fichier_reddit, "r")
add = 1
tmp = []
for f in bd:
tmp.append(f) # On ajoute la ligne -> tmpt est une image de la bd
try:
if sub in f.split("|")[1] and canal == f.split("|")[0]:
add = 0
except:
pass
bd.close()
if add == 1:
canalok = 0
bd = open(self.fichier_reddit, "w")
for f in tmp:
if canal == f.split("|")[0]:
g = f + sub + ","
canalok = 1
else:
g = f
bd.write(g)
if canalok == 0:
bd.write("\n" + canal + "|" + sub + ",")
bd.close()
serv.privmsg(canal, "Subreddit : " + sub + " ajouté a la bd pour " + canal)
else:
serv.privmsg(canal, "Subreddit deja dans la bd...")
elif fuzz.ratio(cmd, "reddit") > 80 :
full = False
if len(args) > 1 :
sub = args[1]
else :
sub = "jokes"
if len(args) > 2 :
if "full" in args[2] :
full = True
if time.time() - self.reddit_temps > 3:
self.reddit_temps = time.time()
try:
tmp = red.joke(sub, full)
except:
tmp = red.joke()
try:
for f in tmp:
serv.privmsg(canal, f)
time.sleep(0.5)
time.sleep(1)
except:
serv.privmsg(canal, "oups, c'est cassé...")
else:
serv.privmsg(canal, personne + ": Merci de patienter :)")
elif cmd in personnalizedCmd.keys() :
if personnalizedCmd[cmd]['channel'] == canal :
serv.privmsg(canal, personnalizedCmd[cmd]['result'])
if __name__ == "__main__":
Boooob().start()