Beispiel #1
0
def fstasis(var, wrapper, message):
    """Removes or views stasis penalties."""

    data = re.split(" +", message)
    from src.context import lower as irc_lower

    if data[0]:
        m = users.complete_match(data[0])
        if m:
            acc = m.get().account
        else:
            acc = data[0]
        cur = var.STASISED_ACCS[irc_lower(acc)]

        if len(data) == 1:
            if var.STASISED_ACCS[irc_lower(acc)] == cur and cur > 0:
                wrapper.reply(messages["account_in_stasis"].format(
                    data[0], acc, cur))
            else:
                wrapper.reply(messages["account_not_in_stasis"].format(
                    data[0], acc))
        else:
            try:
                amt = int(data[1])
            except ValueError:
                wrapper.reply(messages["stasis_non_negative"])
                return

            if amt < 0:
                wrapper.reply(messages["stasis_non_negative"])
                return
            elif amt > cur and var.RESTRICT_FSTASIS:
                wrapper.reply(messages["stasis_cannot_increase"])
                return
            elif cur == 0:
                wrapper.reply(messages["account_not_in_stasis"].format(
                    data[0], acc))
                return

            db.set_stasis(amt, acc)
            db.init_vars()
            if amt > 0:
                wrapper.reply(messages["fstasis_account_add"].format(
                    data[0], acc, amt))
            else:
                wrapper.reply(messages["fstasis_account_remove"].format(
                    data[0], acc))
    else:
        stasised = {}
        for acc in var.STASISED_ACCS:
            if var.STASISED_ACCS[acc] > 0:
                stasised[acc] = var.STASISED_ACCS[acc]

        if stasised:
            msg = messages["currently_stasised"].format(", ".join(
                "\u0002{0}\u0002 ({1})".format(usr, number)
                for usr, number in stasised.items()))
            wrapper.reply(msg)
        else:
            wrapper.reply(messages["noone_stasised"])
Beispiel #2
0
def warn_ack(var, wrapper, args):
    if args.help:
        wrapper.reply(messages["warn_ack_syntax"])
        return

    acc = wrapper.source.account
    if not acc:
        return

    warning = db.get_warning(args.id, acc)
    if not warning:
        wrapper.reply(messages["fwarn_invalid_warning"])
        return

    # only add stasis if this is the first time this warning is being acknowledged
    if not warning["ack"] and warning["sanctions"].get("stasis", 0) > 0:
        db.set_stasis(warning["sanctions"]["stasis"], acc, relative=True)
        db.init_vars()

    db.acknowledge_warning(args.id)
    wrapper.reply(messages["fwarn_done"])
