Advertisement
Guest User

Untitled

a guest
Jul 27th, 2017
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.03 KB | None | 0 0
  1. # By Shaun Ren
  2. # A simple Python IRC bot
  3.  
  4. import socket
  5. import time
  6. import datetime
  7.  
  8.  
  9. def irc_login(network, port, nickname, username):
  10.     irc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  11.     irc.connect((network, port))
  12.     irc.send ('NICK ' + nickname + '\r\n')
  13.     irc.send ('USER ' + nickname + ' Linux Python :' + username + '\r\n' )
  14.    
  15.     data = irc.recv(4096)
  16.     while data.find('001') == -1: # not ok yet
  17.         if data.find('443') != -1: # 443?
  18.             nickname = raw_input('Invalid nickname. enter nickname: ')
  19.             irc.send ('NICK ' + nickname + '\r\n')
  20.             irc.send ('USER ' + nickname + ' Linux Python :' + username + '\r\n' )        
  21.         data = irc.recv(4096)
  22.  
  23.     return irc
  24.  
  25. def join_channel(irc, channel):
  26.     irc.send ('JOIN ' + channel + '\r\n')
  27.    
  28. def send_message(irc, dest, message):
  29.     irc.send ('PRIVMSG ' + dest + ' :' + message + '\r\n')
  30.    
  31. def disconnect(irc):
  32.     irc.send ('QUIT\r\n')
  33.     irc.close()
  34.    
  35.        
  36. def main():
  37.     network = raw_input('Enter network: ')
  38.     port = int(raw_input('Enter port: '))
  39.     nickname = raw_input('Enter nickname: ')
  40.     username = raw_input('Enter username: ')
  41.    
  42.     # try login
  43.     irc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  44.     irc.connect((network, port))
  45.     irc.send ('NICK ' + nickname + '\r\n')
  46.     irc.send ('USER ' + nickname + ' Linux Python :' + username + '\r\n' )
  47.    
  48.     data = irc.recv(4096)
  49.     while data.find('001') == -1: # not ok yet
  50.         if data.find('443') != -1: # 443?
  51.             nickname = raw_input('Invalid nickname. enter nickname: ')
  52.             irc.send ('NICK ' + nickname + '\r\n')
  53.             irc.send ('USER ' + nickname + ' Linux Python :' + username + '\r\n' )        
  54.         data = irc.recv(4096)
  55.    
  56.     join_channel(irc, raw_input('Join channel: '))
  57.    
  58.     while True:
  59.         data = irc.recv(4096)
  60.        
  61.         if data.find('PING') != -1: # pong!
  62.             irc.send('PONG ' + data.split()[1] + '\r\n')
  63.             print 'PONG message sent to ', data.split()[1]
  64.         elif data.find('PRIVMSG') != -1: # message
  65.             nick = data.split('!')[0].replace(':','')
  66.             message = ':'.join(data.split(':')[2:]).strip('\r\n')
  67.             dest = ''.join(data.split(':')[:2]).split(' ')[-2]
  68.            
  69.             print '(', dest, ')', nick + ':', message
  70.            
  71.            
  72.             if message.lower().find('%pybot') == 0: # a possible command
  73.                 command = message.lower().split (' ') [1]
  74.                 if command == 'time':
  75.                     send_message(irc, dest, str(datetime.datetime.now()))
  76.                 elif command == 'echo':
  77.                     send_message(irc, dest, ' '.join(message.split(' ')[2:]))
  78.                 elif command == 'count':
  79.                     try:
  80.                        
  81.                         count = int(message.split(' ')[2])
  82.                         interval = float(message.split(' ')[3])
  83.                        
  84.                         if interval < 0.5:
  85.                             interval = 0.5
  86.                        
  87.                         for i in range(1, count+1):
  88.                             send_message(irc, dest, 'Count: ' + str(i))
  89.                             time.sleep(interval)
  90.                     except ValueError, Argument:
  91.                         print "Exception!", Argument
  92.                         pass
  93.                 elif command == 'info':
  94.                     send_message(irc, dest, "Python IRC Bot By Shaun Ren")                
  95.                 elif command == 'disconnect':
  96.                     if nick.lower() == 'shaunren': #disconnect
  97.                         send_message(irc, dest, "Disconnecting...")
  98.                         print "Disconnecting..."
  99.                         disconnect(irc)
  100.                         print "Disconnected."
  101.                         return
  102.                     else:
  103.                         send_message(irc, dest, 'Disconnect command not permitted to ' + nick)
  104.                 else:
  105.                     send_message(irc, dest, 'Unrecoginized command ' + command)
  106.    
  107.    
  108. if __name__ == '__main__':
  109.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement