Esempio n. 1
0
def is_user_notice(nick):
    if nick in var.USERS and var.USERS[nick]["account"] and var.USERS[nick]["account"] != "*" and not var.DISABLE_ACCOUNTS:
        if var.USERS[nick]["account"] in var.PREFER_NOTICE_ACCS:
            return True
    if nick in var.USERS and not var.ACCOUNTS_ONLY:
        ident = var.USERS[nick]["ident"]
        host = var.USERS[nick]["host"]
        for hostmask in var.PREFER_NOTICE:
            if var.match_hostmask(hostmask, nick, ident, host):
                return True
    return False
Esempio n. 2
0
def is_user_notice(nick):
    if nick in var.USERS and var.USERS[nick]["account"] and var.USERS[nick][
            "account"] != "*" and not var.DISABLE_ACCOUNTS:
        if var.USERS[nick]["account"] in var.PREFER_NOTICE_ACCS:
            return True
    if nick in var.USERS and not var.ACCOUNTS_ONLY:
        ident = var.USERS[nick]["ident"]
        host = var.USERS[nick]["host"]
        for hostmask in var.PREFER_NOTICE:
            if var.match_hostmask(hostmask, nick, ident, host):
                return True
    return False
Esempio n. 3
0
def is_user_simple(nick):
    if nick in var.USERS:
        ident = var.USERS[nick]["ident"]
        host = var.USERS[nick]["host"]
        acc = var.USERS[nick]["account"]
    else:
        return False
    if acc and acc != "*" and not var.DISABLE_ACCOUNTS:
        if acc in var.SIMPLE_NOTIFY_ACCS:
            return True
        return False
    elif not var.ACCOUNTS_ONLY:
        for hostmask in var.SIMPLE_NOTIFY:
            if var.match_hostmask(hostmask, nick, ident, host):
                return True
    return False
Esempio n. 4
0
def is_user_simple(nick):
    if nick in var.USERS:
        ident = var.USERS[nick]["ident"]
        host = var.USERS[nick]["host"]
        acc = var.USERS[nick]["account"]
    else:
        return False
    if acc and acc != "*" and not var.DISABLE_ACCOUNTS:
        if acc in var.SIMPLE_NOTIFY_ACCS:
            return True
        return False
    elif not var.ACCOUNTS_ONLY:
        for hostmask in var.SIMPLE_NOTIFY:
            if var.match_hostmask(hostmask, nick, ident, host):
                return True
    return False
Esempio n. 5
0
    def caller(self, *args):
        largs = list(args)

        cli, rawnick, chan, rest = largs
        nick, mode, ident, host = parse_nick(rawnick)

        if ident is None:
            ident = ""

        if host is None:
            host = ""

        if not self.raw_nick:
            largs[1] = nick

        if not self.pm and chan == nick:
            return # PM command, not allowed

        if not self.chan and chan != nick:
            return # channel command, not allowed

        if chan.startswith("#") and chan != botconfig.CHANNEL and not (self.admin_only or self.owner_only):
            if "" in self.cmds:
                return # don't have empty commands triggering in other channels
            for command in self.cmds:
                if command in botconfig.ALLOWED_ALT_CHANNELS_COMMANDS:
                    break
            else:
                return

        if nick in var.USERS and var.USERS[nick]["account"] != "*":
            acc = var.USERS[nick]["account"]
        else:
            acc = None

        if "" in self.cmds:
            return self.func(*largs)

        if self.phases and var.PHASE not in self.phases:
            return

        if self.playing and (nick not in var.list_players() or nick in var.DISCONNECTED):
            if chan == nick:
                pm(cli, nick, messages["player_not_playing"])
            else:
                cli.notice(nick, messages["player_not_playing"])
            return

        if self.silenced and nick in var.SILENCED:
            if chan == nick:
                pm(cli, nick, messages["silenced"])
            else:
                cli.notice(nick, messages["silenced"])
            return

        if self.roles:
            for role in self.roles:
                if nick in var.ROLES[role]:
                    break
            else:
                return

            return self.func(*largs) # don't check restrictions for role commands

        forced_owner_only = False
        if hasattr(botconfig, "OWNERS_ONLY_COMMANDS"):
            for command in self.cmds:
                if command in botconfig.OWNERS_ONLY_COMMANDS:
                    forced_owner_only = True
                    break

        if self.owner_only or forced_owner_only:
            if var.is_owner(nick, ident, host):
                adminlog(chan, rawnick, self.name, rest)
                return self.func(*largs)

            if chan == nick:
                pm(cli, nick, messages["not_owner"])
            else:
                cli.notice(nick, messages["not_owner"])
            return

        if var.is_admin(nick, ident, host):
            if self.admin_only:
                adminlog(chan, rawnick, self.name, rest)
            return self.func(*largs)

        if not var.DISABLE_ACCOUNTS and acc:
            if acc in var.DENY_ACCOUNTS:
                for command in self.cmds:
                    if command in var.DENY_ACCOUNTS[acc]:
                        if chan == nick:
                            pm(cli, nick, messages["invalid_permissions"])
                        else:
                            cli.notice(nick, messages["invalid_permissions"])
                        return

            if acc in var.ALLOW_ACCOUNTS:
                for command in self.cmds:
                    if command in var.ALLOW_ACCOUNTS[acc]:
                        if self.admin_only:
                            adminlog(chan, rawnick, self.name, rest)
                        return self.func(*largs)

        if host:
            for pattern in var.DENY:
                if var.match_hostmask(pattern, nick, ident, host):
                    for command in self.cmds:
                        if command in var.DENY[pattern]:
                            if chan == nick:
                                pm(cli, nick, messages["invalid_permissions"])
                            else:
                                cli.notice(nick, messages["invalid_permissions"])
                            return

            for pattern in var.ALLOW:
                if var.match_hostmask(pattern, nick, ident, host):
                    for command in self.cmds:
                        if command in var.ALLOW[pattern]:
                            if self.admin_only:
                                adminlog(chan, rawnick, self.name, rest)
                            return self.func(*largs)

        if self.admin_only:
            if chan == nick:
                pm(cli, nick, messages["not_an_admin"])
            else:
                cli.notice(nick, messages["not_an_admin"])
            return

        return self.func(*largs)