Beispiel #3
0
def warn(var, wrapper, message):
    """View and acknowledge your warnings."""
    # !warn list [-all] [page] - lists all active warnings, or all warnings if all passed
    # !warn view <id> - views details on warning id
    # !warn ack <id> - acknowledges warning id
    # Default if only !warn is given is to do !warn list.
    params = re.split(" +", message)

    try:
        command = params.pop(0)
        if command == "":
            command = "list"
    except IndexError:
        command = "list"

    if command not in ("list", "view", "ack", "help"):
        wrapper.reply(messages["warn_usage"])
        return

    if command == "help":
        try:
            subcommand = params.pop(0)
        except IndexError:
            wrapper.reply(messages["warn_help_syntax"])
            return
        if subcommand not in ("list", "view", "ack", "help"):
            wrapper.reply(messages["warn_usage"])
            return
        wrapper.reply(messages["warn_{0}_syntax".format(subcommand)])
        return

    if command == "list":
        list_all = False
        page = 1
        try:
            list_all = params.pop(0)
            target = params.pop(0)
            page = int(params.pop(0))
        except IndexError:
            pass
        except ValueError:
            wrapper.reply(messages["fwarn_page_invalid"])
            return

        try:
            if list_all and list_all != "-all":
                page = int(list_all)
                list_all = False
            elif list_all == "-all":
                list_all = True
        except ValueError:
            wrapper.reply(messages["fwarn_page_invalid"])
            return

        acc, hm = parse_warning_target(wrapper.source.nick)
        warnings = db.list_warnings(acc,
                                    hm,
                                    expired=list_all,
                                    skip=(page - 1) * 10,
                                    show=11)
        points = db.get_warning_points(acc, hm)
        wrapper.pm(messages["warn_list_header"].format(
            points, "" if points == 1 else "s"))

        i = 0
        for warn in warnings:
            i += 1
            if (i == 11):
                parts = []
                if list_all:
                    parts.append("-all")
                parts.append(str(page + 1))
                wrapper.pm(messages["warn_list_footer"].format(
                    " ".join(parts)))
                break
            start = ""
            end = ""
            ack = ""
            if warn["expires"] is not None:
                if warn["expired"]:
                    expires = messages["fwarn_list_expired"].format(
                        warn["expires"])
                else:
                    expires = messages["fwarn_view_expires"].format(
                        warn["expires"])
            else:
                expires = messages["fwarn_never_expires"]
            if warn["expired"]:
                start = "\u000314"
                end = " [\u00037{0}\u000314]\u0003".format(
                    messages["fwarn_expired"])
            if not warn["ack"]:
                ack = "\u0002!\u0002 "
            wrapper.pm(messages["warn_list"].format(
                start, ack, warn["id"], warn["issued"], warn["reason"],
                warn["amount"], "" if warn["amount"] == 1 else "s", expires,
                end))
        if i == 0:
            wrapper.pm(messages["fwarn_list_empty"])
        return

    if command == "view":
        try:
            warn_id = params.pop(0)
            if warn_id[0] == "#":
                warn_id = warn_id[1:]
            warn_id = int(warn_id)
        except (IndexError, ValueError):
            wrapper.reply(messages["warn_view_syntax"])
            return

        acc, hm = parse_warning_target(wrapper.source.nick)
        warning = db.get_warning(warn_id, acc, hm)
        if warning is None:
            wrapper.reply(messages["fwarn_invalid_warning"])
            return

        if warning["expired"]:
            expires = messages["fwarn_view_expired"].format(warning["expires"])
        elif warning["expires"] is None:
            expires = messages["fwarn_view_active"].format(
                messages["fwarn_never_expires"])
        else:
            expires = messages["fwarn_view_active"].format(
                messages["fwarn_view_expires"].format(warning["expires"]))

        wrapper.pm(messages["warn_view_header"].format(
            warning["id"], warning["issued"], warning["amount"],
            "" if warning["amount"] == 1 else "s", expires))
        wrapper.pm(warning["reason"])

        sanctions = []
        if not warning["ack"]:
            sanctions.append(messages["warn_view_ack"].format(warning["id"]))
        if warning["sanctions"]:
            sanctions.append(messages["fwarn_view_sanctions"])
            if "stasis" in warning["sanctions"]:
                if warning["sanctions"]["stasis"] != 1:
                    sanctions.append(
                        messages["fwarn_view_stasis_plural"].format(
                            warning["sanctions"]["stasis"]))
                else:
                    sanctions.append(messages["fwarn_view_stasis_sing"])
            if "deny" in warning["sanctions"]:
                sanctions.append(messages["fwarn_view_deny"].format(", ".join(
                    warning["sanctions"]["deny"])))
        if sanctions:
            wrapper.pm(" ".join(sanctions))
        return

    if command == "ack":
        try:
            warn_id = params.pop(0)
            if warn_id[0] == "#":
                warn_id = warn_id[1:]
            warn_id = int(warn_id)
        except (IndexError, ValueError):
            wrapper.reply(messages["warn_ack_syntax"])
            return

        acc, hm = parse_warning_target(wrapper.source.nick)
        warning = db.get_warning(warn_id, acc, hm)
        if warning is None:
            wrapper.reply(messages["fwarn_invalid_warning"])
            return

        # only add stasis if this is the first time this warning is being acknowledged
        if not warning["ack"] and warning["sanctions"].get("stasis", 0) > 0:
            db.set_stasis(warning["sanctions"]["stasis"],
                          acc,
                          hm,
                          relative=True)
            db.init_vars()
        db.acknowledge_warning(warn_id)
        wrapper.reply(messages["fwarn_done"])
        return
