Bot IRC en python
Bot en python avec ircbot : lib non dispo pour python3
Je vous présente juste un petit script commenté qui explique les bases du module ircbot . ( c'est pas la source de gibotGirl
)
Installer python-irclib
sudo apt-get install python-irclib
le code : ![]()
#!/usr/bin/python
# -*- coding: utf8 -*-
import irclib
import ircbot
from random import randrange
CANAL = "#shovel-crew" # Canal ou l'on veut la connection
class BotManon(ircbot.SingleServerIRCBot):
def __init__(self):
ircbot.SingleServerIRCBot.__init__(self, [("irc.freenode.net", 6667)],
"shovelGirl","Bot réalisé en Python avec ircbot") # ici choisir le nom du bot ici Bot_botPY
self.insultes = ["fuck", "connard", "connasse"] # On précise les mots interdit
self.punch = ["donne un coup de fouet à ", "donne un coup de pelle à ",
"casse les cotes de ", "donne un coup de tête à "]
# Creation d'une liste pour réponse aléatoire
def on_welcome(self, serv, ev): # A la connection au serveur
serv.join(CANAL)
serv.privmsg(CANAL, "Salut a tous") # Le bot est poli :-)
def on_privmsg(self, serv, ev): # Quand le bot recoit un message en privé
auteur = irclib.nm_to_n(ev.source()) # On recupére l'auteur du message
message = ev.arguments()[0] # On recupére le message
arguments = message.split(' ')
if (auteur == "Manon_crunch"): # Administrateur du bot permet de lui donner des ordres
if '&dire' in arguments[0]:
serv.privmsg(CANAL, message[5:]) # le bot renvoie le message que vous lui avez envoyer sans le mot clef
if '&action' in arguments[0]:
serv.action(CANAL, message[7:]) # le bot fait l'action /me plus le reste du message
if '&exit' in arguments[0]:
serv.disconnect("A la prochaine bye")
else: # Si pas l'administrateur
serv.privmsg(auteur, "Ho !!! Je suis un bot !!!!") # On envoit le message en privé a l'auteur
def on_pubmsg(self, serv, ev): # A là reception des Messages public sur le canal
auteur = irclib.nm_to_n(ev.source())
message = ev.arguments()[0]
arguments = message.split(" ") # Transformation du message en liste
nombreArg = len(arguments) # On compte le nombre d'arguments
print auteur+' : '+message # On affiche le message dans le terminal
for mot in self.insultes: # On vérifit que le mot n'est pas une insulte
if mot in message.lower() : # On passe le message en minuscule pour etre sûr :-)
serv.kick(CANAL, auteur, "Pas d'insultes , plop dehors !!!!!") # Si c'est une insulte on expulse l'auteur
break
if '&recherche' in arguments[0]: # si le premier mot est &recherche
# On forme une url
url = "http://www.google.com/search?q="+message[10:].replace(' ', '+')
serv.privmsg(CANAL, url) # On envoit l'url
if '&vodka' in arguments[0]:
if nombreArg < 2:
serv.action(CANAL, "prend une volka avec "+auteur) # serv.action comme /me pour le bot
else:
if (arguments[1] == "*") or (arguments[1] == "all") :
serv.action(CANAL, "paye sa tournée de vodka")
droit = randrange(1,9) # pour réponse aléatoire
if (droit == 1) or (droit == 2):
serv.privmsg(CANAL, "Non "+arguments[1]+" a trop prit de vodka") # serv.privmsg
if (droit == 3) or (droit == 4):
serv.action(CANAL, "se sauve avec la bouteille de vodka")
else:
serv.action(CANAL, "offre une vodka à "+auteur)
if '&punch' in arguments[0]:
action = randrange(0,len(self.punch))
if (arguments[1].lower() == "shovelgirl") or (arguments[1].lower() == "manon_crunch"): # On protége son bot et son speudo
serv.action(CANAL, "donne un gros coup de pelle à "+auteur) #On se venge
else:
serv.action(CANAL, self.punch[action]+arguments[1]) # Le bot punch
def on_action(self, serv, ev): # Si message recu dans le canal avec la commande /me
auteur = irclib.nm_to_n(ev.source())
message = ev.arguments()[0]
print auteur+' : '+message # On affiche le message dans le terminal
def on_kick(self, serv, ev): # Si le bot a été kick on se reconnect au canal
serv.join(CANAL)
if __name__ == "__main__":
BotManon().start()

