コード例 #1
0
    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()
コード例 #2
0
 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)
コード例 #3
0
 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)
コード例 #4
0
 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")
コード例 #5
0
 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)
コード例 #6
0
ファイル: pm.py プロジェクト: ShiroeHellscythe/ch.py
 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()]
コード例 #7
0
    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)
コード例 #8
0
    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)
コード例 #9
0
 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")
コード例 #10
0
 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()
コード例 #11
0
ファイル: pm.py プロジェクト: ShiroeHellscythe/ch.py
 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")
コード例 #12
0
ファイル: pm.py プロジェクト: ShiroeHellscythe/ch.py
 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]
コード例 #13
0
    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
コード例 #14
0
    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)
コード例 #15
0
ファイル: fapthings.py プロジェクト: tomxgab/KuBot
import ch

import sys

fapthings = [("%s :D" % (ch.User(random.choice(room.usernames))))]
コード例 #16
0
ファイル: pm.py プロジェクト: ShiroeHellscythe/ch.py
 def _rcmd_block_list(self, args):
     self._blocklist = set()
     for name in args:
         if name == "":
             continue
         self._blocklist.add(ch.User(name))
コード例 #17
0
ファイル: where.py プロジェクト: TheClonerx/thebotx
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)
コード例 #18
0
ファイル: bot.py プロジェクト: Bugbunneh/Lilliard
  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
コード例 #19
0
ファイル: pm.py プロジェクト: ShiroeHellscythe/ch.py
 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)
コード例 #20
0
        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)
コード例 #21
0
ファイル: cookies.py プロジェクト: TheClonerx/thebotx
    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 &nbsp; &nbsp;" + "\n &nbsp; &nbsp;".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())
コード例 #22
0
            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 &nbsp; &nbsp;" + mini_profile
        if mod2 and full_profile:
            msg += "\n &nbsp; &nbsp;" + full_profile
        if mod1 and gender:
            msg += "\n &nbsp; &nbsp;" + gender
        if mod1 and age:
            msg += "\n &nbsp; &nbsp;" + age
        if mod1 and location:
            msg += "\n &nbsp; &nbsp;" + location
        if mod1 and picture:
            msg += "\n &nbsp; &nbsp;" + picture
room.message(msg, True)
コード例 #23
0
ファイル: pm.py プロジェクト: ShiroeHellscythe/ch.py
 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)
コード例 #24
0
ファイル: app.py プロジェクト: TimmingYukaMochida/testbot
    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
コード例 #25
0
ファイル: pm.py プロジェクト: ShiroeHellscythe/ch.py
 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)
コード例 #26
0
 def user(self):
     return ch.User(self.name)
コード例 #27
0
ファイル: example.py プロジェクト: tomxgab/ch.py
    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")
コード例 #28
0
ファイル: bg.py プロジェクト: TheClonerx/thebotx
        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)