Beispiel #4
0
def fstasis(var, wrapper, message):
    """Removes or views stasis penalties."""

    data = message.split()
    msg = None

    if data:
        lusers = {k.lower(): v for k, v in var.USERS.items()}
        acc, hostmask = parse_warning_target(data[0], lower=True)
        cur = max(var.STASISED[hostmask], var.STASISED_ACCS[acc])

        if len(data) == 1:
            if acc is not None and var.STASISED_ACCS[acc] == cur:
                plural = "" if cur == 1 else "s"
                wrapper.reply(messages["account_in_stasis"].format(
                    data[0], acc, cur, plural))
            elif hostmask is not None and var.STASISED[hostmask] == cur:
                plural = "" if cur == 1 else "s"
                wrapper.reply(messages["hostmask_in_stasis"].format(
                    data[0], hostmask, cur, plural))
            elif acc is not None:
                wrapper.reply(messages["account_not_in_stasis"].format(
                    data[0], acc))
            else:
                wrapper.reply(messages["hostmask_not_in_stasis"].format(
                    data[0], hostmask))
        else:
            try:
                amt = int(data[1])
            except ValueError:
                wrapper.reply(messages["stasis_not_negative"])
                return

            if amt < 0:
                wrapper.reply(messages["stasis_not_negative"])
                return
            elif amt > cur and var.RESTRICT_FSTASIS:
                wrapper.reply(messages["stasis_cannot_increase"])
                return
            elif cur == 0:
                if acc is not None:
                    wrapper.reply(messages["account_not_in_stasis"].format(
                        data[0], acc))
                    return
                else:
                    wrapper.reply(messages["hostmask_not_in_stasis"].format(
                        data[0], hostmask))
                    return

            db.set_stasis(amt, acc, hostmask)
            db.init_vars()
            if amt > 0:
                plural = "" if amt == 1 else "s"
                if acc is not None:
                    wrapper.reply(messages["fstasis_account_add"].format(
                        data[0], acc, amt, plural))
                else:
                    wrapper.reply(messages["fstasis_hostmask_add"].format(
                        data[0], hostmask, amt, plural))
            elif acc is not None:
                wrapper.reply(messages["fstasis_account_remove"].format(
                    data[0], acc))
            else:
                wrapper.reply(messages["fstasis_hostmask_remove"].format(
                    data[0], hostmask))
    elif var.STASISED or var.STASISED_ACCS:
        stasised = {}
        for hostmask in var.STASISED:
            stasised[hostmask + " (Host)"] = var.STASISED[hostmask]
        for acc in var.STASISED_ACCS:
            stasised[acc + " (Account)"] = var.STASISED_ACCS[acc]
        msg = messages["currently_stasised"].format(", ".join(
            "\u0002{0}\u0002 ({1})".format(usr, number)
            for usr, number in stasised.items()))
        wrapper.reply(msg)
    else:
        wrapper.reply(messages["noone_stasised"])
