Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import ch,random,sys,re,_thread,getpass,os,string,math,hashlib
- import base64 as b64
- if sys.version_info[0] > 2: import urllib.request as urlreq
- else: import urllib2 as urlreq
- try: os.uname();bold="\033[1m";reset="\033[0;0m"
- except: bold="";reset=""
- gRooms="danball5"
- gUsername="Temporarily9"
- gPassword="pi%of1337is42"
- pstfyMaxLen=100;pstfyMsgs=["" for i in range(pstfyMaxLen-5)];UserCnt=0
- isMatch=lambda x,y:x.lower()==y.lower()
- welcome="Welcome to "+bold+"Modnaryltnelis' Chat Client "+reset+"[ v0.67 ]\n (Use #help)"
- def xor_s_i(s,i): return s#"".join([chr(ord(k)^i) for k in s])
- def encryptb64(msg,key):
- newmsg=b64.b64encode(bytes(xor_s_i(msg,key),'ascii'))
- return str(newmsg)
- def decryptb64(msg,key):
- oldmsg=b64.b64decode(bytes(msg,'ascii'))
- return xor_s_i(str(oldmsg)[2:-1],key)
- def postify(msg=None):
- global pstfyMsgs
- if msg!=None:
- if not len(pstfyMsgs) < pstfyMaxLen: pstfyMsgs=pstfyMsgs[1:]
- pstfyMsgs.append(msg)
- for i in pstfyMsgs: print(i)
- class TestBot(ch.RoomManager):
- def onInit(self): self.setNameColor("C11");self.setFontColor("F00");self.setFontSize(13);self.setFontFace("Verdana")
- def onConnect(self, room): postify("-- [SYS]"+bold+"Connected"+reset)
- def onReconnect(self, room): postify("-- [SYS]"+bold+"Reconnected"+reset)
- def onDisconnect(self, room): postify("-- [SYS]"+bold+"Disconnected"+reset); room.reconnect()
- def onMessage(self, room, user, message):
- if len(message.body)<1: postify(bold+user.name+": "+reset+message.body
- ); return
- if message.body[0:4]=="Wp%!":
- msg=message.body;msgprts=msg.split("#")[1:]
- if msgprts[0]==hashlib.sha224(bytes(hashlib.sha224(bytes(self.userName.lower(),'ascii')).hexdigest()+self.userName.lower(),'ascii')).hexdigest():
- try: key=int("".join([str(ord(i)) for i in self.userName.lower()]))%128;postify("-- "+bold+"["+user.name+"] "+reset+decryptb64(msgprts[2],key))
- except: postify("-- [SYS]"+bold+"Received Invalid Whisper"+reset)
- return 0
- if room.getLevel(self.user)>0: postify("["+message.ip+"]"+user.name+": "+message.body)
- else: postify(bold+user.name+": "+reset+message.body)
- def onFloodWarning(self, room): room.reconnect()
- def onFloodBan(self, room): room.reconnect()
- def onJoin(self, room, user): pass #postify(user.name+" has joined "+room.name+".")
- def onLeave(self, room, user): pass #postify(user.name+" has left "+room.name+".")
- def onUserCountChange(self, room): UserCnt=room.usercount #postify("-- Users: "+str(room.usercount))
- def onPMMessage(self, pm, user, body):
- pm.message(user, body) #hehe... echo :3
- postify("-- [PM]"+bold+user.name+": "+reset+body)
- def chat_outProc(self,msg):
- if msg=="":
- return None
- if msg[0]=="#":
- msgsplit=msg.split(" ")
- if isMatch(msgsplit[0],"#users"): postify("-- [SYS]"+bold+"Global Usercount: "+reset+\
- str(eval("".join([str(self._rooms[i].usercount)+"+" for i in self._rooms])[:-1])))
- elif isMatch(msgsplit[0],"#help"): postify("\
- -- [SYS]"+bold+"Help:"+reset+"\n\
- #b#\"#users\"#r# - Get user count across all connected chatrooms.\n\
- #b#\"#ping\"#r# - Test command.\n\
- #b#\"#help\"#r# - Access help panel.\n\
- #b#\"#w\"#r# - Seekrit messages. :3 {#w target message}\n\
- #b#\"#exec\"#r# - Parse commands directly to the interpreter. {#exec codesnippet}".replace("#b#",bold).replace("#r#",reset))
- elif isMatch(msgsplit[0],"#ping"): postify("-- [SYS]"+bold+"Pong!"+reset)
- elif isMatch(msgsplit[0],"#w"):
- if len(msgsplit)<3: postify("-- [SYS]"+bold+"Missing Recipient&&/||Content"+reset);return 0
- if isMatch(msgsplit[1],"*"):
- for room in self._rooms: self._rooms[room].rawMessage("<"+" ".join(msgsplit[2:]))
- else:
- postify("-- [SYS]"+bold+"Sending"+reset+" \"%s\" to %s"%(" ".join(msgsplit[2:]),msgsplit[1]))
- for room in self._rooms:
- rndkey=int("".join(str(ord(i)) for i in msgsplit[1].lower()))%128
- reciphash=hashlib.sha224(bytes(\
- hashlib.sha224(bytes(msgsplit[1].lower(),'ascii')).hexdigest()\
- +msgsplit[1].lower(),'ascii')).hexdigest()
- self._rooms[room].rawMessage("<Wp%!#"+reciphash\
- +"#"+str(random.randrange(1000,9999))+"#"+str(encryptb64(" ".join(msgsplit[2:]),rndkey))[2:-1])
- postify()
- elif isMatch(msgsplit[0],"#exec"):
- if len(msgsplit)>1:
- try: exec(" ".join(msgsplit[1:]))
- except: postify("-- [SYS]"+bold+"fail"+reset)
- else: postify("-- [SYS]"+bold+"Missing arg(s)"+reset)
- else: postify("-- [SYS]"+bold+"Invalid Command"+reset)
- return 0
- else: return None
- def chat_start(self,rooms=None,name=None,password=None):
- if not rooms: rooms = str(input("Room names separated by spaces: ")).split(" ")
- if len(rooms) == 1 and rooms[0] == "": rooms = []
- if not name: name = str(input("Username: "))
- if name == "": name = None
- if not password: password = str(input("Password: "))
- if password == "": password = None
- self.userName=name.lower()
- self=TestBot(name,password,pm=True)
- self.userName=name.lower()
- for room in rooms: self.joinRoom(room)
- _thread.start_new_thread(self.main,())
- while True:
- outmsg=input()
- if self.chat_outProc(outmsg)==None:
- for room in rooms: self._rooms[room].message(outmsg)
- if __name__ == "__main__":
- postify(welcome);Testbot=TestBot()
- if gRooms==None or gPassword==None or gUsername==None: Testbot.chat_start(rooms=input("CHATROOM(s):"),name=input("Username: "),password=getpass.getpass())
- else: Testbot.chat_start(rooms=gRooms.split(" "),name=gUsername,password=gPassword)
Add Comment
Please, Sign In to add comment