#!/usr/bin/env python3 import logging import time import sendmail from db import DB from config import config from mastodonbot import MastodonBot from twitterbot import TwitterBot from mailbot import Mailbot from trigger import Trigger def get_users(db): user_rows = db.get_users() users = {} for row in user_rows: users[row[0]] = [] return users def init_bots(config, db, users): for uid in users: users[uid].append(Trigger(config, uid, db)) users[uid].append(MastodonBot(config, uid, db)) users[uid].append(TwitterBot(config, uid, db)) users[uid].append(Mailbot(config, uid, db)) return users if __name__ == '__main__': logpath = config['logging']['logpath'] logger = logging.getLogger() fh = logging.FileHandler(logpath) fh.setLevel(logging.DEBUG) logger.addHandler(fh) db = DB() while True: # get a dictionary { uid : [ Bot objects ] } users = get_users(db) # initialize bots users = init_bots(config, logger, db, users) try: for uid in users: for bot in users[uid]: reports = bot.crawl() for status in reports: if not users[uid][0].is_ok(status.text): continue for bot2 in users[uid]: if bot == bot2: bot2.repost(status) else: bot2.post(status) time.sleep(60) # twitter rate limit >.< except KeyboardInterrupt: print("Good bye. Remember to restart the bot!") except: logger.error('Shutdown', exc_info=True) for uid in users: for bot in users[uid]: bot.save_last() mailer = sendmail.Mailer(config) try: mailer.send('', config['web']['contact'], 'Ticketfrei Crash Report', attachment=config['logging']['logpath']) except: logger.error('Mail sending failed', exc_info=True)