Beispiel #5
0
def warn(var, wrapper, message):
    """View and acknowledge your warnings."""
    # !warn list [-all] [page] - lists all active warnings, or all warnings if all passed
    # !warn view <id> - views details on warning id
    # !warn ack <id> - acknowledges warning id
    # Default if only !warn is given is to do !warn list.
    params = re.split(" +", message)

    try:
        command = params.pop(0)
        if command == "":
            command = "list"
    except IndexError:
        command = "list"

    if command not in ("list", "view", "ack", "help"):
        wrapper.reply(messages["warn_usage"])
        return

    if command == "help":
        try:
            subcommand = params.pop(0)
        except IndexError:
            wrapper.reply(messages["warn_help_syntax"])
            return
        if subcommand not in ("list", "view", "ack", "help"):
            wrapper.reply(messages["warn_usage"])
            return
        wrapper.reply(messages["warn_{0}_syntax".format(subcommand)])
        return

    if command == "list":
        list_all = False
        page = 1
        try:
            list_all = params.pop(0)
            target = params.pop(0)
            page = int(params.pop(0))
        except IndexError:
            pass
        except ValueError:
            wrapper.reply(messages["fwarn_page_invalid"])
            return

        try:
            if list_all and list_all != "-all":
                page = int(list_all)
                list_all = False
            elif list_all == "-all":
                list_all = True
        except ValueError:
            wrapper.reply(messages["fwarn_page_invalid"])
            return

        acc, hm = parse_warning_target(wrapper.source.nick)
        warnings = db.list_warnings(acc, hm, expired=list_all, skip=(page-1)*10, show=11)
        points = db.get_warning_points(acc, hm)
        wrapper.pm(messages["warn_list_header"].format(points, "" if points == 1 else "s"))

        i = 0
        for warn in warnings:
            i += 1
            if (i == 11):
                parts = []
                if list_all:
                    parts.append("-all")
                parts.append(str(page + 1))
                wrapper.pm(messages["warn_list_footer"].format(" ".join(parts)))
                break
            start = ""
            end = ""
            ack = ""
            if warn["expires"] is not None:
                if warn["expired"]:
                    expires = messages["fwarn_list_expired"].format(warn["expires"])
                else:
                    expires = messages["fwarn_view_expires"].format(warn["expires"])
            else:
                expires = messages["fwarn_never_expires"]
            if warn["expired"]:
                start = "\u000314"
                end = " [\u00037{0}\u000314]\u0003".format(messages["fwarn_expired"])
            if not warn["ack"]:
                ack = "\u0002!\u0002 "
            wrapper.pm(messages["warn_list"].format(
                start, ack, warn["id"], warn["issued"], warn["reason"], warn["amount"],
                "" if warn["amount"] == 1 else "s", expires, end))
        if i == 0:
            wrapper.pm(messages["fwarn_list_empty"])
        return

    if command == "view":
        try:
            warn_id = params.pop(0)
            if warn_id[0] == "#":
                warn_id = warn_id[1:]
            warn_id = int(warn_id)
        except (IndexError, ValueError):
            wrapper.reply(messages["warn_view_syntax"])
            return

        acc, hm = parse_warning_target(wrapper.source.nick)
        warning = db.get_warning(warn_id, acc, hm)
        if warning is None:
            wrapper.reply(messages["fwarn_invalid_warning"])
            return

        if warning["expired"]:
            expires = messages["fwarn_view_expired"].format(warning["expires"])
        elif warning["expires"] is None:
            expires = messages["fwarn_view_active"].format(messages["fwarn_never_expires"])
        else:
            expires = messages["fwarn_view_active"].format(messages["fwarn_view_expires"].format(warning["expires"]))

        wrapper.pm(messages["warn_view_header"].format(
            warning["id"], warning["issued"], warning["amount"],
            "" if warning["amount"] == 1 else "s", expires))
        wrapper.pm(warning["reason"])

        sanctions = []
        if not warning["ack"]:
            sanctions.append(messages["warn_view_ack"].format(warning["id"]))
        if warning["sanctions"]:
            sanctions.append(messages["fwarn_view_sanctions"])
            if "stasis" in warning["sanctions"]:
                if warning["sanctions"]["stasis"] != 1:
                    sanctions.append(messages["fwarn_view_stasis_plural"].format(warning["sanctions"]["stasis"]))
                else:
                    sanctions.append(messages["fwarn_view_stasis_sing"])
            if "deny" in warning["sanctions"]:
                sanctions.append(messages["fwarn_view_deny"].format(", ".join(warning["sanctions"]["deny"])))
        if sanctions:
            wrapper.pm(" ".join(sanctions))
        return

    if command == "ack":
        try:
            warn_id = params.pop(0)
            if warn_id[0] == "#":
                warn_id = warn_id[1:]
            warn_id = int(warn_id)
        except (IndexError, ValueError):
            wrapper.reply(messages["warn_ack_syntax"])
            return

        acc, hm = parse_warning_target(wrapper.source.nick)
        warning = db.get_warning(warn_id, acc, hm)
        if warning is None:
            wrapper.reply(messages["fwarn_invalid_warning"])
            return

        # only add stasis if this is the first time this warning is being acknowledged
        if not warning["ack"] and warning["sanctions"].get("stasis", 0) > 0:
            db.set_stasis(warning["sanctions"]["stasis"], acc, hm, relative=True)
            db.init_vars()
        db.acknowledge_warning(warn_id)
        wrapper.reply(messages["fwarn_done"])
        return
