Example #1
0
def get_ban_arguments(connection, args):
    """
    Parses duration and reason from arguments.
    It handles duration in two ways: interger mintues and human-friendly duration.
    It also handles cases where duration or reason are none.
    Note: It returns duration in seconds.
    """
    default_duration = connection.protocol.default_ban_time
    reason = None
    if len(args) < 1:
        return default_duration, reason
    if len(args) > 1:
        reason = join_arguments(args[1:])
    if args[0] == "perma":
        return None, reason

    if args[0].isdigit():  # all digits == duration in minutes
        duration = int(args[0]) * 60
    elif has_digits(args[0]):  # if it contains some digits maybe duration?
        duration = timeparse(args[0])
        if not duration:
            raise ValueError("Invalid duration")
    else:  # maybe just one long reason
        duration = default_duration
        reason = join_arguments(args[:])
    return duration, reason
Example #2
0
def start_votekick(connection, *args):
    protocol = connection.protocol
    if connection not in protocol.players:
        raise KeyError()
    player = connection

    if not protocol.votekick_enabled:
        return S_VOTEKICKING_DISABLED
    if not player.votekick_enabled:
        return S_VOTEKICK_DISALLOWED

    if not args:
        if protocol.votekick:
            # player requested votekick info
            protocol.votekick.send_chat_update(player)
            return
        raise ValueError()

    value = args[0]
    victim = get_player(protocol, value)
    reason = join_arguments(args[1:])

    try:
        # attempt to start votekick
        votekick = Votekick.start(player, victim, reason)
        protocol.votekick = votekick
    except VotekickFailure as err:
        return str(err)
Example #3
0
def start_votekick(connection, *args):
    protocol = connection.protocol
    if connection not in protocol.players:
        raise KeyError()
    player = connection

    if not args:
        if protocol.votekick:
            # player requested votekick info
            protocol.votekick.send_chat_update(player)
            return
        raise ValueError()

    value = args[0]
    try:
        # vanilla aos behavior
        victim = get_player(protocol, '#' + value)
    except InvalidPlayer:
        victim = get_player(protocol, value)
    reason = join_arguments(args[1:])

    try:
        # attempt to start votekick
        votekick = Votekick.start(player, victim, reason)
        protocol.votekick = votekick
    except VotekickFailure as err:
        return str(err)
Example #4
0
def start_votekick(connection, *args):
    """
    Starts an votekick against a player
    /votekick <player name or id> <reason>
    """
    protocol = connection.protocol
    player = connection

    if not protocol.votekick_enabled:
        return S_VOTEKICKING_DISABLED
    if not player.votekick_enabled:
        return S_VOTEKICK_DISALLOWED

    if not args:
        if protocol.votekick:
            # player requested votekick info
            protocol.votekick.send_chat_update(player)
            return
        raise ValueError("Target player is required")

    value = args[0]
    victim = get_player(protocol, value)
    reason = join_arguments(args[1:])

    try:
        # attempt to start votekick
        votekick = Votekick.start(player, victim, reason)
        protocol.votekick = votekick
    except VotekickFailure as err:
        return str(err)
Example #5
0
def wban(connection, value, *arg):
    """
    Ban a given player for one week
    /wban <player> [reason]
    """
    duration = timeparse("1week")
    reason = join_arguments(arg)
    player = get_player(connection.protocol, value)
    player.ban(reason, duration)
Example #6
0
def hban(connection, value, *arg):
    """
    Ban a given player for an hour
    /hban <player> [reason]
    """
    duration = timeparse("1hour")
    reason = join_arguments(arg)
    player = get_player(connection.protocol, value)
    player.ban(reason, duration)
Example #7
0
def kick(connection, value, *arg):
    """
    Kick a given player
    /kick <player>
    Player is the #ID of the player, or an unique part of their name
    """
    reason = join_arguments(arg)
    player = get_player(connection.protocol, value)
    player.kick(reason)
Example #8
0
def pban(connection, value, *arg):
    """
    Ban a given player permanently
    /pban <player> [reason]
    """
    duration = 0
    reason = join_arguments(arg)
    player = get_player(connection.protocol, value)
    player.ban(reason, duration)
Example #9
0
def dban(connection, value, *arg):
    """
    Ban a given player for one day
    /dban <player> [reason]
    """
    duration = 1440
    reason = join_arguments(arg)
    player = get_player(connection.protocol, value)
    player.ban(reason, duration)
Example #10
0
def pm(connection, value, *arg):
    """
    Send a private message to a given player
    /pm <player> <message>
    """
    player = get_player(connection.protocol, value)
    message = join_arguments(arg)
    if len(message) == 0:
        return "Please specify your message"
    player.send_chat('PM from %s: %s' % (connection.name, message))
    return 'PM sent to %s' % player.name
Example #11
0
def get_ban_arguments(connection, arg):
    duration = None
    if len(arg):
        try:
            duration = int(arg[0])
            arg = arg[1:]
        except (IndexError, ValueError):
            pass
    if duration is None:
        if len(arg) > 0 and arg[0] == "perma":
            arg = arg[1:]
        else:
            duration = connection.protocol.default_ban_time
    reason = join_arguments(arg)
    return duration, reason
Example #12
0
def timed_mute(connection, *args):
    protocol = connection.protocol

    nick = args[0]
    time = int(args[1])
    reason = join_arguments(args[2:])
    player = get_player(protocol, nick)

    if time < 0:
        raise ValueError()

    if not player.mute:
        TimedMute(player, time, reason)
    else:
        return '%s is already muted!' % nick
Example #13
0
def server_name(connection, *arg):
    """
    Change the server name until it restarts
    /servername <new-name>
    Also affects the master list
    """
    name = join_arguments(arg)
    protocol = connection.protocol
    protocol.set_server_name(name)
    message = "%s changed servername to '%s'" % (connection.name, name)
    log.info(message)
    connection.protocol.irc_say("* " + message)
    if connection in connection.protocol.players:
        return message
    return None
Example #14
0
def timed_mute(connection, *args):
    protocol = connection.protocol
    if len(args) < 3:
        return '/tm <nick> <time> <reason>'

    nick = args[0]
    time = int(args[1])
    reason = join_arguments(args[2:])
    player = get_player(protocol, nick)

    if time < 0:
        raise ValueError("Time cannot be < 0")

    if not player.mute:
        TimedMute(player, time, reason)
    else:
        return '%s is already muted!' % nick
Example #15
0
def to_admin(connection, *arg):
    """
    Send a message to all admins currently online
    /admin <message>
    """
    protocol = connection.protocol
    message = join_arguments(arg)
    if not message:
        return "Enter a message you want to send, like /admin I'm stuck"
    prefix = '(TO ADMINS)'
    irc_relay = protocol.irc_relay
    if irc_relay:
        if irc_relay.factory.bot and irc_relay.factory.bot.colors:
            prefix = '\x0304' + prefix + '\x0f'
        irc_relay.send(prefix + ' <%s> %s' % (connection.name, message))
    for player in protocol.players.values():
        if player.admin and player is not connection:
            player.send_chat('To ADMINS from %s: %s' %
                             (connection.name, message))
    return 'Message sent to all admins currently online'