def handle(send, msg, args):
    """Handles scores.

    If it's a ++ add one point unless the user is trying to promote
    themselves. Otherwise substract one point.

    """
    session = args['db']
    matches = re.findall(r"\b(?<!-)(%s{2,16})(\+\+|--)" % args['config']['core']['nickregex'], msg)
    if not matches:
        return
    if args['type'] == 'privmsg':
        send('Hey, no points in private messages!')
        return
    for match in matches:
        # limit to 5 score changes per minute
        if args['abuse'](args['nick'], 5, 'scores'):
            return
        name, direction = match[0].lower(), match[1]
        if direction == "++":
            score = 1
            if name == args['nick'].lower():
                send("%s: No self promotion! You lose 10 points." % args['nick'])
                score = -10
        else:
            score = -1
        row = session.query(Scores).filter(Scores.nick == name).first()
        if row is None:
            session.add(Scores(score=score, nick=name))
            session.commit()
        else:
            row.score += score
            session.commit()
Handles scores.

    If it's a ++ add one point unless the user is trying to promote
    themselves. Otherwise substract one point.