Beispiel #6
0
def fstasis(var, wrapper, message):
    """Removes or views stasis penalties."""

    data = message.split()
    msg = None

    if data:
        lusers = {k.lower(): v for k, v in var.USERS.items()}
        acc, hostmask = parse_warning_target(data[0], lower=True)
        cur = max(var.STASISED[hostmask], var.STASISED_ACCS[acc])

        if len(data) == 1:
            if acc is not None and var.STASISED_ACCS[acc] == cur:
                plural = "" if cur == 1 else "s"
                wrapper.reply(messages["account_in_stasis"].format(data[0], acc, cur, plural))
            elif hostmask is not None and var.STASISED[hostmask] == cur:
                plural = "" if cur == 1 else "s"
                wrapper.reply(messages["hostmask_in_stasis"].format(data[0], hostmask, cur, plural))
            elif acc is not None:
                wrapper.reply(messages["account_not_in_stasis"].format(data[0], acc))
            else:
                wrapper.reply(messages["hostmask_not_in_stasis"].format(data[0], hostmask))
        else:
            try:
                amt = int(data[1])
            except ValueError:
                wrapper.reply(messages["stasis_not_negative"])
                return

            if amt < 0:
                wrapper.reply(messages["stasis_not_negative"])
                return
            elif amt > cur and var.RESTRICT_FSTASIS:
                wrapper.reply(messages["stasis_cannot_increase"])
                return
            elif cur == 0:
                if acc is not None:
                    wrapper.reply(messages["account_not_in_stasis"].format(data[0], acc))
                    return
                else:
                    wrapper.reply(messages["hostmask_not_in_stasis"].format(data[0], hostmask))
                    return

            db.set_stasis(amt, acc, hostmask)
            db.init_vars()
            if amt > 0:
                plural = "" if amt == 1 else "s"
                if acc is not None:
                    wrapper.reply(messages["fstasis_account_add"].format(data[0], acc, amt, plural))
                else:
                    wrapper.reply(messages["fstasis_hostmask_add"].format(data[0], hostmask, amt, plural))
            elif acc is not None:
                wrapper.reply(messages["fstasis_account_remove"].format(data[0], acc))
            else:
                wrapper.reply(messages["fstasis_hostmask_remove"].format(data[0], hostmask))
    elif var.STASISED or var.STASISED_ACCS:
        stasised = {}
        for hostmask in var.STASISED:
            stasised[hostmask+" (Host)"] = var.STASISED[hostmask]
        for acc in var.STASISED_ACCS:
            stasised[acc+" (Account)"] = var.STASISED_ACCS[acc]
        msg = messages["currently_stasised"].format(", ".join(
            "\u0002{0}\u0002 ({1})".format(usr, number)
            for usr, number in stasised.items()))
        wrapper.reply(msg)
    else:
        wrapper.reply(messages["noone_stasised"])