Esempio n. 6
0
    def caller(self, *args):
        largs = list(args)

        cli, rawnick, chan, rest = largs
        nick, mode, ident, host = parse_nick(rawnick)

        if ident is None:
            ident = ""

        if host is None:
            host = ""

        if not self.raw_nick:
            largs[1] = nick

        if not self.pm and chan == nick:
            return  # PM command, not allowed

        if not self.chan and chan != nick:
            return  # channel command, not allowed

        if chan.startswith("#") and chan != botconfig.CHANNEL and not (self.admin_only or self.owner_only):
            if "" in self.cmds:
                return  # don't have empty commands triggering in other channels
            for command in self.cmds:
                if command in botconfig.ALLOWED_ALT_CHANNELS_COMMANDS:
                    break
            else:
                return

        if nick in var.USERS and var.USERS[nick]["account"] != "*":
            acc = var.USERS[nick]["account"]
        else:
            acc = None

        if "" in self.cmds:
            return self.func(*largs)

        if self.phases and var.PHASE not in self.phases:
            return

        if self.playing and (nick not in var.list_players() or nick in var.DISCONNECTED):
            if chan == nick:
                pm(cli, nick, "You're not currently playing.")
            else:
                cli.notice(nick, "You're not currently playing.")
            return

        if self.silenced and nick in var.SILENCED:
            if chan == nick:
                pm(cli, nick, "You have been silenced, and are unable to use any special powers.")
            else:
                cli.notice(nick, "You have been silenced, and are unable to use any special powers.")
            return

        if self.roles:
            for role in self.roles:
                if nick in var.ROLES[role]:
                    break
            else:
                return

            return self.func(*largs)  # don't check restrictions for role commands

        if self.owner_only:
            if var.is_owner(nick, ident, host):
                adminlog(chan, rawnick, self.name, rest)
                return self.func(*largs)

            if chan == nick:
                pm(cli, nick, "You are not the owner.")
            else:
                cli.notice(nick, "You are not the owner.")
            return

        if var.is_admin(nick, ident, host):
            if self.admin_only:
                adminlog(chan, rawnick, self.name, rest)
            return self.func(*largs)

        if not var.DISABLE_ACCOUNTS and acc:
            if acc in var.DENY_ACCOUNTS:
                for command in self.cmds:
                    if command in var.DENY_ACCOUNTS[acc]:
                        if chan == nick:
                            pm(cli, nick, "You do not have permission to use that command.")
                        else:
                            cli.notice(nick, "You do not have permission to use that command.")
                        return

            if acc in var.ALLOW_ACCOUNTS:
                for command in self.cmds:
                    if command in var.ALLOW_ACCOUNTS[acc]:
                        if self.admin_only:
                            adminlog(chan, rawnick, self.name, rest)
                        return self.func(*largs)

        if not var.ACCOUNTS_ONLY and host:
            for pattern in var.DENY:
                if var.match_hostmask(pattern, nick, ident, host):
                    for command in self.cmds:
                        if command in var.DENY[pattern]:
                            if chan == nick:
                                pm(cli, nick, "You do not have permission to use that command.")
                            else:
                                cli.notice(nick, "You do not have permission to use that command.")
                            return

            for pattern in var.ALLOW:
                if var.match_hostmask(pattern, nick, ident, host):
                    for command in self.cmds:
                        if command in var.ALLOW[pattern]:
                            if self.admin_only:
                                adminlog(chan, rawnick, self.name, rest)
                            return self.func(*largs)

        if self.admin_only:
            if chan == nick:
                pm(cli, nick, "You are not an admin.")
            else:
                cli.notice(nick, "You are not an admin.")
            return

        return self.func(*largs)
Esempio n. 7
0
    def caller(self, *args):
        largs = list(args)

        cli, rawnick, chan, rest = largs
        nick, mode, ident, host = parse_nick(rawnick)

        if ident is None:
            ident = ""

        if host is None:
            host = ""

        if not self.raw_nick:
            largs[1] = nick

        if not self.pm and chan == nick:
            return  # PM command, not allowed

        if not self.chan and chan != nick:
            return  # channel command, not allowed

        if chan.startswith("#") and chan != botconfig.CHANNEL and not (
                self.admin_only or self.owner_only):
            if "" in self.cmds:
                return  # don't have empty commands triggering in other channels
            for command in self.cmds:
                if command in botconfig.ALLOWED_ALT_CHANNELS_COMMANDS:
                    break
            else:
                return

        if nick in var.USERS and var.USERS[nick]["account"] != "*":
            acc = var.USERS[nick]["account"]
        else:
            acc = None

        if "" in self.cmds:
            return self.func(*largs)

        if self.phases and var.PHASE not in self.phases:
            return

        if self.playing and (nick not in var.list_players()
                             or nick in var.DISCONNECTED):
            if chan == nick:
                pm(cli, nick, "You're not currently playing.")
            else:
                cli.notice(nick, "You're not currently playing.")
            return

        if self.silenced and nick in var.SILENCED:
            if chan == nick:
                pm(
                    cli, nick,
                    "You have been silenced, and are unable to use any special powers."
                )
            else:
                cli.notice(
                    nick,
                    "You have been silenced, and are unable to use any special powers."
                )
            return

        if self.roles:
            for role in self.roles:
                if nick in var.ROLES[role]:
                    break
            else:
                return

            return self.func(
                *largs)  # don't check restrictions for role commands

        if self.owner_only:
            if var.is_owner(nick, ident, host):
                adminlog(chan, rawnick, self.name, rest)
                return self.func(*largs)

            if chan == nick:
                pm(cli, nick, "You are not the owner.")
            else:
                cli.notice(nick, "You are not the owner.")
            return

        if var.is_admin(nick, ident, host):
            if self.admin_only:
                adminlog(chan, rawnick, self.name, rest)
            return self.func(*largs)

        if not var.DISABLE_ACCOUNTS and acc:
            if acc in var.DENY_ACCOUNTS:
                for command in self.cmds:
                    if command in var.DENY_ACCOUNTS[acc]:
                        if chan == nick:
                            pm(
                                cli, nick,
                                "You do not have permission to use that command."
                            )
                        else:
                            cli.notice(
                                nick,
                                "You do not have permission to use that command."
                            )
                        return

            if acc in var.ALLOW_ACCOUNTS:
                for command in self.cmds:
                    if command in var.ALLOW_ACCOUNTS[acc]:
                        if self.admin_only:
                            adminlog(chan, rawnick, self.name, rest)
                        return self.func(*largs)

        if not var.ACCOUNTS_ONLY and host:
            for pattern in var.DENY:
                if var.match_hostmask(pattern, nick, ident, host):
                    for command in self.cmds:
                        if command in var.DENY[pattern]:
                            if chan == nick:
                                pm(
                                    cli, nick,
                                    "You do not have permission to use that command."
                                )
                            else:
                                cli.notice(
                                    nick,
                                    "You do not have permission to use that command."
                                )
                            return

            for pattern in var.ALLOW:
                if var.match_hostmask(pattern, nick, ident, host):
                    for command in self.cmds:
                        if command in var.ALLOW[pattern]:
                            if self.admin_only:
                                adminlog(chan, rawnick, self.name, rest)
                            return self.func(*largs)

        if self.admin_only:
            if chan == nick:
                pm(cli, nick, "You are not an admin.")
            else:
                cli.notice(nick, "You are not an admin.")
            return

        return self.func(*largs)