Advertisement
Guest User

Untitled

a guest
May 1st, 2018
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 23.73 KB | None | 0 0
  1. import os
  2. import re
  3. import sys
  4. import random
  5. import socket
  6. import string
  7. import importlib
  8. import ast
  9. import atexit
  10. import threading
  11. import traceback
  12. import errno
  13. import numpy as np
  14. import fnmatch
  15. from random import *
  16. from time import sleep
  17. from time import time
  18. from datetime import datetime
  19. bot = None
  20.  
  21. def main():    
  22.         bot = PluginBot()
  23.         bot.connect()        
  24.         bot.run()
  25.        
  26.  
  27. def BYTE(message):
  28.     return bytes("%s\r\n" % message, "UTF-8")
  29.  
  30. def getUser(token):
  31.     user = token[0].strip(":")
  32.     user = user.split("!")
  33.     return user
  34.  
  35. def getMessage(line):
  36.     line=line.split(" ")
  37.     msg=""
  38.     cnt=0
  39.     while (cnt < len(line)):
  40.         if (cnt>2): msg+=("%s " % line[cnt])
  41.         cnt+=1
  42.     return msg.strip()
  43.  
  44.  
  45. class PluginBot(threading.Thread):
  46.     userInput = None
  47.     s = None
  48.     loadedModules = dict()
  49.     isRunning = False
  50.     guiParent = None
  51.     realName = "d0nkey"
  52.     password = "a1b2c3d4"
  53.     nickName = "d0nkey"
  54.     host = "irc.dlnetworks.net"
  55.     port = (6667)
  56.     master = ["reflector","pbp"]
  57.     weConnected = False
  58.     joined = False
  59.     channels = {}
  60.     scores = {}
  61.     scores_tmp = {}
  62.     quotes = {}              
  63.     ripnick = ""
  64.     lastrollnick = ""
  65.     udice=["0","\u2680","\u2681","\u2682","\u2683","\u2684","\u2685"]
  66.     dscores={5:13,6:12,7:11,8:10,9:9,10:8,11:7,12:6,13:5,14:4,15:3,16:2,17:1,18:1,19:2,20:3,21:4,22:5,23:6,24:7,25:8,26:9,27:10,28:11,29:12,30:13}
  67.     nickhost = []
  68.     lastmsg=""
  69.     dsmp=2
  70.  
  71.  
  72.     def connect(self):
  73.        
  74.         if (self.s == None):
  75.             self.s = socket.socket()
  76.             print("Connecting to host \"%s\" with port %d." % (self.host, self.port))
  77.  
  78.         tries=0
  79.         while (True):
  80.             try:
  81.                 self.s.connect((self.host, self.port))
  82.                 break
  83.             except Exception as e:
  84.                 tries+=1
  85.                 if (tries==4):
  86.                     print("Too many retries, giving up")
  87.                     sys.exit()
  88.                 print("Timeout error. Retying [%s of 3]" % tries)
  89.                 sleep(2)
  90.            
  91.         sleep(0.5)
  92.        
  93.         print("Setting mode for %s" % (self.realName))
  94.         self.s.send(BYTE("USER %s %s unused :%s" % (self.password, self.host, self.realName)))
  95.         sleep(0.5)
  96.  
  97.        
  98.         print("Logging in using nickname.")
  99.         self.s.send(BYTE("NICK %s" % self.nickName))
  100.         sleep(0.5)
  101.                            
  102.         self.weConnected = True
  103.        
  104.            
  105.     def run(self):
  106.         self.isRunning = True
  107.         readBuffer = ""
  108.  
  109.         self.loadDataFiles(False)
  110.  
  111.         while (self.isRunning):
  112.             try:
  113.                 if (self.s != None):
  114.                     temp = self.s.recv(1024).decode("UTF-8")
  115.                     print(temp)
  116.                     if (temp == ""):
  117.                         self.isRunning = False
  118.                     else:
  119.                         readBuffer += temp
  120.                         temp = readBuffer.split("\n")
  121.                         readBuffer = temp.pop()
  122.  
  123.                         #
  124.                         # Respond to certain server messages
  125.                         #
  126.  
  127.                         for line in temp:
  128.                             tokens=self.makeTokens(line)
  129.                             self.join(tokens)
  130.                             self.kicked_rejoin(tokens)
  131.                             self.loadDataFiles(tokens)
  132.                             self.ping(tokens)
  133.                             self.say(tokens,line)
  134.                             self.dice(tokens,line)
  135.                             self.dice_scores(tokens)
  136.                             self.dice_record(tokens)
  137.                             self.quoteman(tokens,line)
  138.                             self.chanman(tokens)
  139.                             self.userman(tokens,line)
  140.                             self.rip(tokens)
  141.                             self.fish_slap(tokens)
  142.                             self.help(tokens)
  143.                             self.chuck(tokens,line)
  144.  
  145.             except Exception:
  146.                 traceback.print_tb(sys.exc_info()[2])
  147.                 sys.exit()
  148.                
  149.     def join(self,tokens):
  150.         if (self.joined == True): return
  151.         if (tokens[1] == "MODE"):
  152.             self.joined = True
  153.             if (len(self.channels)>0):
  154.                 for channel, v in self.channels.items():
  155.                     self.s.send(BYTE("JOIN %s" % channel))
  156.  
  157.     def kicked_rejoin(self,tokens):
  158.         if (tokens[1] == "KICK"):
  159.             if (tokens[3] == self.nickName):
  160.                 self.s.send(BYTE("JOIN %s" % tokens[2]))
  161.  
  162.     def ping(self, tokens):
  163.         if (tokens[0] == "PING"):
  164.             currentDate = datetime.now()
  165.             print("[%02s:%02s] Received PING PONG" % (str(currentDate.hour).zfill(2), str(currentDate.minute).zfill(2)), end = "\r")
  166.             str1 = ("PONG %s" % tokens[1].strip(":"))
  167.             self.s.send(BYTE(str1))        
  168.  
  169.     def help(self,tokens):
  170.       try:
  171.         if (tokens[1] == "PRIVMSG"):
  172.             if not (self.pubCheck(tokens)): return
  173.             if (tokens[3] == ".help"):
  174.                 help=[]
  175.                 help.append("* Help/Commands:")
  176.                 help.append("* Type each command for extra help")
  177.                 help.append("* .dice    Dice Game")
  178.                 help.append("* .say     Make the bot say something")
  179.                 help.append("* .quote   Show/Manage Quotes")
  180.                 help.append("* .rip     R.I.P for last quit/part nick")
  181.                 #help.append("* .chan    Channel Manager")
  182.                 for line in help:
  183.                     self.s.send(BYTE(":%s NOTICE %s :%s" % (self.nickName,tokens[0],line)))
  184.                     sleep(1)
  185.       except:
  186.         derp=0
  187.  
  188.     def say(self, tokens, line):
  189.         try:
  190.             if (tokens[1] == "PRIVMSG"):
  191.                 if not (self.pubCheck(tokens)): return
  192.                 if (tokens[3] == ".say"):
  193.                     if (len(tokens) > 4):
  194.                         msg=getMessage(line).replace(":.say ","")
  195.                     else:
  196.                         msg="Usage: .say <something>"
  197.                     self.s.send(BYTE(":%s PRIVMSG %s :%s" % (self.nickName,tokens[2],msg)))
  198.         except:
  199.             derp=0
  200.  
  201.     def dice(self, tokens, line):
  202.       try:
  203.         if (tokens[1] == "PRIVMSG"):
  204.             if not (self.pubCheck(tokens)): return
  205.             if (len(tokens)>4):
  206.                 if (tokens[4]=="score" or tokens[4]=="record"): return
  207.  
  208.             try:
  209.                 rollGuess=int(tokens[4])
  210.             except Exception:
  211.                 rollGuess=0  
  212.  
  213.             if (tokens[3] == ".dice" or tokens[3] == ".roll"):
  214.                 if (len(tokens) > 4):
  215.                     try:
  216.                         snick=self.setSNick(tokens)
  217.                         rollGuess=int(tokens[4])
  218.                         ts=time()
  219.  
  220.                         try:
  221.                             timeleft=(self.scores_tmp[snick]["timestamp"]+6)-ts
  222.                         except Exception:
  223.                             self.scores_tmp[snick]={"timestamp":ts,"lastguess":rollGuess,"lastcount":0}
  224.                             timeleft=(self.scores_tmp[snick]["timestamp"]+6)-ts
  225.  
  226.                         if (timeleft>1 and timeleft<6):
  227.                             if (self.lastrollnick == tokens[0]):
  228.                                 msg=("You can't roll for another %s seconds before another person rolls" % int(timeleft))
  229.                                 self.s.send(BYTE(":%s NOTICE %s :%s" % (self.nickName,tokens[0],msg)))
  230.                                 return
  231.  
  232.                         self.scores_tmp[snick]["timestamp"]=ts
  233.                         self.lastrollnick=""
  234.  
  235.                         if (len(tokens)==6):
  236.                             if(tokens[5]=="spliff"):
  237.                                 if(rollGuess!=1):
  238.                                      msg="You can only roll 1 spliff at a time"
  239.                                 else:
  240.                                     try: self.scores[snick]["spliffs"]+=1
  241.                                     except: self.scores[snick]["spliffs"]=1
  242.                                     self.load_save_data("scores.data.npy",self.scores)
  243.                                     self.lastrollnick=tokens[0]
  244.                                     msg=("You \002Win\002 %s! (Spliff Roll: <//////////////>~~~ = 420)" % tokens[0])
  245.                                 self.s.send(BYTE(":%s PRIVMSG %s :%s" % (self.nickName,tokens[2],msg)))
  246.                                 return
  247.  
  248.                         #if (self.scores_tmp[tokens[0]]["lastguess"] == rollGuess):
  249.                         #    self.scores_tmp[tokens[0]]["lastcount"]+=1
  250.                         #    if (self.scores_tmp[tokens[0]]["lastcount"]>=3):
  251.                         #        msg="You can't guess the same number more than 3 times"
  252.                         #        self.s.send(BYTE(":%s NOTICE %s :%s" % (self.nickName,tokens[0],msg)))
  253.                         #        return
  254.                         #else:
  255.                         #    self.scores_tmp[tokens[0]]["lastcount"]=0
  256.                         #    self.scores_tmp[tokens[0]]["lastguess"]=rollGuess
  257.  
  258.                         if (rollGuess > 4 and rollGuess < 31):
  259.                             diceRoll1=randint(1,6)
  260.                             diceRoll2=randint(1,6)
  261.                             diceRoll3=randint(1,6)
  262.                             diceRoll4=randint(1,6)
  263.                             diceRoll5=randint(1,6)
  264.                             diceRollTotal=diceRoll1+diceRoll2+diceRoll3+diceRoll4+diceRoll5
  265.  
  266.                             if (rollGuess == diceRollTotal):
  267.                                 msgNick=("You \002Win\002 %s!" % tokens[0])
  268.                                 self.scores[snick]["win"]+=1
  269.                                 try: self.scores[snick]["points"]+=int(self.dscores[rollGuess]*self.dsmp)
  270.                                 except: self.scores[snick]["points"]=int(self.dscores[rollGuess]*self.dsmp)
  271.                             else:
  272.                                 msgNick=("You Lose %s!" % tokens[0])
  273.                                 self.scores[snick]["loss"]+=1
  274.                                 try: self.scores[snick]["points"]-=1
  275.                                 except: self.scores[snick]["points"]=0
  276.  
  277.                             msg=("%s (Dice Roll %s/%s/%s/%s/%s = %s)" % (msgNick,self.udice[diceRoll1],self.udice[diceRoll2],self.udice[diceRoll3],self.udice[diceRoll4],self.udice[diceRoll5],diceRollTotal))
  278.                             self.load_save_data("scores.data.npy",self.scores)
  279.                             self.lastrollnick=tokens[0]
  280.                         else:
  281.                             raise Exception()
  282.                     except Exception:
  283.                         msg="You need to provide a number from 5 to 30"
  284.                         self.s.send(BYTE(":%s NOTICE %s :%s" % (self.nickName,tokens[0],msg)))
  285.                         return
  286.  
  287.                 if (len(tokens)==4): msg="Usage: .dice|.roll <#|record|score> [nick]"
  288.                 self.s.send(BYTE(":%s PRIVMSG %s :%s" % (self.nickName,tokens[2],msg)))
  289.       except:
  290.         derp=0
  291.  
  292.     def dice_record(self,tokens):
  293.         try:
  294.             if (tokens[1] == "PRIVMSG"):
  295.                 if not (self.pubCheck(tokens)): return
  296.                 if (tokens[3] == ".dice" and tokens[4] == "record" and len(tokens) == 5):
  297.                     scnt=0
  298.                     smax=3
  299.                     sS=sorted(self.scores.keys(), key=lambda y: (self.scores[y]['win']), reverse=True)
  300.                     for k1 in sS:
  301.                         scnt+=1
  302.                         try: vtest=self.scores[k1]["points"]
  303.                         except: self.scores[k1]["points"]=0
  304.                         msg=("\002Player:\002 %s \002Win:\002%s \002Loss:\002%s \002Points:\002%s" % (k1, self.scores[k1]["win"], self.scores[k1]["loss"], self.scores[k1]["points"]))
  305.                         self.s.send(BYTE(":%s PRIVMSG %s :%s" % (self.nickName,tokens[2],msg)))
  306.                         if (scnt >= smax):
  307.                             break
  308.         except Exception:
  309.             return False
  310.  
  311.     def dice_scores(self,tokens):
  312.       try:
  313.         if (tokens[1] == "PRIVMSG" and len(tokens) > 4):
  314.             if not (self.pubCheck(tokens)): return
  315.             snick=self.setSNick(tokens)
  316.             if (len(tokens)==6):
  317.                 player=tokens[5]
  318.             else:
  319.                 player=snick
  320.             if (tokens[3] == ".dice" and tokens[4] == "score"):
  321.                 try:
  322.                     try: vtest=self.scores[player]["spliffs"]
  323.                     except: self.scores[player]["spliffs"]=0
  324.                     try: vtest=self.scores[player]["points"]
  325.                     except: self.scores[player]["points"]=0
  326.                     msg=("\002Player:\002 %s \002Win:\002%s \002Loss:\002%s \002Points:\002%s \002Spliffs:\002%s" % (player,self.scores[player]["win"],self.scores[player]["loss"],self.scores[player]["points"],self.scores[player]["spliffs"]))
  327.                 except Exception:
  328.                     msg=("Player %s doesn't have a score" % player)
  329.                
  330.                 self.s.send(BYTE(":%s PRIVMSG %s :%s" % (self.nickName,tokens[2],msg)))
  331.       except:
  332.         derp=0
  333.  
  334.     def quoteman(self,tokens,line):
  335.       try:
  336.         if (tokens[1] == "PRIVMSG"):
  337.             if not (self.pubCheck(tokens)): return
  338.             if (tokens[3] == ".quote"):
  339.                 msg=("Usage: .quote <#|del|add> [quote text] (Quotes Avail:%s)" % len(self.quotes))
  340.                 if (len(tokens) == 5):
  341.                     # Get A Quote
  342.                     try:
  343.                         idx=int(tokens[4])
  344.                         msg=("Quote #%s: %s [\002Added by %s on %s\002]" % (idx,self.quotes[idx]['quote'],self.quotes[idx]['owner'],self.quotes[idx]['date']))
  345.                     except Exception as e:
  346.                         try:
  347.                             if (int(tokens[4])):
  348.                                 msg=("Quote #%s doesn't exist" % tokens[4])
  349.                         except Exception as e:
  350.                             msg="You need to provide a number"
  351.                 if (len(tokens) > 5):
  352.                     # Add new quote
  353.                     if (tokens[4] == "add"):
  354.                         qn=(len(self.quotes)+1)
  355.                         quote=getMessage(line).replace(":.quote add ","")
  356.                         owner=tokens[0]
  357.                         qdate=datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  358.                         self.quotes[qn]={"quote":quote,"owner":owner,"date":qdate}
  359.                         msg=("Added new quote #%s" % qn)
  360.                     # Delete a quote
  361.                     if (tokens[4] == "del"):
  362.                         try:
  363.                             del self.quotes[int(tokens[5])]
  364.                             msg=("Quote #%s has been deleted" % tokens[5])
  365.                         except Exception as e:
  366.                             msg=("Quote #%s doesn't exist" % tokens[5])
  367.  
  368.                     self.load_save_data("quotes.data.npy",self.quotes)
  369.  
  370.                 self.s.send(BYTE(":%s PRIVMSG %s :%s" % (self.nickName,tokens[2],msg)))
  371.       except:
  372.         derp=0
  373.  
  374.     def chanman(self,tokens):
  375.       try:
  376.         if (tokens[1] == "PRIVMSG"):
  377.             if (tokens[3] == ".chan"):
  378.                 if (len(fnmatch.filter(self.master,self.setSNick(tokens)))==0): return # MASTER ACCESS CHECK
  379.                 msg="Usage: .chan <join|part|list> [#chan]"
  380.                 if (len(tokens) == 5):
  381.                     if (tokens[4] == "list"):
  382.                         msg="I am on the following channels:"  
  383.                         for channel, v in self.channels.items():
  384.                             msg=("%s %s" % (msg,channel))
  385.                         msg.strip()
  386.                 if (len(tokens) > 5):
  387.                     if (tokens[4] == "join"):
  388.                         self.channels[tokens[5]]=tokens[0]
  389.                         self.s.send(BYTE("JOIN %s" % tokens[5]))
  390.                         msg=("Joined channel %s" % tokens[5])
  391.                     if (tokens[4] == "part"):
  392.                         del self.channels[tokens[5]]
  393.                         self.s.send(BYTE("PART %s" % tokens[5]))
  394.                         msg=("Parted channel %s" % tokens[5])
  395.  
  396.                     self.load_save_data("channels.data.npy",self.channels)
  397.  
  398.                 self.s.send(BYTE(":%s NOTICE %s :%s" % (self.nickName,tokens[0],msg)))
  399.       except:
  400.         derp=0
  401.  
  402.     def userman(self,tokens,line):
  403.       try:
  404.         if (tokens[1] == "PRIVMSG"):
  405.             if (tokens[3] == ".user"):
  406.                 if (len(fnmatch.filter(self.master,self.setSNick(tokens)))==0): return # MASTER ACCESS CHECK
  407.                 msg="Usage: .user <addhost|delete|modify|list> [nick] [ident@hostname]"
  408.                 if (len(tokens) > 4):
  409.                     if (tokens[4] == "list"):
  410.                         try:
  411.                             if (len(tokens) > 5):
  412.                                 msg=("\002User:\002 %s \002Data:\002 %s" % (tokens[5],self.scores[tokens[5]]))
  413.                             else:
  414.                                 msg="I have the following users:"
  415.                                 for usernick, userdata in self.scores.items():
  416.                                     msg=("%s %s" % (msg,usernick))
  417.                                 msg.strip()
  418.                         except:
  419.                             msg="User not found"
  420.                     elif (len(tokens) > 5):
  421.                         if (tokens[4] == "delete"):
  422.                             try:
  423.                                 del self.scores[tokens[5]]
  424.                                 msg=("Deleted user %s" % tokens[5])
  425.                             except:
  426.                                 msg="User not found"
  427.                         if (tokens[4] == "addhost"):
  428.                             try:
  429.                                 self.scores[tokens[5]]["hostnames"].append(tokens[6])
  430.                             except:
  431.                                 self.scores[tokens[5]]["hostnames"] = [k for k in self.scores[tokens[5]]["hostnames"]]
  432.                                 self.scores[tokens[5]]["hostnames"].append(tokens[6])
  433.                             msg=("Added host %s to user %s" % (tokens[6],tokens[5]))
  434.                         if (tokens[4] == "modify"):
  435.                             newdata=getMessage(line).replace((":.user modify %s" % tokens[5]),"")
  436.                             self.scores[tokens[5]]=ast.literal_eval(newdata.strip())
  437.                             msg=("Modified user %s" % tokens[5])
  438.  
  439.                     self.load_save_data("scores.data.npy",self.scores)
  440.  
  441.                 self.s.send(BYTE(":%s PRIVMSG %s :%s" % (self.nickName,tokens[2],msg)))
  442.       except:
  443.         derp=0
  444.  
  445.     def fish_slap(self,tokens):
  446.       try:
  447.         if (tokens[1] == "PRIVMSG"):
  448.             if (tokens[3] == ".slap" and len(tokens) > 4):
  449.                 random_fish=choice(list(open('fish.txt'))).strip()
  450.                 msg=("\x01ACTION slaps %s around a bit with a large %s\x01" % (tokens[4],random_fish))
  451.                 self.s.send(BYTE(":%s PRIVMSG %s :%s" % (self.nickName,tokens[2],msg)))
  452.       except:
  453.         derp=0
  454.  
  455.     def rip(self,tokens):
  456.       try:
  457.         if (tokens[1] == "QUIT" or tokens[1] == "PART"):
  458.             if (len(tokens) == 3):
  459.                 self.ripnick = tokens[0]
  460.                 return
  461.         if (tokens[1] == "PRIVMSG"):
  462.             if (tokens[3] == ".rip"):
  463.                 if (len(tokens) == 5):
  464.                     self.ripnick = tokens[4]
  465.                 if (self.ripnick != ""):
  466.                     msg=("R.I.P - %s :(" % self.ripnick)
  467.                     self.ripnick = ""
  468.                 else:
  469.                     msg="Usage: .rip [nick]"
  470.  
  471.                 self.s.send(BYTE(":%s PRIVMSG %s :%s" % (self.nickName,tokens[2],msg)))            
  472.       except:
  473.         derp=0
  474.  
  475.     def pubCheck(self,tokens):
  476.       try:
  477.         if (len(tokens) > 2):
  478.             if (self.nickName == tokens[2]): return False # Only allow public messages
  479.             else: return True
  480.         return False
  481.       except:
  482.         derp=0
  483.  
  484.     def loadDataFiles(self,tokens):
  485.         try:
  486.             if(tokens!=False):
  487.                 if (tokens[1]=="PRIVMSG" and len(tokens)>2):
  488.                     if(tokens[3]==".reload"):
  489.                         if (len(fnmatch.filter(self.master,self.setSNick(tokens)))==0):
  490.                             msg="Reload: Access Denied"
  491.                         else:
  492.                             msg="Reload: OK"
  493.                         self.s.send(BYTE(":%s PRIVMSG %s :%s" % (self.nickName,tokens[2],msg)))            
  494.                     else: return
  495.                 else: return
  496.             self.scores=self.load_save_data("scores.data.npy",False)
  497.             self.quotes=self.load_save_data("quotes.data.npy",False)
  498.             self.channels=self.load_save_data("channels.data.npy",False)
  499.         except:
  500.             derp=0
  501.  
  502.     def setSNick(self,tokens):
  503.         snick=""
  504.         for k,v in self.scores.items():
  505.             for vv in v["hostnames"]:
  506.                 if (len(fnmatch.filter(self.nickhost,vv))>0):
  507.                     snick=k
  508.                     break
  509.         if(snick==""):
  510.             snick=tokens[0]
  511.             self.scores[snick]={"win":0,"loss":0,"hostnames":self.nickhost}
  512.         return snick
  513.  
  514.     def chuck(self,tokens,line):      
  515.       try:
  516.         # SEND NAMES COMMAND
  517.         if (tokens[1] == "PRIVMSG"):
  518.             if (tokens[3] == ".chuck"):
  519.                 if (len(tokens) == 4):  
  520.                     readBuffer=""
  521.                     self.s.send(BYTE("NAMES %s" % tokens[2]))
  522.                     self.lastmsg="chuck"
  523.                 if (len(tokens) > 4):
  524.                     msg=("\x01ACTION chucks bear at %s! Catch. Drink.\x01" % tokens[4])
  525.                     self.s.send(BYTE(":%s PRIVMSG %s :%s" % (self.nickName,tokens[2],msg)))
  526.         # GET NAMES ON NEXT MESSAGE
  527.         elif (tokens[1] == "353"):
  528.            if(self.lastmsg=="chuck"):
  529.                rnick=self.nickName
  530.                while(rnick==self.nickName):
  531.                    rnick=re.sub("[@\+\!~]","",choice(getMessage(line).replace("@ #donk :","").split(" ")))
  532.                msg=("\x01ACTION chucks bear at %s! Catch. Drink.\x01" % rnick)
  533.                self.s.send(BYTE(":%s PRIVMSG %s :%s" % (self.nickName,tokens[4],msg)))
  534.                self.lastmsg=""
  535.       except:
  536.         derp=0          
  537.  
  538.     # Save or Load dict data
  539.     #
  540.  
  541.     def load_save_data(self,sfile,data):
  542.         # Save dict data  to file
  543.         if (data != False):
  544.             np.save(sfile, data)
  545.             print("*** Saved Data to: %s" % sfile)
  546.             return True
  547.  
  548.         # Load from file to dict data
  549.         if (data == False):
  550.             # Return an empty dict if file doesnt exist
  551.             if not (os.path.isfile(sfile)):
  552.                 return {}
  553.             data=np.load(sfile).item()
  554.             print("*** Loaded Data from: %s" % sfile)
  555.             return data
  556.  
  557.         return False
  558.  
  559.     #
  560.     # TOKEN HANDLER STUFF
  561.     #
  562.  
  563.     def makeTokens(self, line):
  564.         line = line.rstrip()
  565.         tokens = line.split(" ")
  566.         uhdata = getUser(tokens)
  567.         tokens[0] = uhdata[0]
  568.         try: self.nickhost=[uhdata[1]]
  569.         except: self.nickhost=[]
  570.         index = self.getStartingIndex(line)
  571.         if (len(tokens) > index):
  572.                 tokens[index] = tokens[index][1:]
  573.         tokens = list(filter(lambda x: x != "", tokens))
  574.         return tokens
  575.  
  576.     def getStartingIndex(self, tokens):
  577.         startingIndex = 1
  578.         tokens = tokens.split(" ")
  579.         while (startingIndex < len(tokens)-1 and tokens[startingIndex][0] != ":"):
  580.             startingIndex += 1
  581.         return startingIndex
  582.  
  583.  
  584. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement