N-PN White-Hat Project
[Python] Nos bots irc - Version imprimable

+- N-PN White-Hat Project (https://dev.n-pn.fr/forum)
+-- Forum : Programmation (https://dev.n-pn.fr/forum/forumdisplay.php?fid=72)
+--- Forum : Langages interprétés (https://dev.n-pn.fr/forum/forumdisplay.php?fid=27)
+--- Sujet : [Python] Nos bots irc (/showthread.php?tid=2148)



[Python] Nos bots irc - InstinctHack - 28-08-2012

Je crée ce topic pour partager nos code de nos bot irc codé en python
la RFC de IRC ( http://abcdrfc.free.fr/rfc-vf/rfc1459.html )
http://python.developpez.com/faq/?page=Thread
J'ai commencer avec ce code : (simpliste mais utile pour demarer, alors merci nowz pour m'avoir donner l'envie, le code et les explications pour me lancer)
http://n0wz.blogspot.fr/2012/08/13-python-bot-irc-kit-de-premiere.html

(25-08-2012, 10h40)aaSSfxxx a écrit : La ligne
Code PYTHON :
data = irc.recv(4096)
permet de recevoir les données de ta socket, i.e du bot.
Cette fonction est "bloquante", c'est-à-dire qu'elle bloque le programme jusqu'à ce que des données soient effectivement reçues. Si tu t'amuses à parler sur le chan où est le bot, tu devrais voir d'autres "recoit des infos" par contre Wink

Message par rapport au beug des retours à la ligne :
(27-08-2012, 15h22)aaSSfxxx a écrit : A mon avis, c'est à cause de la taille de ton buffer.

Au lieu de faire un bête "recv", le mieux est de créer un "fichier" à partir de ta socket via
Code :
file = s.makefile()
(où s est ta socket), puis
de remplacer ton recv par
Code PYTHON :
file.readline()
(ce qui fait que tu peux virer le split de \r par la même occasion Wink )
Mon bot est en cours de maj...


RE: Nos bots irc - ark - 28-08-2012

Le mien n'est actuellement qu'un squelette de bot, mais je le poste pour ceux qui sauraient pas trop comment s'y prendre au début.
J'ajouterais un bot plus évolué un jour, quand j'aurais le temps je pense. x)

Ma fonction de parsing est un peu foireuse je dois l'avouer... x]

Code PYTHON :
#!/usr/bin/env python
# -*- coding: utf8 -*-

import socket, time

HOST= 'irc.n-pn.fr'
CHANNEL='#bot'
PORT=6667
NICK='Skel'
IDENT='skelbot'
REALNAME='skelbot'
MASTER='Ark'

def chan_msg(msg, chan = CHANNEL):
    server.send('PRIVMSG '+chan+' :'+msg+'\n')

def parse(msg):
    try:
        k_msg = msg.split(' ')[1].strip()
        sender = msg.split('!')[0].strip(':')
        n_msg = ":".join(msg.split(':')[2:]).strip(':').strip()
        if n_msg.find(NICK) != -1 and n_msg.find("leave") != -1 and sender == MASTER:
            server.send("QUIT\n")
            return 1
    except:
        pass
    return 0

def ping(id):
    server.send('PONG '+id+'\n')

def connect():
    server=socket.socket()
    server.connect((HOST, PORT))
    time.sleep(1)
    server.send('USER '+IDENT+' '+HOST+' bla :'+REALNAME+'\n')
    server.send('NICK '+NICK+'\n')
    server.send('JOIN '+CHANNEL+'\n')
    return server


if __name__ == "__main__":
    server = connect()
    while 1:
        line = server.recv(500)
        print line
        if parse(line) == 1:
            break
        line = line.strip()
        line = line.split()
        if(line[0] == 'PING'):
            ping(line[1])

 



RE: Nos bots irc - Zhyar - 28-08-2012

C'est pas un bot très au point et je pense pas que le code soit vraiment beau. C'est vraiment un bot basique mais y a un parser VDM ça pourrait servir donc je partage.

Code PYTHON :
#!/usr/bin/python
# -*- coding: utf8 -*-

import socket, string, time, ssl
import urllib, re

network = 'irc.big-daddy.fr'
nick = 'Paic_Citron'
chan = 'bot'
port = 6697

socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
socket.connect((network,port))
irc = ssl.wrap_socket(socket)
print irc.recv(4096)
irc.send('NICK %s\r\n' % nick)
print irc.recv(4096)
irc.send('USER %s %s %s rogrammation masculine\r\n' % (nick,nick,nick))
print irc.recv(4096)
irc.send('JOIN #%s\r\n' % chan)
print irc.recv(4096)
irc.send('PRIVMSG #%s :Hello world!\r\n' % chan)
print irc.recv(4096)
#irc.send('QUIT\r\n')

while True:
    data = irc.recv(4096)
    if data.find('PING') != -1:
        irc.send('PONG '+data.split()[1]+'\r\n')
    if data.find('!gtfo\r\n') != -1:
        irc.send('QUIT\r\n')
        exit()
    if data.find('!vdm\r\n') != -1:
        url = 'http://www.viedemerde.fr/aleatoire'
        page = urllib.urlopen(url).read()
        parse = re.findall("\<div class=\"post article\" id=\"(.+?)\">(.+?)</div", page)
        for article in parse:
            parse1 = re.findall("\<a href=\"(.+?)" + article[0] + "\" class=\"fmllink\">(.+?)</a>", article[1])
            vdm = ''
            for test in parse1:
                vdm += test[1]
                vdm = re.sub('"','"',vdm)
        irc.send('PRIVMSG #%s :http://viedemerde.fr/%s : %s\r\n' % (chan,article[0],vdm))
    print data



RE: Nos bots irc - supersnail - 23-09-2012

T'es courageux pour faire une GUI :')


RE: Nos bots irc - ark - 23-09-2012

Genre moi j'suis lieutenant de ton bot Khaled \o/ kewl ! :p


RE: Nos bots irc - Creepy_p0ney - 23-09-2012

Moi j'ai fait le début de mon bot en c, il est connecté sur #bot, (enfin que quand moi je suis connecté)


RE: Nos bots irc - Swissky - 23-09-2012

Le lien du blog est HS, voici le nouveau enfin je pense que c'est lui : http://n0wz.blogspot.fr/2012/08/13-python-bot-irc-kit-de-premiere.html Wink
C'est d'ailleurs très bien expliqué Smile


RE: Nos bots irc - InstinctHack - 23-09-2012

@ supernail bah actuellement rien n'y a rien de fait de ce côté la :p
@Ark t'as vu ca un peu Wink ca devais vous donner des droits supplementaires dans certaines fonctions du bot.
@fireware j'aimerais bien voir ton code pour apprendre la gestion des sockets en c.
@swissky merci pour la remarque, j'éditerais quand je serais sur mon pc (sur phone c'est vraiment pas sexy :p )


RE: Nos bots irc - Creepy_p0ney - 24-09-2012

Ouais j'vais t'filer mon code mais c'est quoi les balises pour afficher un code ?


RE: Nos bots irc - Horgh - 24-09-2012

[.code]insert code here[/.code]

Sans les points évidemment.