Guest User

Untitled

a guest
Jun 27th, 2018
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.24 KB | None | 0 0
  1. import ch,random,sys,re,_thread,getpass,os,string,math,hashlib
  2. import base64 as b64
  3. if sys.version_info[0] > 2: import urllib.request as urlreq
  4. else: import urllib2 as urlreq
  5. try: os.uname();bold="\033[1m";reset="\033[0;0m"
  6. except: bold="";reset=""
  7. pstfyMsgs=["" for i in range(95)];pstfyMaxLen=100;UserCnt=0
  8. isMatch=lambda x,y:x.lower()==y.lower()
  9. welcome="Welcome to "+bold+"Modnaryltnelis' Chat Client "+reset+"[ v0.67 ]\n           (Use #help)"
  10. def encryptb64(msg,key):
  11.     newmsg=b64.b64encode(bytes(msg,'ascii'))
  12.     for i in range(key): exec("newmsg=b64.b64encode(newmsg)")
  13.     return str(newmsg)
  14. def decryptb64(msg,key):
  15.     oldmsg=b64.b64decode(bytes(msg,'ascii'))
  16.     for i in range(key): exec("oldmsg=b64.b64decode(oldmsg)")
  17.     return str(oldmsg)[2:-1]
  18. def postify(msg=None):
  19.     global pstfyMsgs
  20.     if msg!=None:
  21.         if not len(pstfyMsgs) < pstfyMaxLen: pstfyMsgs=pstfyMsgs[1:]
  22.         pstfyMsgs.append(msg)
  23.     for i in pstfyMsgs: print(i)
  24. class TestBot(ch.RoomManager):
  25.     def onInit(self): self.setNameColor("FFF");self.setFontColor("000");self.setFontSize(8)
  26.     def onConnect(self, room): postify("-- [SYS]"+bold+"Connected"+reset)
  27.     def onReconnect(self, room): postify("--  [SYS]"+bold+"Reconnected"+reset)
  28.     def onDisconnect(self, room): postify("--  [SYS]"+bold+"Disconnected"+reset); room.reconnect()
  29.     def onMessage(self, room, user, message):
  30.         if len(message.body)<1: postify(bold+user.name+": "+reset+message.body); return
  31.         if message.body[0:4]=="Wp%!":
  32.             msg=message.body;msgprts=msg.split("#")[1:]
  33.             if msgprts[0]==hashlib.sha224(bytes(hashlib.sha224(bytes(self.userName.lower(),'ascii')).hexdigest()+self.userName.lower(),'ascii')).hexdigest():
  34.                 try: key=int("".join([str(ord(i)) for i in self.userName.lower()]))%128;postify("--  "+bold+"["+user.name+"] "+reset+decryptb64(msgprts[2],key))
  35.                 except: postify("-- [SYS]"+bold+"Received Invalid Whisper"+reset)
  36.             return 0
  37.         if room.getLevel(self.user)>0: postify("["+message.ip+"]"+user.name+":  "+message.body)
  38.         else: postify(bold+user.name+": "+reset+message.body)
  39.    
  40.     def onFloodWarning(self, room): room.reconnect()
  41.     def onFloodBan(self, room): room.reconnect()
  42.    
  43.     def onJoin(self, room, user): pass #postify(user.name+" has joined "+room.name+".")
  44.     def onLeave(self, room, user): pass #postify(user.name+" has left "+room.name+".")
  45.     def onUserCountChange(self, room): UserCnt=room.usercount #postify("--  Users: "+str(room.usercount))
  46.     def onMessageDelete(self, room, user, msg):
  47.         room.message("Someone tried deleting something. :3 {"+user.name+": "+msg.body+"}")
  48.        
  49.     def onPMMessage(self, pm, user, body):
  50.         pm.message(user, body) #hehe... echo :3
  51.         postify("-- [PM]"+bold+user.name+": "+reset+body)
  52.        
  53.     def chat_outProc(self,msg):
  54.         if msg=="":
  55.             return None
  56.         if msg[0]=="#":
  57.             msgsplit=msg.split(" ")
  58.             if isMatch(msgsplit[0],"#users"):
  59.                 postify("--  [SYS]"+bold+"Global Usercount: "+reset+\
  60.                 str(eval("".join([str(self._rooms[i].usercount)+"+" for i in self._rooms])[:-1])))
  61.             elif isMatch(msgsplit[0],"#help"):
  62.                 postify("\
  63. -- [SYS]"+bold+"Help:"+reset+"\n\
  64.     #b#\"#users\"#r#   - Get user count across all connected chatrooms.\n\
  65.     #b#\"#ping\"#r#    - Test command.\n\
  66.     #b#\"#help\"#r#    - Access help panel.\n\
  67.     #b#\"#whisper\"#r# - Seekrit messages. :3 \n\
  68.     #b#\"#exec\"#r#    - Parse commands directly to the interpreter.".replace("#b#",bold).replace("#r#",reset))
  69.             elif isMatch(msgsplit[0],"#ping"):
  70.                 postify("-- [SYS]"+bold+"Pong!"+reset)
  71.             elif isMatch(msgsplit[0],"#whisper"):
  72.                 if len(msgsplit)<3: postify("-- [SYS]"+bold+"Missing Recipient&&/||Content"+reset);return 0
  73.                 if isMatch(msgsplit[1],"*"):
  74.                     for room in self._rooms: self._rooms[room].rawMessage("<"+" ".join(msgsplit[2:]))
  75.                 else:
  76.                     for room in self._rooms:
  77.                         rndkey=int("".join(str(ord(i)) for i in msgsplit[1].lower()))%128
  78.                         reciphash=hashlib.sha224(bytes(\
  79.                         hashlib.sha224(bytes(msgsplit[1].lower(),'ascii')).hexdigest()\
  80.                         +msgsplit[1].lower(),'ascii')).hexdigest()
  81.                         self._rooms[room].rawMessage("<Wp%!#"+reciphash\
  82.                         +"#"+str(random.randrange(1000,9999))+"#"+str(encryptb64(" ".join(msgsplit[2:]),rndkey))[2:-1])
  83.                         postify()
  84.             elif isMatch(msgsplit[0],"#exec"):
  85.                 if len(msgsplit)>1:
  86.                     try: exec(" ".join(msgsplit[1:]))
  87.                     except: postify("--  [SYS]"+bold+"fail"+reset)
  88.                 else: postify("--  [SYS]"+bold+"Missing arg(s)"+reset)
  89.             else: postify("--  [SYS]"+bold+"Invalid Command"+reset)
  90.             return 0
  91.         else: return None
  92.     def chat_start(self,rooms=None,name=None,password=None):
  93.         if not rooms: rooms = str(input("Room names separated by spaces: ")).split(" ")
  94.         if len(rooms) == 1 and rooms[0] == "": rooms = []
  95.         if not name: name = str(input("Username: "))
  96.         if name == "": name = None
  97.         if not password: password = str(input("Password: "))
  98.         if password == "": password = None
  99.         self.userName=name.lower()
  100.         self=TestBot(name,password,pm=True)
  101.         self.userName=name.lower()
  102.         for room in rooms: self.joinRoom(room)
  103.         _thread.start_new_thread(self.main,())
  104.         while True:
  105.             outmsg=input()
  106.             if self.chat_outProc(outmsg)==None:
  107.                 for room in rooms: self._rooms[room].message(outmsg)
  108. if __name__ == "__main__":
  109.     postify(welcome);Testbot=TestBot();Testbot.chat_start(rooms=input("CHATROOM(s):").split(";"),name=input("Username: "),password=getpass.getpass())
Add Comment
Please, Sign In to add comment