Guest User

Untitled

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