diff --git a/goodlists/nbg_goodlist b/goodlists/nbg_goodlist index 5a368cc..08c885f 100644 --- a/goodlists/nbg_goodlist +++ b/goodlists/nbg_goodlist @@ -1,6 +1,4 @@ -kontrolle -fahrscheinkontrolle -kontrolleur +kontroll?e konti db vgn @@ -15,12 +13,5 @@ tram linie nuernberg nürnberg -s1 -s2 -s3 -s4 -u1 -u2 -u3 -u21 -u11 +s\d +u\d\d? diff --git a/ticketfrei.cfg.example b/ticketfrei.cfg.example index 5f60104..4c0ec36 100644 --- a/ticketfrei.cfg.example +++ b/ticketfrei.cfg.example @@ -18,5 +18,9 @@ access_token_key = "youraccesstokenkey" access_token_secret = "youraccesstokensecret" # [trigger] +# goodlists are one regex per line. +# badlists are one badword per line. +# a message musst match at least one regex in goodlist and contain none of the badwords. + # goodlist_path = 'goodlists' # blacklist_path = 'blacklists' diff --git a/trigger.py b/trigger.py index c5715c7..a88993e 100644 --- a/trigger.py +++ b/trigger.py @@ -1,6 +1,7 @@ #!/usr/bin/env python -import os import pytoml as toml +import os +import re class Trigger(object): @@ -11,33 +12,32 @@ class Trigger(object): self.config = config try: - self.goodlistpath = config['trigger']['goodlist_path'] + goodlistpath = config['trigger']['goodlist_path'] except KeyError: - self.goodlistpath = 'goodlists' - self.goodlist = self.get_lists(self.goodlistpath) + goodlistpath = 'goodlists' + + # load goodlists + self.goodlist = [] + for filename in os.listdir(goodlistpath): + with open(os.path.join(goodlistpath, filename), "r+") as listfile: + for pattern in listfile: + pattern = pattern.strip() + if pattern: + self.goodlist.append(re.compile(pattern)) try: - self.blacklistpath = config['trigger']['blacklist_path'] + blacklistpath = config['trigger']['blacklist_path'] except KeyError: - self.blacklistpath = 'blacklists' - self.blacklist = self.get_lists(self.blacklistpath) + blacklistpath = 'blacklists' - def get_lists(self, path): - """ - pass a folder with text files in it. each line in the files becomes a - filter word. - - :param path: path to folder whose files shall be added to the set - :return: set of trigger words. - """ - trigger_words = set() - for filename in os.listdir(path): - with open(os.path.join(path, filename), "r+") as listfile: + # load blacklists + self.blacklist = set() + for filename in os.listdir(blacklistpath): + with open(os.path.join(blacklistpath, filename), "r+") as listfile: for word in listfile: word = word.strip() if word: - trigger_words.add(word) - return trigger_words + self.blacklist.add(word) def is_ok(self, message): """ @@ -46,13 +46,17 @@ class Trigger(object): :param message: A given string. Tweet or Toot, cleaned from html. :return: If the string passes the test """ - ret = False + for pattern in self.goodlist: + if pattern.match(message): + break + else: + # no pattern matched + return False + for word in message.lower().split(): - if word in self.goodlist: - ret = True if word in self.blacklist: return False - return ret + return True if __name__ == "__main__":