Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # By Shaun Ren
- # A simple Python IRC bot
- import socket
- import time
- import datetime
- def irc_login(network, port, nickname, username):
- irc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- irc.connect((network, port))
- irc.send ('NICK ' + nickname + '\r\n')
- irc.send ('USER ' + nickname + ' Linux Python :' + username + '\r\n' )
- data = irc.recv(4096)
- while data.find('001') == -1: # not ok yet
- if data.find('443') != -1: # 443?
- nickname = raw_input('Invalid nickname. enter nickname: ')
- irc.send ('NICK ' + nickname + '\r\n')
- irc.send ('USER ' + nickname + ' Linux Python :' + username + '\r\n' )
- data = irc.recv(4096)
- return irc
- def join_channel(irc, channel):
- irc.send ('JOIN ' + channel + '\r\n')
- def send_message(irc, dest, message):
- irc.send ('PRIVMSG ' + dest + ' :' + message + '\r\n')
- def disconnect(irc):
- irc.send ('QUIT\r\n')
- irc.close()
- def main():
- network = raw_input('Enter network: ')
- port = int(raw_input('Enter port: '))
- nickname = raw_input('Enter nickname: ')
- username = raw_input('Enter username: ')
- # try login
- irc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- irc.connect((network, port))
- irc.send ('NICK ' + nickname + '\r\n')
- irc.send ('USER ' + nickname + ' Linux Python :' + username + '\r\n' )
- data = irc.recv(4096)
- while data.find('001') == -1: # not ok yet
- if data.find('443') != -1: # 443?
- nickname = raw_input('Invalid nickname. enter nickname: ')
- irc.send ('NICK ' + nickname + '\r\n')
- irc.send ('USER ' + nickname + ' Linux Python :' + username + '\r\n' )
- data = irc.recv(4096)
- join_channel(irc, raw_input('Join channel: '))
- while True:
- data = irc.recv(4096)
- if data.find('PING') != -1: # pong!
- irc.send('PONG ' + data.split()[1] + '\r\n')
- print 'PONG message sent to ', data.split()[1]
- elif data.find('PRIVMSG') != -1: # message
- nick = data.split('!')[0].replace(':','')
- message = ':'.join(data.split(':')[2:]).strip('\r\n')
- dest = ''.join(data.split(':')[:2]).split(' ')[-2]
- print '(', dest, ')', nick + ':', message
- if message.lower().find('%pybot') == 0: # a possible command
- command = message.lower().split (' ') [1]
- if command == 'time':
- send_message(irc, dest, str(datetime.datetime.now()))
- elif command == 'echo':
- send_message(irc, dest, ' '.join(message.split(' ')[2:]))
- elif command == 'count':
- try:
- count = int(message.split(' ')[2])
- interval = float(message.split(' ')[3])
- if interval < 0.5:
- interval = 0.5
- for i in range(1, count+1):
- send_message(irc, dest, 'Count: ' + str(i))
- time.sleep(interval)
- except ValueError, Argument:
- print "Exception!", Argument
- pass
- elif command == 'info':
- send_message(irc, dest, "Python IRC Bot By Shaun Ren")
- elif command == 'disconnect':
- if nick.lower() == 'shaunren': #disconnect
- send_message(irc, dest, "Disconnecting...")
- print "Disconnecting..."
- disconnect(irc)
- print "Disconnected."
- return
- else:
- send_message(irc, dest, 'Disconnect command not permitted to ' + nick)
- else:
- send_message(irc, dest, 'Unrecoginized command ' + command)
- if __name__ == '__main__':
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement