Support Forums

Full Version: [Python] IRC Bot
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Simple IRC Bot.

Code:
import socket
import thread
import time
import sys
import re

class IRCBot:
    class IRCMessage:
        def __init__(self, rawdata, mesreg):
            try:
                self.raw = rawdata
                #self.regexmatch = mesreg.match(rawdata)
                self.regexmatch = None
                if not (self.regexmatch == None):
                    self.type = self.regexmatch.group(2)
                    self.message = self.regexmatch.group(3)
                    self.userdata = self.regexmatch.group(1)
            except:
                print "Message parse failed:",sys.exc_info()[0]
                self.regexmath = None
                self.type = None
                self.message = None
                self.userdata = None
    
    def __init__(self, _server, _port, _nick, _channel, _owner):
        self.server = _server
        self.port = _port
        self.nick = _nick
        self.channel = _channel
        self.owner = _owner
        self.quit = False
        self.restart = False
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.sock = s
        print "Connecting to server:",self.server
        contup = (self.server, self.port)
        self.sock.connect(contup)
        print "Connected, sending user info"
        self.sock.send("NICK " + self.nick + "\r\n")
        self.sock.send("USER " + self.nick + " " + self.nick + " " + self.nick + " :" + self.nick + "\r\n")
        self.msg = ""
        print "Joining channel:",self.channel
        self.join(self.channel)
        print "Initialising message handler"
        self._mesreg = re.compile("^(?:[:@]([^\\s]+) )?([^\\s]+)(?: ((?:[^:\\s][^\\s]* ?)*))?(?: ?:(.*))?$")
        print "Starting listen thread"
        self._thread = thread.start_new(self.receiveloop, (None,))
        
        

    def sendraw(self,raw):
        self.sock.send(raw + "\r\n")

    def receiveloop(self, _a):
        while True:
            try:
                if (self.quit):
                    break;
                self.msg += self.sock.recv(1024)
                msgs = self.msg.split("\n")
                while (len(msgs) >= 1):
                    _temp_msg = msgs.pop()
                    if ("PING" in _temp_msg):
                        _temp_spl = _temp_msg.split()
                        self.sendraw("PONG " + _temp_spl[1])
                    self.msg = self.msg[len(_temp_msg)+2:]
                    #handle message here
                    thread.start_new(self.handlemessage,(_temp_msg,))
            except:
                print "Unexpected error:", sys.exc_info()[0]
                time.sleep(2)

    def handlemessage(self,raw):
        try:
            
            _msg = self.IRCMessage(raw,self._mesreg)
            if not (_msg.regexmatch == None):
                print _msg.type + ":" + _msg.userdata +">",_msg.message
            else:
                print "RAW ---",_msg.raw
        except:
            print "Failed to parse message:",sys.exc_info()[0]
        

    def join(self,channel):
        self.sendraw("JOIN " + channel)
    
    def part(self,channel):
        self.sendraw("PART " + channel)

    def privmsg(self,target,message):
        self.sendraw("PRIVMSG " + target + " " + message)
    
    def sendquit(self,message):
        self.sendraw("QUIT " + message)
        time.sleep(3)

    def notice(self,target,message):
        self.sendraw("NOTICE " + target + " " + message)

    def beginrestart(self,message):
        self.sendquit(message)
        self.restart = True
(08-05-2010, 11:42 PM)BlaiR Wrote: [ -> ]Simple IRC Bot.

Code:
import socket
import thread
import time
import sys
import re

class IRCBot:
    class IRCMessage:
        def __init__(self, rawdata, mesreg):
            try:
                self.raw = rawdata
                #self.regexmatch = mesreg.match(rawdata)
                self.regexmatch = None
                if not (self.regexmatch == None):
                    self.type = self.regexmatch.group(2)
                    self.message = self.regexmatch.group(3)
                    self.userdata = self.regexmatch.group(1)
            except:
                print "Message parse failed:",sys.exc_info()[0]
                self.regexmath = None
                self.type = None
                self.message = None
                self.userdata = None
    
    def __init__(self, _server, _port, _nick, _channel, _owner):
        self.server = _server
        self.port = _port
        self.nick = _nick
        self.channel = _channel
        self.owner = _owner
        self.quit = False
        self.restart = False
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.sock = s
        print "Connecting to server:",self.server
        contup = (self.server, self.port)
        self.sock.connect(contup)
        print "Connected, sending user info"
        self.sock.send("NICK " + self.nick + "\r\n")
        self.sock.send("USER " + self.nick + " " + self.nick + " " + self.nick + " :" + self.nick + "\r\n")
        self.msg = ""
        print "Joining channel:",self.channel
        self.join(self.channel)
        print "Initialising message handler"
        self._mesreg = re.compile("^(?:[:@]([^\\s]+) )?([^\\s]+)(?: ((?:[^:\\s][^\\s]* ?)*))?(?: ?:(.*))?$")
        print "Starting listen thread"
        self._thread = thread.start_new(self.receiveloop, (None,))
        
        

    def sendraw(self,raw):
        self.sock.send(raw + "\r\n")

    def receiveloop(self, _a):
        while True:
            try:
                if (self.quit):
                    break;
                self.msg += self.sock.recv(1024)
                msgs = self.msg.split("\n")
                while (len(msgs) >= 1):
                    _temp_msg = msgs.pop()
                    if ("PING" in _temp_msg):
                        _temp_spl = _temp_msg.split()
                        self.sendraw("PONG " + _temp_spl[1])
                    self.msg = self.msg[len(_temp_msg)+2:]
                    #handle message here
                    thread.start_new(self.handlemessage,(_temp_msg,))
            except:
                print "Unexpected error:", sys.exc_info()[0]
                time.sleep(2)

    def handlemessage(self,raw):
        try:
            
            _msg = self.IRCMessage(raw,self._mesreg)
            if not (_msg.regexmatch == None):
                print _msg.type + ":" + _msg.userdata +">",_msg.message
            else:
                print "RAW ---",_msg.raw
        except:
            print "Failed to parse message:",sys.exc_info()[0]
        

    def join(self,channel):
        self.sendraw("JOIN " + channel)
    
    def part(self,channel):
        self.sendraw("PART " + channel)

    def privmsg(self,target,message):
        self.sendraw("PRIVMSG " + target + " " + message)
    
    def sendquit(self,message):
        self.sendraw("QUIT " + message)
        time.sleep(3)

    def notice(self,target,message):
        self.sendraw("NOTICE " + target + " " + message)

    def beginrestart(self,message):
        self.sendquit(message)
        self.restart = True
DId you code this yourself?
(08-05-2010, 11:43 PM)XΞnon-C Wrote: [ -> ]DId you code this yourself?

No.

I Can't Find Reference to the origonal coder.

these are just some sources I Have on my vps. for testing.
Thanks for share.
(03-29-2011, 01:06 PM)dan08 Wrote: [ -> ]source: http://www.axvis.net/thread-1473-post-6073.html
Old thread mate. But thanks for the source.
Don't download, I tried it but not works :S