~domcleal/ibid/outrage

« back to all changes in this revision

Viewing changes to ibid/plugins/karma.py

  • Committer: Dominic Cleal
  • Date: 2011-01-22 19:22:25 UTC
  • Revision ID: dominic@computerkb.co.uk-20110122192225-c5etfgyj96uo1tzp
Improved code style with Stefano's comments, use event message for reason when not in addressed mode

Show diffs side-by-side

added added

removed removed

Lines of Context:
5
5
import re
6
6
import logging
7
7
 
 
8
from ibid.compat import any
8
9
from ibid.config import BoolOption, IntOption, ListOption
9
10
from ibid.db import IbidUnicode, DateTime, Integer, Table, Column, Base, \
10
11
                    VersionedSchema
77
78
        if self.addressed:
78
79
            matchpat = r'^(.+?)\s*(%s)\s*(?:[[{(]+\s*(.+?)\s*[\]})]+)?$'
79
80
        else:
80
 
            matchpat = r'(\S*\w\S*)(%s)(?:$|\s)'
 
81
            matchpat = r'(\S*\w\S*)(%s)(?:$|[\s,;\.\?!])'
81
82
 
82
83
        self.increase_reg = self.regex_tokens(self.increase)
83
84
        self.decrease_reg = self.regex_tokens(self.decrease)
90
91
 
91
92
    def regex_tokens(self, tokens):
92
93
        """ Turn configured tokens into regex versions """
93
 
        regtokens = []
94
 
        for token in tokens:
95
 
            stoken = token.lstrip()
96
 
            if token == stoken:
97
 
                token = "%s" % re.escape(token)
98
 
            else:
99
 
                # When whitespace is present, use \s+ instead
100
 
                token = "\s+%s" % re.escape(stoken)
101
 
            regtokens.append(token)
102
 
        return regtokens
 
94
        return [re.escape(t).replace(r'\ ', r'\s+') for t in tokens]
103
95
 
104
96
    def match_operators(self, roperators, adjust):
105
 
        for reg in roperators:
106
 
            if re.match(reg, adjust):
107
 
                return True
108
 
        return False
 
97
        return any(re.match(r, adjust) for r in roperators)
109
98
 
110
99
    @handler
111
100
    @authorise(fallthrough=False)
112
101
    def set(self, event, subject, adjust, reason=None):
 
102
        if reason is None:
 
103
            reason = event['message']['clean']
 
104
 
113
105
        if self.public and not event.public:
114
106
            event.addresponse(u'Karma must be done in public')
115
107
            return