Advertisement
Aha2Y

Untitled

Apr 8th, 2012
347
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 15.11 KB | None | 0 0
  1. #!/usr/bin/python
  2. from ConfigParser import RawConfigParser as ConfParser
  3. from BeautifulSoup import BeautifulSoup
  4. from optparse import OptionParser
  5. from collections import deque
  6. from time import sleep, time, gmtime, strftime
  7. import ConfigParser
  8. import random
  9. import os
  10. import sys
  11. import socket
  12. import codecs
  13. from irc import *
  14. from select import select
  15. import urllib
  16. import imp
  17. import modules.fml
  18. import modules.meme
  19. import modules.bitly
  20. import modules.eightball
  21. import threading
  22.  
  23. my = IRCbot()
  24. start = time()
  25. server = "localhost"
  26. port = 1026
  27. nickpass = "nope <3"
  28. operlogin = "services nope<3"
  29. channels = "#chat"
  30. version = "1.0.0"
  31. logchan = "#s"
  32.  
  33. internets = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
  34. internets.connect((server, port))
  35. game = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
  36. game.connect((server, port))
  37. pseudo = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
  38. pseudo.connect((server, port))
  39. logger = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
  40. logger.connect((server, port))
  41.  
  42. try:
  43.    config = ConfigParser.RawConfigParser()
  44.    config.readfp(codecs.open("config.ini", "r", "utf8"))
  45. except IOError as config:
  46.    sys.exit()
  47.    
  48. class ChannelList(list): # Subclass of list, so it inherits every method of list
  49.     def clear(self): # clear all elements
  50.         for x in range(len(self)):
  51.             del self[0]
  52.     def load(self, filename): # load from filename
  53.         self.clear()
  54.         f = open(filename, "r")
  55.         for chan in f: # line by line
  56.             self.append(chan)
  57.         f.close()
  58.     def save(self, filename): # save into file
  59.         f = open(filename, "w")
  60.         f.write("\n".join(self)) # newline seperated (UNIX-newline)
  61.         f.close()
  62.        
  63. internets_channels = ChannelList()
  64. internets_channels.load("internets.channels.txt")
  65. gameserv_channels = ChannelList()
  66. gameserv_channels.load("gameserv.channels.txt")
  67. pseudoserv_channels = ChannelList()
  68. pseudoserv_channels.load("pseudoserv.channels.txt")
  69. logger_channels = ChannelList()
  70. logger_channels.load("pylog.channels.txt")
  71.  
  72. def internets_bot(sock):
  73.     internets.send('NICK Internets\r\n')
  74.     internets.send('USER python Internets Internets :[Internets %s]\r\n' % version)
  75.     while 1:
  76.         data = readline(sock)
  77.         raw = parse(data)
  78.         #print("[Internets] %s" % raw)
  79.         if raw[0].lower() == "ping":
  80.            internets.send("PONG {reply}\r\n".format(reply = raw[1]))
  81.         if raw[0].lower().startswith("nickserv!"):
  82.             if raw[1] == "NOTICE" and "This nickname is registered" in raw[3]:
  83.                 internets.send('PRIVMSG NickServ :identify %s \r\n' % nickpass)
  84.                 internets.send('OPER %s \r\n' % operlogin)
  85.                 internets.send('JOIN %s \r\n' % channels)
  86.                 for channel in internets_channels:
  87.                     internets.send('JOIN %s \r\n' % channel)
  88.         if raw[1] == "PRIVMSG":
  89.             my.sender = raw[0]
  90.             my.nick = raw[0].split("!")[0]
  91.             my.auth = data.split('@')[0][1:]
  92.             if len(raw) > 3:
  93.                 if raw[3] == ".help":
  94.                     internets.send('NOTICE %s :Internets: .help internets - for internets commands.\r\n' % my.nick)
  95.                     continue
  96.                 if raw[3].lower() == ".help internets":
  97.                     internets.send('NOTICE %s :Welcome to [Internets, version %s] by Aha2Y. Here is a list of my commands.\r\n' % (my.nick, version))
  98.                     internets.send('NOTICE %s :     .fml    gets a randomrandom entry from fmylife.com\r\n' % my.nick)
  99.                     internets.send('NOTICE %s :     .meme    spews out a meme from automeme.net\r\n' % my.nick)
  100.                     internets.send('NOTICE %s :     .slogan    makes a slogan from your given phrase\r\n' % my.nick)
  101.                     internets.send('NOTICE %s :     .shorten    makes your long url short with bitly\r\n' % my.nick)
  102.                 if raw[3].startswith(".reload "):
  103.                     try:
  104.                         if config.get('staff', my.auth) == 'admin':
  105.                             if raw[3].split(" ", 1)[1] == "fml":
  106.                                 imp.reload(modules.fml)
  107.                                 internets.send('PRIVMSG %s :Reloaded FML module.\r\n' % raw[2])
  108.                     except ConfigParser.NoOptionError:
  109.                         continue
  110.                 if raw[3] == ".fml":
  111.                     q = modules.fml.get()
  112.                     internets.send('PRIVMSG %s :[fml/#%s] %s\r\n' % (raw[2], q.number, q.text))
  113.                     internets.send('PRIVMSG %s :%s - %s\r\n' % (raw[2], q.agree, q.disagree))
  114.                 if raw[3] == ".meme":
  115.                     q = modules.meme.get()
  116.                     internets.send('PRIVMSG %s :[Meme] %s\r\n' % (raw[2], q.meme))
  117.                     imp.reload(modules.meme)
  118.                 if raw[3].startswith(".slogan"):
  119.                     try:
  120.                         slogan_topic = raw[3].split(" ", 1)[1]
  121.                         slogan_url = urllib.urlopen("http://parsers.faux-bot.com/slogan/%s" % slogan_topic)
  122.                         slogansoup = BeautifulSoup(slogan_url)
  123.                         x = str(slogansoup)
  124.                         x = x.split()
  125.                         slogan = " ".join(x[1:]).strip("End Response:")
  126.                         internets.send('PRIVMSG %s :[SloganMaker] "%s"\r\n' % (raw[2], slogan))
  127.                     except:
  128.                         internets.send('NOTICE %s :Syntax: .slogan <url>\r\n' % my.nick)    
  129.                 if raw[3].startswith(".shorten"):
  130.                     try:
  131.                         shorten = raw[3].split(" ", 1)[1]
  132.                         api = modules.bitly.Api(login='aha2y', apikey='R_68fd8f8405600aab706feecbc07ea066')
  133.                         short=api.shorten(shorten,{'history':1})
  134.                         internets.send('PRIVMSG %s :[Bitly] %s\r\n' % (raw[2], short))
  135.                     except:
  136.                         internets.send('NOTICE %s :Syntax: .shorten <url>\r\n' % my.nick)      
  137.  
  138. def game_bot(sock):
  139.     game.send('NICK GameServ\r\n')
  140.     game.send('USER python GameServ GameServ :[GameServ %s]\r\n' % version)
  141.     while 1:
  142.         data = readline(sock)
  143.         raw = parse(data)
  144.         #print("[Internets] %s" % raw)
  145.         if raw[0].lower() == "ping":
  146.            game.send("PONG {reply}\r\n".format(reply = raw[1]))
  147.         if raw[0].lower().startswith("nickserv!"):
  148.             if raw[1] == "NOTICE" and "This nickname is registered" in raw[3]:
  149.                 game.send('PRIVMSG NickServ :identify %s \r\n' % nickpass)
  150.                 game.send('OPER %s \r\n' % operlogin)
  151.                 game.send('JOIN %s \r\n' % channels)
  152.                 for channel in gameserv_channels:
  153.                     game.send('JOIN %s \r\n' % channel)
  154.         if raw[1] == "PRIVMSG":
  155.             my.sender = raw[0]
  156.             my.nick = raw[0].split("!")[0]
  157.             my.auth = data.split('@')[0][1:]
  158.             if len(raw) > 3:
  159.                 if raw[3] == ".help":
  160.                     game.send('NOTICE %s :GameServ: .help gameserv - for gameserv commands.\r\n' % my.nick)
  161.                     continue
  162.                 if raw[3].lower() == ".help gameserv":
  163.                     game.send('NOTICE %s :Welcome to [GameServ, version %s] by Aha2Y. Here is a list of my commands.\r\n' % (my.nick, version))
  164.                     game.send('NOTICE %s :     .8ball     Ask the magical eightball something.\r\n' % my.nick)
  165.                 if raw[3].startswith(".reload "):
  166.                     try:
  167.                         if config.get('staff', my.auth) == 'admin':
  168.                             if raw[3].split(" ", 1)[1] == "fml":
  169.                                 imp.reload(modules.fml)
  170.                                 game.send('PRIVMSG %s :Reloaded FML module.\r\n' % raw[2])
  171.                     except ConfigParser.NoOptionError:
  172.                         continue
  173.                 if raw[3].startswith(".8ball"):
  174.                     try:
  175.                         question = raw[3].split(" ", 1)[1]
  176.                         q = modules.eightball.get()
  177.                         game.send('PRIVMSG %s :%s: %s\r\n' % (raw[2], my.nick, q.eightball))
  178.                         imp.reload(modules.eightball)
  179.                     except:
  180.                         game.send('NOTICE %s :Syntax: .8ball <question>\r\n' % my.nick)      
  181.                        
  182. def pseudo_bot(sock):
  183.     pseudo.send('NICK pseudoServ\r\n')
  184.     pseudo.send('USER Python pseudoServ pseudoServ :[pseudoServ %s]\r\n' % version)
  185.     while 1:
  186.         data = readline(sock)
  187.         raw = parse(data)
  188.         print("[Psuedo] %s" % raw)
  189.         if raw[0].lower() == "ping":
  190.            pseudo.send("PONG {reply}\r\n".format(reply = raw[1]))
  191.         if raw[0].lower().startswith("nickserv!"):
  192.             if raw[1] == "NOTICE" and "This nickname is registered" in raw[3]:
  193.                 pseudo.send('PRIVMSG NickServ :identify %s \r\n' % nickpass)
  194.                 pseudo.send('OPER %s \r\n' % operlogin)
  195.                 pseudo.send('JOIN %s \r\n' % channels)
  196.                 for channel in pseudoserv_channels:
  197.                     pseudo.send('JOIN %s \r\n' % channel)
  198.         if raw[1] == "PRIVMSG":
  199.             my.sender = raw[0]
  200.             my.nick = raw[0].split("!")[0]
  201.             my.auth = data.split('@')[0][1:]
  202.             if len(raw) > 3:
  203.                 if raw[3] == ".help":
  204.                     pseudo.send('NOTICE %s :pseudoServ: .help pseudoserv - for gameserv commands.\r\n' % my.nick)
  205.                     continue
  206.                 if raw[3].lower() == ".help gameserv":
  207.                     pseudo.send('NOTICE %s :Welcome to [pseudoServ, version %s] by Aha2Y. Here is a list of my commands.\r\n' % (my.nick, version))
  208.                 if raw[3].startswith(".assign "):
  209.                     if raw[2] == "#chat":
  210.                        text_split = raw[3].split(" ")
  211.                        bot = text_split[1].lower()
  212.                        chan = text_split[2]
  213.                        if bot == "internets":
  214.                            if chan:
  215.                                pseudo.send('PRIVMSG %s :Assigning %s to %s\r\n' % (raw[2], bot, chan))
  216.                                internets.send('JOIN %s \r\n' % chan)
  217.                                internets_channels.append(chan)
  218.                                internets_channels.save("internets.channels.txt")
  219.                            else:
  220.                                pseudo.send('PRIVMSG %s :Please enter a channel. kthx.\r\n' % (raw[2], chan))          
  221.                        if bot == "gameserv":
  222.                            if chan:
  223.                                pseudo.send('PRIVMSG %s :Assigning %s to %s\r\n' % (raw[2], bot, chan))
  224.                                game.send('JOIN %s \r\n' % chan)
  225.                                gameserv_channels.append(chan)
  226.                                gameserv_channels.save("gameserv.channels.txt")
  227.                            else:
  228.                                pseudo.send('PRIVMSG %s :Please enter a channel. kthx.\r\n' % (raw[2], chan))                                    
  229.                        else:
  230.                            pseudo.send('PRIVMSG %s :Bot %s does not exist.\r\n' % (raw[2], bot))          
  231.                 if raw[3].startswith(".unassign "):
  232.                     if raw[2] == "#chat":
  233.                        text_split = raw[3].split(" ")
  234.                        bot = text_split[1].lower()
  235.                        chan = text_split[2]
  236.                        if bot == "internets":
  237.                            if chan:
  238.                                pseudo.send('PRIVMSG %s :Unassigning %s from %s\r\n' % (raw[2], bot, chan))
  239.                                internets.send('PART %s \r\n' % chan)
  240.                                channels.remove(chan)
  241.                                internets_channels.save("internets.channels.txt")
  242.                            else:
  243.                                pseudo.send('PRIVMSG %s :Please enter a channel. kthx.\r\n' % (raw[2], chan))                
  244.                        if bot == "gameserv":
  245.                            if chan:
  246.                                pseudo.send('PRIVMSG %s :Unassigning %s from %s\r\n' % (raw[2], bot, chan))
  247.                                game.send('PART %s \r\n' % chan)
  248.                                channels.remove(chan)
  249.                                gameserv_channels.save("gameserv.channels.txt")
  250.                            else:
  251.                                pseudo.send('PRIVMSG %s :Please enter a channel. kthx.\r\n' % (raw[2], chan))                                  
  252.                        else:
  253.                            pseudo.send('PRIVMSG %s :Bot %s does not exist.\r\n' % (raw[2], bot))                                  
  254.                 if raw[3] == ".uptime":
  255.                     end = time()
  256.                     uptime = end - start
  257.                     pseudo.send('PRIVMSG %s :Services are running for %s \r\n' % (raw[2], duration_human(uptime)))    
  258.                 if raw[3].startswith(".massjoin "):
  259.                    text_split = raw[3].split(" ")
  260.                    victim = text_split[1].lower()
  261.                    amount = int(text_split[2])
  262.                    count = 1
  263.                    pseudo.send('PRIVMSG %s :Massjoining %s to %s Channels.\r\n' % (raw[2], victim, amount))
  264.                    while count < amount:
  265.                        pseudo.send('SAJOIN %s #random%s\n' % (victim, int(count)))
  266.                        count = count+1
  267.                        
  268. def logger_bot(sock):
  269.     logger.send('NICK PyLogger\r\n')
  270.     logger.send('USER Python pseudoServ pseudoServ :[pseudoServ %s]\r\n' % version)
  271.     while 1:
  272.         data = readline(sock)
  273.         raw = parse(data)
  274.         #print("[Internets] %s" % raw)
  275.         if raw[0].lower() == "ping":
  276.            logger.send("PONG {reply}\r\n".format(reply = raw[1]))
  277.         if raw[0].lower().startswith("nickserv!"):
  278.             if raw[1] == "NOTICE" and "This nickname is registered" in raw[3]:
  279.                 logger.send('PRIVMSG NickServ :identify %s \r\n' % nickpass)
  280.                 logger.send('OPER %s \r\n' % operlogin)
  281.                 logger.send('JOIN %s \r\n' % channels)
  282.                 for channel in logger_channels:
  283.                     logger.send('JOIN %s \r\n' % channel)
  284.         if raw[1] == "PRIVMSG":
  285.             my.sender = raw[0]
  286.             my.nick = raw[0].split("!")[0]
  287.             my.auth = data.split('@')[0][1:]
  288.             if len(raw) > 3:
  289.                 if raw[3] == ".help":
  290.                     logger.send('NOTICE %s :PyLog: .help pylog - for pylog commands.\r\n' % my.nick)
  291.  
  292.                                                    
  293. internets_thread = threading.Thread(target = internets_bot, args = (internets, )) # Thread object
  294. internets_thread.start()
  295.  
  296. game_thread = threading.Thread(target = game_bot, args = (game, )) # Thread object
  297. game_thread.start()
  298.  
  299. pseudo_thread = threading.Thread(target = pseudo_bot, args = (pseudo, )) # Thread object
  300. pseudo_thread.start()
  301.  
  302. logger_thread = threading.Thread(target = logger_bot, args = (logger, )) # Thread object
  303. logger_thread.start()
  304.  
  305. internets_thread.join()
  306. game_thread.join()
  307. pseudo_thread.join()
  308. logger_thread.join()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement