#!/usr/bin/env python import pytoml as toml import os import re class Trigger(object): """ This class provides a filter to test a string against. """ def __init__(self, config): self.config = config try: goodlistpath = config['trigger']['goodlist_path'] except KeyError: 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, re.IGNORECASE)) try: blacklistpath = config['trigger']['blacklist_path'] except KeyError: blacklistpath = 'blacklists' # 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: self.blacklist.add(word) def is_ok(self, message): """ checks if a string contains no bad words and at least 1 good word. :param message: A given string. Tweet or Toot, cleaned from html. :return: If the string passes the test """ for pattern in self.goodlist: if pattern.search(message) is not None: break else: # no pattern matched return False for word in message.lower().split(): if word in self.blacklist: return False return True if __name__ == "__main__": with open("config.toml", "r") as configfile: config = toml.load(configfile) print("testing the trigger") trigger = Trigger(config) print("Printing words which trigger the bot:") for i in trigger.goodlist: print(i) print() print("Printing words which block a bot:") for i in trigger.blacklist: print(i)