ticketfrei/ticketfrei.py

76 lines
2.1 KiB
Python
Raw Normal View History

2017-12-30 00:15:22 +00:00
#!/usr/bin/env python3
2017-07-20 20:30:43 +00:00
import logging
2017-06-17 16:15:13 +00:00
import pytoml as toml
import time
import sendmail
2017-06-17 16:15:13 +00:00
2017-06-17 18:49:30 +00:00
from retootbot import RetootBot
from retweetbot import RetweetBot
from mailbot import Mailbot
2017-06-17 20:11:44 +00:00
from trigger import Trigger
2017-06-17 18:27:53 +00:00
def set_logfile(config):
logfile = config['logging']['logpath']
logger = logging.getLogger()
fh = logging.FileHandler(logfile)
fh.setLevel(logging.DEBUG)
logger.addHandler(fh)
return logger
def get_config():
2017-06-17 17:37:33 +00:00
# read config in TOML format (https://github.com/toml-lang/toml#toml)
2017-12-30 09:32:20 +00:00
with open('config.toml') as configfile:
2017-06-17 18:49:30 +00:00
config = toml.load(configfile)
return config
def run():
# get config
config = get_config()
2017-06-17 18:49:30 +00:00
# set log file
logger = set_logfile(config)
2017-07-20 20:30:43 +00:00
# set trigger
trigger = Trigger(config)
# initialize bots
bots = []
if config["muser"]["enabled"] != "false":
bots.append(RetootBot(config))
if config["tuser"]["enabled"] != "false":
bots.append(RetweetBot(config))
if config["mail"]["enabled"] != "false":
bots.append(Mailbot(config))
2017-06-17 18:49:30 +00:00
try:
statuses = []
while True:
for bot in bots:
reports = bot.crawl()
for status in reports:
if not trigger.is_ok(status.text):
continue
for bot2 in bots:
if bot == bot2:
bot2.repost(status)
else:
bot2.post(status)
time.sleep(60) # twitter rate limit >.<
except KeyboardInterrupt:
2017-12-30 00:15:22 +00:00
print("Good bye. Remember to restart the bot!")
2017-07-11 20:05:46 +00:00
except:
logger.error('Shutdown', exc_info=True)
for bot in bots:
bot.save_last()
try:
mailer = sendmail.Mailer(config)
mailer.send('', config['mail']['contact'],
'Ticketfrei Crash Report',
attachment=config['logging']['logpath'])
except:
logger.error('Mail sending failed', exc_info=True)
if __name__ == '__main__':
run()