def _rcmd_ok(self, owner, uid, success, name, ok_time, ip, mods, _): self.uid = uid self.puid = uid[0:8] self.ip = ip # if no name, join room as anon and no password if success == "N" and self.mgr.password is None and self.mgr.name is None: n = ok_time.rsplit('.', 1)[0][-4:] name = "!anon" + ch.getAnonId(n, self.puid) self.n = n self.user = ch.User(name) self.user.nameColor = n # if got name, join room as name and no password elif success == "N" and self.mgr.password is None: self.sendCommand("blogin", self.mgr.name) self.user = ch.User("#" + name) # if got password but fail to login elif success != "M": # unsuccessful login self._callEvent("onLoginFail") self.disconnect() else: self.logged = True self.user = ch.User(name) self.owner = ch.User(name=owner, perm=(self.name, 1048575)) self.mods = dict() if mods: for x in mods.split(";"): name, perm = x.split(",") self.mods[ch.User(name=name, perm=(self.name, int(perm)))] = perm self.i_log = list()
def _rcmd_blocked(self, mid, ip, banned, banner, btime): if banned == "": return target = ch.User(banned) user = ch.User(banner) self.banlist[target] = { "mid": mid, "ip": ip, "target": target, "time": float(btime), "src": user } self._callEvent("onBan", user, target)
def _rcmd_unblocked(self, mid, ip, unbanned, unbanner, btime): if unbanned == "": return target = ch.User(unbanned) user = ch.User(unbanner) del self.banlist[target] self.unbanlist[user] = { "mid": mid, "ip": ip, "target": target, "time": float(btime), "src": user } self._callEvent("onUnban", user, target)
def _rcmd_unblocklist(self, *items): self.unbanlist = dict() for item in items: mid, ip, unbanned, ubtime, unbanner = item.split(":") if unbanned == "": continue user = ch.User(unbanned) self.unbanlist[user] = { "mid": mid, "ip": ip, "target": unbanned, "time": float(ubtime), "src": ch.User(unbanner) } self._callEvent("onUnBanlistUpdate")
def onPMMessage(self, pm, user, body): pm.message( user, "Hello I'm a bot created by http://lsabelita.chatango.com | Please visit my chat http://project-koqu.chatango.com for more information | I do not run in pm, visit a chat that I'm online to use." ) self.pm.message(ch.User("lsabelita"), "[PM] - " + body + " ~" + user.name)
def _rcmd_idleupdate(self, name, status): user = ch.User(name) last_on, is_on, idle = self._status[user] if status == '1': self._status[user] = [last_on, is_on, 0] else: self._status[user] = [last_on, is_on, time.time()]
def removeMod(self, user): """ Remove a moderator. @type user: User @param user: User to demod. """ if self.getLevel(ch.User(self.currentname)) == 2: self.sendCommand("removemod", user.name)
def addMod(self, user): """ Add a moderator. @type user: User @param user: User to mod. """ if self.getLevel(ch.User(self.currentname)) == 2: self.sendCommand("addmod", user.name)
def _rcmd_mods(self, *args): premods = set(self.mods) self.mods = dict() for x in args: perm = int(x.split(",")[1]) self.mods[ch.User(name=x.split(",")[0], perm=(self.name, perm))] = perm mods = set(self.mods) for user in mods - premods: # modded self._callEvent("onModAdd", user) for user in premods - mods: # demodded self._callEvent("onModRemove", user) self._callEvent("onModChange")
def _rcmd_g_participants(self, *items): for item in items: sid, ctime, puid, name, anon_name, unknown = item.split(":") if name == "None": n = ctime.rsplit('.', 1)[0][-4:] name = "#" + (anon_name if anon_name != "None" else "!anon" + ch.getAnonId(n, puid)) user = ch.User(name=name, room=self, puid=puid, participant=('1', self, sid)) self.userlist.append(user) self.participant_lock = False for participant in self.participant_queue: self._rcmd_participant(*participant) self._participant_queue = list()
def _rcmd_wl(self, items): self._contacts = set() for name, last_on, is_on, idle in items: user = ch.User(name) if last_on == "None": pass # in case chatango gives a "None" as data argument elif not is_on == "on": self._status[user] = [int(last_on), False, 0] elif idle == '0': self._status[user] = [int(last_on), True, 0] else: self._status[user] = [ int(last_on), True, time.time() - (int(idle) * 60) ] self._contacts.add(user) self._callEvent("onPMContactlistReceive")
def _rcmd_track(self, name, itime, status): user = ch.User(name) if user in self._status: last_on = self._status[user][0] else: last_on = 0 if status == "online": if itime == '0': idle = 0 else: idle = time.time() - int(itime) * 60 is_on = True else: last_on = itime idle = 0 is_on = False self._status[user] = [last_on, is_on, idle]
def _rcmd_b(self, mtime, name, anon_name, puid, mid, i, ip, channel, _, *rawmsgs): mtime = float(mtime) rawmsg = ":".join(rawmsgs) msg, n, f = ch.clean_message(rawmsg) if name == "": nameColor = None name = "#" + (anon_name or "!anon" + ch.getAnonId(n, puid)) else: nameColor = ch.parseNameColor(n) if f: fontColor, fontFace, fontSize = ch.parseFont(f) else: fontColor, fontFace, fontSize = None, None, None user = ch.User( name=name, puid=puid, ip=ip, nameColor=nameColor, fontColor=fontColor, fontFace=fontFace, fontSize=fontSize, ) # Create an anonymous message and queue it because mid is unknown. msg = ch.Message(time=mtime, user=user, body=msg, raw=rawmsg, ip=ip, i=i, channel=channel, nameColor=nameColor, fontColor=fontColor, fontFace=fontFace, fontSize=fontSize, mid=mid, puid=puid, room=self) self.mqueue[i] = msg
def _rcmd_participant(self, status, sid, puid, name, anon_name, unknown, ctime): if self.participant_lock: self.participant_queue.append( (status, sid, puid, name, anon_name, unknown, ctime)) return if name == "None": n = ctime.rsplit('.', 1)[0][-4:] name = "#" + (anon_name if anon_name != "None" else "!anon" + ch.getAnonId(n, puid)) user = ch.User(name=name, puid=puid, participant=(status, self, sid)) if status == "0": # leave self.userlist.remove(user) if not self.mgr.userlistEventUnique or user not in self.userlist: self._callEvent("onLeave", user, puid) else: # join self.userlist.append(user) if not self.mgr.userlistEventUnique or user not in self.userlist: self._callEvent("onJoin", user, puid)
import ch import sys fapthings = [("%s :D" % (ch.User(random.choice(room.usernames))))]
def _rcmd_block_list(self, args): self._blocklist = set() for name in args: if name == "": continue self._blocklist.add(ch.User(name))
import config import ch clang = "en" if user.name[0] in "#!" else config.User(user.name).lang if not args.strip(): msg = config.get_lang(clang, "missing_argument") msg = msg.format(config.get_lang(clang, "argument_user")) else: name = args.split()[0].lower() capser = ch.User(name).capser rooms = list(sorted(x.name for x in self.rooms if name in x.usernames)) if not rooms: msg = config.get_lang(clang, "user_not_found") msg = msg.format(capser) else: msg = config.get_lang(clang, "user_found") msg = msg.format(capser, ", ".join(rooms)) room.message(msg, True)
def onMessage(self, room, user, message): try: if room.getLevel(self.user) > 0: print(user.name, message.body) else: print(user.name, message.body) if self.user == user: return if message.body[0] == "!": ##Here is the Prefix part data = message.body[1:].split(" ", 1) if len(data) > 1: cmd, args = data[0], data[1] else: cmd, args = data[0], "" if cmd == "ev" or cmd == "eval" or cmd == "e": ret = eval(args) if ret == None: room.message("Done.") return room.message(str(ret)) ##Say #Make your bot say what you want if cmd == "say": room.message(args) ##Random User #What's this for ? this one cmd will make your boy say the name of a random user in a room if cmd == "randomuser": room.message(random.choice(room.usernames)) ##Check Level #This one cmd is tho make your bot say your mod level in the current room you're in elif cmd == "mylvl": room.message("Your mod level: %i" %(room.getLevel(user))) ##List Mods #List of Mods and Owner name in the current room you're in elif cmd == "mods": room.message(", ".join(room.modnames + [room.ownername])) ##DANCE!!!! #Dance ? Of Course !!! ^_^ elif cmd == "dance": for i, msg in enumerate(dancemoves): self.setTimeout(i / 2, room.message, msg) ##Check if Mod #not really important elif cmd == "ismod": user = ch.User(args) if room.getLevel(user) > 0: room.message("yesh") else: room.message("nope") except Exception as e: try: et, ev, tb = sys.exc_info() lineno = tb.tb_lineno fn = tb.tb_frame.f_code.co_filename room.message("[Expectation Failed] %s Line %i - %s"% (fn, lineno, str(e))) return except: room.message("Undescribeable error detected !!") return
def _rcmd_msgoff(self, name, cid, unknown, mtime, pro, *rawmsgs): user = ch.User(name) body = ch.strip_html(":".join(rawmsgs)) self._callEvent("onPMOfflineMessage", user, body)
else: cuser.del_note(note_n - 1) msg = config.get_lang(lang, "deleted_note") msg = msg.format(note_n) elif args[0].lower() == "_see" and user.name in config.owners: if len(args) == 1: msg = config.get_lang(lang, "missing_argument") arg = config.get_lang(lang, "agument_user") msg = msg.format(arg) elif not args[1].isalnum(): msg = config.get_lang(lang, "invalid_argument") arg = config.get_lang(lang, "invalid_argument_not_an_user") msg = msg.format(2, arg) elif not config.User(args[1]).get_notes_len(): msg = config.get_lang(lang, "doesnt_has_notes") msg = msg.format(ch.User(args[1]).capser) elif not args[2:]: auser = config.User(args[1]) page = auser.get_notes(slice(0, 10)) msg = config.get_lang(lang, "notes__see_page") see_n = config.get_lang(lang, "notes_see_n") msg = msg.format( ch.User(args[1]).capser, 1, auser.get_notes_len() // 10 + 1, "\n ".join( see_n.format(i + 1, html.escape(n)) for i, n in enumerate(page) ) ) elif not args[2].isnumeric(): msg = config.get_lang(lang, "invalid_argument") arg = config.get_lang(lang, "invalid_argument_not_an_int") msg = msg.format(3, arg)
return str(c) if args and args[0].lower() == "top": if len(args) < 2: cursor = config.database.cursor() cursor.execute("select name from users " "where cookies != 0 " "order by cookies desc " "limit 10") top = [x[0] for x in cursor] cursor.close() top = [config.User(x) for x in top] top = [ "{}: {} ({})".format(i + 1, ch.User(x.name).capser, cookies_str(x)) for i, x in enumerate(top) ] msg = "\n\n" + config.get_lang(lang, "cookies_top").format(len(top)) msg += "\n " + "\n ".join(top) else: cursor = config.database.cursor() cursor.execute("select name, cookies from users " "where cookies != 0 " "order by cookies desc") top = list(cursor) cursor.close() for name, cookies in top: if name == args[1].lower(): top = [u for u, c in top] index = top.index(args[1].lower())
full_profile = config.get_lang(clang, "who_fprofile").format( html.escape(full_profile)) picture = url2 + "full.jpg" with urllib.request.urlopen(picture) as res: pic = res.read(len(utils.DEFAULT_IMG)) res.close() if pic == utils.DEFAULT_IMG: picture = None else: picture = config.get_lang(clang, "who_image").format(picture) if not mod1 and not mod2 and not picture: msg = config.get_lang(clang, "cant_get_user").format(name) else: msg = config.get_lang(clang, "who_name").format(ch.User(name).capser) if mod1 and mini_profile: msg += "\n " + mini_profile if mod2 and full_profile: msg += "\n " + full_profile if mod1 and gender: msg += "\n " + gender if mod1 and age: msg += "\n " + age if mod1 and location: msg += "\n " + location if mod1 and picture: msg += "\n " + picture room.message(msg, True)
def _rcmd_wloffline(self, name, ltime): user = ch.User(name) last_on = float(ltime) self._status[user] = [last_on, False, 0] self._callEvent("onPMContactOffline", user)
def onMessage(self, room, user, message): try: if user == self.user: return global activated global lockdown global prefix global owner global mod global registered try: if room.getLevel(self.user) > 0: print( "[%s]\033[94m[MSG]\033[0m\033[31m[Rank %s]\033[0m\033[41m[%s][%s] %s: %s" % (time.strftime("%d/%m/%y- %H:%M:%S", time.localtime(time.time())), self.getAccess(room, user), room.name, message.ip, user.name.title(), message.body)) else: print( "[%s]\033[94m[MSG]\033[0m\033[31m[Rank %s]\033[0m\033[41m[%s][User_IP: Null] %s: %s" % (time.strftime("%d/%m/%y- %H:%M:%S", time.localtime(time.time())), self.getAccess(room, user), room.name, user.name.title(), message.body)) except: pass if user.name.startswith("#") or user.name.startswith("!"): return if self.user == user: return if user.name in blacklist: return if self.getAccess(room, user) > 0: if not activated and self.getAccess(room, user) < 4: return #return, if not activated and user rank is less than 4. ##Persona | You design a good personality for your bot in this part if "hey" in message.body: room.message("Yesh, " + message.body) if "hello" == message.body.lower( ): #for example if someone said "hello" in the chatroom room.message("Hello " + user.name.title() ) #the bot will answer with "Hello User1Name" if "hi" == message.body.lower(): room.message("Hi " + user.name.title()) if "please kill it" == message.body: self.stop() ##Commands | You design great commands for your bot in this part if message.body[ 0] == prefix: #prefix usage in this line (for this case I use "*" as prefix) data = message.body[1:].split( " ", 1 ) #This part splits message body into [0]prefix and [1:]data ([1:] <- this means the message body's second character and after) and data will be split into 2 (cmd(data[0]), args(data[1])) which is very usefull. (Many thanks to TryHardHusky) if len( data ) == 2: #If there are more than 1 data (This is where we will get args) cmd, args = data[0], data[ 1] #the first data (data[0]) will be the cmd (specified command) and the next data will be args (it doesn't matter how many word next to the cmd, It'd eventually be args) else: #If there is only 1 data (No args) cmd, args = data[0], "" #the arg will simply be "" (Empty) cmd == cmd.lower() ##Activating and Inactivating Bot if cmd == "shutdown": if self.getAccess(room, user) == 5: self.saveAll() room.message("Bye *waves*") self.setTimeout( 3, self.stop, ) if cmd == "activate": if self.getAccess(room, user) < 4: return activated = True room.message("[Activated]") if cmd == "restrict": if self.getAccess(room, user) < 4: return activated = False room.message("[Restricted]") if not activated and self.getAccess(room, user) < 5: return #Ignore user with rank lower than 5 when not activated if lockdown and self.getAccess(room, user) < 4: return #Ignore user with rank lower than 4 when in lockdown if cmd == "help": #Help command (It will show the bot's version, user's rank status, user's room level, and Available commands) version = "Example Version" #You set the bot's version manually in this line rank = 0 moded = "no" rank = self.getAccess(room, user) if room.getLevel(user) > 0: moded = "yes" if rank > 1: room.message( "<font color='#FF8C00'><b>" + self.user.name + "</b></font>(<font color='#B8860B'><b>" + version + "</b></font>)<br/>" + user.name.title() + " - [<font color='#FF0000'><b>Rank " + str(rank) + "</b></font>] - Moded [<b>" + moded + "</b>]<br/>cmds: use [%s] as prefix [%s]" % (prefix, ", ".join(command_list)), True) if rank == 0: moded = "Null" if room.getLevel(user) > 0: moded = "Moded" room.message( "<font color='#FF8C00'><b>" + self.user.name + "</b></font>(<font color='#B8860B'><b>" + version + "</b></font>)<br/>" + user.name.title() + " - [<font color='#FF0000'><b>Unregistered</b></font>] - [<b>" + moded + "</b>]<br/>cmds: use [%s] as prefix [%s]" % (prefix, ", ".join(['help', 'wl', 'uwl'])), True) if self.getAccess( room, user ) == 0 and cmd == "wl" or cmd == "register" or cmd == "reg": #First cmd for unwhitelisted user. if args == "": registered.append( user.name) #To put user.name in whitelist room.message( "Done, You're now a Registered as player.") else: if args in registered: room.message(args.title() + " is already registered.") return if args in room.usernames: registered.append(args) room.message("Done, " + args.title() + " is now Registered.") else: room.message("I don't see " + args.title() + " here.") if self.getAccess( room, user ) > 0 and cmd == "uwl" or cmd == "unregister" or cmd == "unreg": if user.name in registered: registered.remove(user.name) if user.name in mod: mod.remove(user.name) room.message("Success, You unregistered yourself.") if self.getAccess(room, user) < 1: return # This is to filter the command section | return, If user is not whitelisted. ################################################################################################################## ##======================================= Commands for rank 2+ ===============================================## if cmd == "setrank" and self.getAccess(room, user) == 5: help_output = "Usage : ~setrank [usertarget] [number]<br/>Example : ~setrank gayman 1]" if args == "": room.message(help_output, True) if args != "": # try: args = args.lower() target, rank = args.split(" ", 1) target = str(target) rank = int(rank) available_rank = [-1, 0, 1, 4, 5] if not rank in available_rank: room.message("Type a propper rank number.") return if rank == 1: if target in registered: room.message(target.title() + " is already a Player.") return if target in blacklist: blacklist.pop(target) if target in owner: owner.remove(target) if target in mod: mod.remove(target) registered.append(target) room.message(target.title() + "'s rank is set to: " + str(rank) + " [Player]") if rank == 4: if target in mod: room.message(target.title() + " is already a Moderator.") return if target in blacklist: blacklist.pop(target) if target in owner: owner.remove(target) if target in registered: registered.remove(target) mod.append(target) room.message(target.title() + "'s rank is set to: " + str(rank) + " [Moderator]") if rank == 5: if not user.name == "tsuid": return #put your name there (if user.name == "yourname" and user.name == "anothername":) To prevent other Owners(in this case is Co-Owners) to set user's rank to Co-Owner. if target in owner: room.message(target.title() + " is already a Co-Owner.") return if target in blacklist: blacklist.pop(target) if target in registered: registered.remove(target) if target in mod: mod.remove(target) owner.append(target) room.message(target.title() + "'s rank is set to: " + str(rank) + " [Owner]") if rank == 0: if not user.name == "tsuid": return #put your name there (if user.name == "yourname" and user.name == "anothername":) To prevent your account(s) from being unwhitelisted by your Co-Owner. if target in owner: owner.remove(target) if target in blacklist: blacklist.pop(target) if target in registered: registered.remove(target) if target in mod: mod.remove(target) room.message(target.title() + "'s rank is set to: " + str(rank)) if rank == -1: if target == "tsuid": return #put your name there (if target == "yourname" and target == "anothername":) To prevent your account(s) from being blacklisted. if target in blacklist: room.message( target.title() + " is already blacklisted.<br/>Reason: %s" % blacklist[target]) return blacklist.update({target: "Annoying reason."}) room.message(target.title() + "'s rank is set to: " + str(rank) + " [Fugitive]") # except: # room.message(help_output, True) if cmd == "lockdown": #This is to lock commands for user with rank lower than 4 if self.getAccess(room, user) < 4: return if lockdown: return room.message("Command is Locked.") lockdown = True if cmd == "wake": #This is to unlock the command lockdown if self.getAccess(room, user) < 4: return if not lockdown: return room.message("Command is unlocked.") lockdown = False if cmd == "bl" or cmd == "blacklist": if args == "": if len(blacklist) < 0: room.message("Blacklist: None") return black_users = ["#redperson"] for i in blacklist: black_users.append(i) room.message("Blacklist: %s." % (", ".join(black_users))) if len(args.split(" ")) > 0: if len(args.split(" ", 1)) == 2: target, reason = args.split(" ", 1) target = target.lower() if len(args.split(" ", 1)) == 1: target = args.lower() if self.getAccess(room, ch.User(target)) == 5: return #to prevent owner and co-owners from blacklisted if self.getAccess( room, ch.User(target) ) >= 4 and self.getAccess( room, user ) == 4: #To prevent bot moderators from banning another moderator or even owners room.message( "You don't have the permission to do that") return if target in blacklist: room.message( target.title() + "'s status: Blacklisted<br/>Reason: <i>%s</i>" % (blacklist[args]), True) if target not in blacklist and len(args) > 1: if self.getAccess(room, user) < 4: return if len(reason) < 10: room.message( "Reason is too short. put minimal 10 characters." ) return blacklist.update({str(target): str(reason)}) room.message( target.title() + " is blacklisted.<br/>" + user.name.title() + "'s Reason: " + reason, True) if cmd == "unblacklist" or cmd == "ubl": if self.getAccess(room, user) < 4: return if args == "": return args = args.lower() if args not in blacklist: room.message(args.title() + " is not blacklisted.") return if args in mod and self.getAccess(room, user) < 5: room.message( "You don't have permission to unblacklist that user." ) return blacklist.pop(args) room.message(args.title() + " is unblacklisted.") if cmd == "unchain": if self.getAccess(room, user) < 4: return if args == "": return args = args.lower() if args not in blacklist: room.message(args.title() + " is not chained.") return if args in mod and self.getAccess(room, user) < 5: room.message( "You don't have permission to unchain that user.") return blacklist.pop(args) room.message(args.title() + " is unchained.") if cmd == "chain": if args == "": if len(blacklist) < 0: room.message("Chained: None") return black_users = ["#esperguy"] for i in blacklist: black_users.append(i) room.message("Chained: %s." % (", ".join(black_users))) if len(args.split(" ")) > 0: if len(args.split(" ", 1)) == 2: target, reason = args.split(" ", 1) target = target.lower() if len(args.split(" ", 1)) == 1: target = args.lower() if target in blacklist and len(args) == 1: room.message( target.title() + "'s status: Chained<br/>Reason: <i>%s</i>" % (blacklist[args]), True) if target not in blacklist and len(args) > 1: if self.getAccess(room, user) < 4: return if len(reason) < 10: room.message( "Reason is too short. put minimal 10 characters." ) return blacklist.update({target: reason}) room.message( target.title() + " is Chained.<br/>" + user.name.title() + "'s Reason: <i>%s</i>" % (reason), True) if cmd == "lock": if self.getAccess(room, user) < 2: room.message("No.") return if args in locks: room.message("It's locked already.") return if args in self.roomnames: if self.getAccess(room, user) > 3: locks.append(args) room.message("locked <b>%s</b>" % args, True) else: room.message( "You don't have permission to do that.") if args == "": if room.name in locks: room.message("It's locked already.") return locks.append(room.name) room.message("locked <b>%s</b>" % room.name, True) if args not in self.roomnames: if args == "": return room.message("I haven't joined %s." % args) return if cmd == "unlock": if self.getAccess(room, user) < 2: return if args in self.roomnames: if args in locks: if self.getAccess(room, user) > 3: locks.remove(args) room.message("unlocked <b>%s</b>" % args, True) else: room.message( "You don't have permission to do that.") else: room.message("It's not even locked.") return if args == "": if room.name in locks: locks.remove(room.name) room.message("unlocked <b>%s</b>" % room.name, True) else: room.message("It's not even locked.") return if args not in self.roomnames: if args == "": return room.message("I haven't joined %s" % args) return if cmd == "ban": if room.getLevel(user) > 0: if room.getLevel(self.user) > 0: room.banUser(ch.User(args)) room.message(args.title() + " is banned") else: room.message("I'm not even a mod here") else: room.message("You don't have permission") if cmd == "unban": if args == "": return args = args.lower() if room.getLevel(user) > 0: if room.getLevel(self.user) > 0: if ch.User(args) not in room.getBanlist(): room.message(args.title() + " is not even banned.") return room.unban(ch.User(args)) room.message(args.title() + " is unbanned") else: room.message("I'm not even a mod here") else: room.message("You don't have permission") if cmd == "broadcast": if self.getAccess(room, user) > 3: for room in self.rooms: room.message( "Broadcast from - <b>" + user.name + "</b>: " + args, True) else: room.message("You don't have permission.") if cmd == "join": #This command is free for all registered user (rank 1+) to use if args == "": return if args in self.roomnames: room.message("I'm there already.") else: self.joinRoom(args) room.message("*Joins " + args.title() + "*") if cmd == "leave": if self.getAccess(room, user) > 1: if args == "": room.message("Okay, I'm leaving this room.") self.setTimeout(2, self.leaveRoom, room.name) else: if self.getAccess(room, user) < 4: return self.leaveRoom(args) room.message("I'm leaving " + args.title()) else: room.message("You don't have permission.") if cmd == "save" and self.getAccess(room, user) >= 4: self.saveAll() room.message("Database has been saved.") if (cmd == "eval") and self.getAccess( room, user ) == 5: #DO NOT MESS WITH THIS COMMAND IF YOU DON'T KNOW WHAT YOU'RE DOING (This is a vital command) ret = eval(args) if ret == None: room.message("Done.") return room.message(str(ret)) ##======================================= Commands for rank 2+ ===============================================## ##=============================================== End ==========================================================## ################################################################################################################## if cmd == ("say"): if args: room.message(args) else: room.message("What to say ?") if cmd == "reverse" or cmd == "rsay": #Reversed arguments if args: room.message(args[::-1]) else: room.message("F**k off"[::-1]) elif cmd == "cmds": if self.getAccess(room, user) < 1: return room.message( "some commands you can use, with [%s] as prefix [%s]" % (prefix, ", ".join(command_list))) if cmd == "pm" and len(args) > 1: name, msg = args.split(" ", 1) self.pm.message(ch.User(name.lower()), msg + " - from " + user.name) room.message( 'Sent to <font size="15"><font color="#FF9966"><b>%s</b></font></font>' % name, True) ##Checking levels and ranks stuff elif cmd == "level": if args == "": level = room.getLevel(user) if level == 1: title = "Moderator" if level == 2: title = "OWNER" if level == 0: title = "Slave" room.message("Your room level is: %s [%s]" % (level, title)) else: level = room.getLevel(ch.User(args)) if level == 1: title = "Moderator" if level == 2: title = "OWNER" if level == 0: title = "Slave" room.message("%s's room level is: %s [%s]" % (args.title(), level, title)) elif cmd == "rank": if args == "": rank = self.getAccess(room, user) if rank == 1: title = "Player" room.message( "Your rank is: <font color='#7cfc00'><b>%s</b></font> [<font color='#7cfc00'>%s</font>]" % (rank, title), True) if rank == 2: title = "Room Mod" room.message( "Your rank is: <font color='#7cfc00'><b>%s</b></font> [<font color='#7cfc00'>%s</font>]" % (rank, title), True) if rank == 3: title = "Room Admin" room.message( "Your rank is: <font color='#7cfc00'><b>%s</b></font> [<font color='#7cfc00'>%s</font>]" % (rank, title), True) if rank == 4: title = "Moderator" room.message( "Your rank is: <font color='#0000ff'><b>%s</b></font> [<font color='#fffaf0'><b>%s</b></font>]" % (rank, title), True) if rank == 5: title = "Owner" room.message( "Your rank is: <font color='#c0c0c0'><b>%s</b></font> [<font color='#87ceeb'><b>%s</b></font>]" % (rank, title), True) else: rank = self.getAccess(room, ch.User(args)) if rank == 0: room.message(args + " is unregistered.") if rank == 1: title = "Player" room.message( args + "'s rank is: <font color='#7cfc00'><b>%s</b></font> [<font color='#7cfc00'>%s</font>]" % (rank, title), True) if rank == 2: title = "Room Mod" room.message( args + "'s rank is: <font color='#7cfc00'><b>%s</b></font> [<font color='#7cfc00'>%s</font>]" % (rank, title), True) if rank == 3: title = "Room Admin" room.message( args + "'s rank is: <font color='#7cfc00'><b>%s</b></font> [<font color='#7cfc00'>%s</font>]" % (rank, title), True) if rank == 4: title = "Moderator" room.message( args + "'s rank is: <font color='#0000ff'><b>%s</b></font> [<font color='#fffaf0'><b>%s</b></font>]" % (rank, title), True) if rank == 5: title = "Owner" room.message( args + "'s rank is: <font color='#c0c0c0'><b>%s</b></font> [<font color='#87ceeb'><b>%s</b></font>]" % (rank, title), True) elif cmd == "mods": args = args.lower() if args == "": room.message( "<br/>||<font color='#87ceeb'><b>OWNER</b></font>: <u>" + (room.ownername) + "</u> <br/>||<b>Mods</b>: " + ", ".join(room.modnames), True) return if args in self.roomnames: modask = self.getRoom(args).modnames owner = self.getRoom(args).ownername room.message( "<br/>||<font color='#87ceeb'><b>OWNER</b></font>: <u>" + (owner) + "</u> <br/>||<b>Mods</b>: " + ", ".join(modask), True) else: self.joinRoom(args) cek_mods[user.name] = json.dumps([room.name, args]) ##Some certain commands for rank 1+ if cmd == ("find") and len(args) > 0: name = args.split()[0].lower() if not ch.User(name).roomnames: room.message("dont see them. ^^") else: room.message( "%s is curently in <b>%s</b> >_>" % (args, ", ".join(ch.User(name).roomnames)), True) if cmd == "multichat": room.message("http://ch.pew.im/chat/?" + args) if cmd == "rooms": room.message( "||i'm in : <b>%s</b> ||" % (", ".join(self.roomnames)), True) except Exception as e: try: et, ev, tb = sys.exc_info() lineno = tb.tb_lineno fn = tb.tb_frame.f_code.co_filename room.message("[Error] %s Line %i - %s" % (fn, lineno, str(e))) return except: room.message("Undescribeable error detected !!") return
def _rcmd_wlonline(self, name, ltime): user = ch.User(name) last_on = float(ltime) self._status[user] = [last_on, True, last_on] self._callEvent("onPMContactOnline", user)
def user(self): return ch.User(self.name)
def onMessage(self, room, user, message): if room.getLevel(self.user) > 0: print(user.name, message.ip, message.body) else: print(user.name, message.body) if self.user == user: return if message.body[0] == "!": data = message.body[1:].split(" ", 1) if len(data) > 1: cmd, args = data[0], data[1] else: cmd, args = data[0], "" if cmd == "delay": self.setTimeout(int(args), room.message, ":D") elif cmd == "randomuser": room.message(random.choice(room.usernames)) elif cmd == "ival": self.setInterval(int(args), room.message, ":D") elif cmd == "mylvl": room.message("Your mod level: %i" % (room.getLevel(user))) elif cmd == "mods": room.message(", ".join(room.modnames + [room.ownername])) elif cmd == "dance": for i, msg in enumerate(dancemoves): self.setTimeout(i / 2, room.message, msg) elif cmd == "td": word = args\ .replace(" ", "%20")\ .replace("&", "%26")\ .replace("%", "%25")\ .replace("<", "%3C")\ .replace("=", "%3D") def rfinish(doc): doc = doc.read().decode() m = re.search("<h1>(.*?)</h1>\n(.*?)<BR><i>(.*)</i>", doc, re.DOTALL | re.IGNORECASE) if m: room.message( ("<b>%s:</b> <i>%s</i> - %s" % (m.group(1), m.group(2), m.group(3))).replace( "%20", " "), html=True) else: room.message("An error occured...") self.deferToThread( rfinish, urlreq.urlopen, "http://thesurrealist.co.uk/slang.cgi?ref=" + word) elif cmd == "ismod": user = ch.User(args) if room.getLevel(user) > 0: room.message("yes") else: room.message("no") elif cmd == "define": if args.find(":") != -1: #if there's a colon somewhere word, definition = args.split(":", 1) if word in dictionary: room.message(word + ": already defined") else: dictionary[word] = definition room.message(word + ": " + definition) else: word = args if word in dictionary: room.message(word + ": " + dictionary[word]) else: room.message(word + ": not found")
rgb = msgbg.get("bgc") if len(rgb) == 3: r, g, b = (int(x, 16) * 15 for x in rgb) else: r, g, b = (int(rgb[i * 2:i * 2 + 2], 16) for i in range(int(len(rgb) / 2))) base = [255, 255, 255] mix = [0, 0, 0] mix[0] = round((1 - a) * 255 + a * r) mix[1] = round((1 - a) * 255 + a * g) mix[2] = round((1 - a) * 255 + a * b) col = "{}{}{}".format(*(hex(x)[2:].zfill(2) for x in mix)) col = '<f x{0}{1}="{2}">██████<f x{0}{3}="{2}">'.format( str(self.user.fontSize).zfill(2), col, self.user.fontFace, self.user.fontColor) rgba = "rgba({}, {}, {}, {})".format(r, g, b, a) if not mod1 and not msgbg: msg = config.get_lang(clang, "cant_get_user").format(name) else: msg = config.get_lang(clang, "background") if not bgtime: bgtime = config.get_lang(clang, "time_expired").format("?") else: delta = utils.delta_time(bgtime) bgtime = utils.str_delta(clang, delta) if delta.past: bgtime = config.get_lang(clang, "time_expired").format(bgtime) msg = msg.format( ch.User(name).capser, col, rgba, bgtime, url + "msgbg.jpg") room.message(msg, html=True)