Guest User

Untitled

a guest
Jul 28th, 2018
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.33 KB | None | 0 0
  1.  
  2. import ch,random,sys,re,_thread,getpass,os,string,math,hashlib
  3. import base64 as b64
  4. if sys.version_info[0] > 2: import urllib.request as urlreq
  5. else: import urllib2 as urlreq
  6. try: os.uname();bold="\033[1m";reset="\033[0;0m"
  7. except: bold="";reset=""
  8. gRooms="danball5"
  9. gUsername="Temporarily9"
  10. gPassword="pi%of1337is42"
  11. pstfyMaxLen=100;pstfyMsgs=["" for i in range(pstfyMaxLen-5)];UserCnt=0
  12. isMatch=lambda x,y:x.lower()==y.lower()
  13. welcome="Welcome to "+bold+"Modnaryltnelis' Chat Client "+reset+"[ v0.67 ]\n (Use #help)"
  14. def xor_s_i(s,i): return s#"".join([chr(ord(k)^i) for k in s])
  15. def encryptb64(msg,key):
  16. newmsg=b64.b64encode(bytes(xor_s_i(msg,key),'ascii'))
  17. return str(newmsg)
  18. def decryptb64(msg,key):
  19. oldmsg=b64.b64decode(bytes(msg,'ascii'))
  20. return xor_s_i(str(oldmsg)[2:-1],key)
  21. def postify(msg=None):
  22. global pstfyMsgs
  23. if msg!=None:
  24. if not len(pstfyMsgs) < pstfyMaxLen: pstfyMsgs=pstfyMsgs[1:]
  25. pstfyMsgs.append(msg)
  26. for i in pstfyMsgs: print(i)
  27. class TestBot(ch.RoomManager):
  28. def onInit(self): self.setNameColor("C11");self.setFontColor("F00");self.setFontSize(13);self.setFontFace("Verdana")
  29. def onConnect(self, room): postify("-- [SYS]"+bold+"Connected"+reset)
  30. def onReconnect(self, room): postify("-- [SYS]"+bold+"Reconnected"+reset)
  31. def onDisconnect(self, room): postify("-- [SYS]"+bold+"Disconnected"+reset); room.reconnect()
  32. def onMessage(self, room, user, message):
  33. if len(message.body)<1: postify(bold+user.name+": "+reset+message.body
  34. ); return
  35. if message.body[0:4]=="Wp%!":
  36. msg=message.body;msgprts=msg.split("#")[1:]
  37. if msgprts[0]==hashlib.sha224(bytes(hashlib.sha224(bytes(self.userName.lower(),'ascii')).hexdigest()+self.userName.lower(),'ascii')).hexdigest():
  38. try: key=int("".join([str(ord(i)) for i in self.userName.lower()]))%128;postify("-- "+bold+"["+user.name+"] "+reset+decryptb64(msgprts[2],key))
  39. except: postify("-- [SYS]"+bold+"Received Invalid Whisper"+reset)
  40. return 0
  41. if room.getLevel(self.user)>0: postify("["+message.ip+"]"+user.name+": "+message.body)
  42. else: postify(bold+user.name+": "+reset+message.body)
  43.  
  44. def onFloodWarning(self, room): room.reconnect()
  45. def onFloodBan(self, room): room.reconnect()
  46.  
  47. def onJoin(self, room, user): pass #postify(user.name+" has joined "+room.name+".")
  48. def onLeave(self, room, user): pass #postify(user.name+" has left "+room.name+".")
  49. def onUserCountChange(self, room): UserCnt=room.usercount #postify("-- Users: "+str(room.usercount))
  50.  
  51. def onPMMessage(self, pm, user, body):
  52. pm.message(user, body) #hehe... echo :3
  53. postify("-- [PM]"+bold+user.name+": "+reset+body)
  54.  
  55. def chat_outProc(self,msg):
  56. if msg=="":
  57. return None
  58. if msg[0]=="#":
  59. msgsplit=msg.split(" ")
  60. if isMatch(msgsplit[0],"#users"): postify("-- [SYS]"+bold+"Global Usercount: "+reset+\
  61. str(eval("".join([str(self._rooms[i].usercount)+"+" for i in self._rooms])[:-1])))
  62. elif isMatch(msgsplit[0],"#help"): 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#\"#w\"#r# - Seekrit messages. :3 {#w target message}\n\
  68. #b#\"#exec\"#r# - Parse commands directly to the interpreter. {#exec codesnippet}".replace("#b#",bold).replace("#r#",reset))
  69. elif isMatch(msgsplit[0],"#ping"): postify("-- [SYS]"+bold+"Pong!"+reset)
  70. elif isMatch(msgsplit[0],"#w"):
  71. if len(msgsplit)<3: postify("-- [SYS]"+bold+"Missing Recipient&&/||Content"+reset);return 0
  72. if isMatch(msgsplit[1],"*"):
  73. for room in self._rooms: self._rooms[room].rawMessage("<"+" ".join(msgsplit[2:]))
  74. else:
  75. postify("-- [SYS]"+bold+"Sending"+reset+" \"%s\" to %s"%(" ".join(msgsplit[2:]),msgsplit[1]))
  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()
  110. if gRooms==None or gPassword==None or gUsername==None: Testbot.chat_start(rooms=input("CHATROOM(s):"),name=input("Username: "),password=getpass.getpass())
  111. else: Testbot.chat_start(rooms=gRooms.split(" "),name=gUsername,password=gPassword)
Add Comment
Please, Sign In to add comment