From d952396797c8d7989a0b7c1825682d84abf3997f Mon Sep 17 00:00:00 2001 From: Thomas L Date: Sat, 17 Jun 2017 19:37:33 +0200 Subject: [PATCH] refactor into RetootBot --- ticketfrei.py | 95 +++++++++++++++++++++++++++++++-------------------- 1 file changed, 58 insertions(+), 37 deletions(-) diff --git a/ticketfrei.py b/ticketfrei.py index 70a58ef..3ae7ae4 100644 --- a/ticketfrei.py +++ b/ticketfrei.py @@ -6,45 +6,66 @@ import pickle import os import time -# read config in TOML format (https://github.com/toml-lang/toml#toml) -with open('ticketfrei.cfg') as configfile: - config = toml.load(configfile) -client_id = os.path.join( - 'appkeys', - config['app']['name'] + '@' + config['user']['server'] - ) +class RetootBot(): + def __init__(self, config): + self.config = config + self.register() + self.login() -if not os.path.isfile(client_id): - mastodon.Mastodon.create_app( - config['app']['name'], - api_base_url=config['user']['server'], - to_file=client_id - ) + # load state + try: + with open('seen_toots.pickle', 'rb') as f: + self.seen_toots = pickle.load(f) + except IOError: + self.seen_toots = set() -m = mastodon.Mastodon( - client_id=client_id, - api_base_url=config['user']['server'] - ) -m.log_in(config['user']['email'], config['user']['password']) + def register(self): + self.client_id = os.path.join( + 'appkeys', + self.config['app']['name'] + + '@' + self.config['user']['server'] + ) -try: - with open('seen_toots.pickle', 'rb') as f: - seen_toots = pickle.load(f) -except IOError: - seen_toots = set() + if not os.path.isfile(self.client_id): + mastodon.Mastodon.create_app( + self.config['app']['name'], + api_base_url=self.config['user']['server'], + to_file=self.client_id + ) -while True: - for notification in m.notifications(): - if (notification['type'] == 'mention' - and notification['status']['id'] not in seen_toots): - print('Boosting toot %d from %s: %s' % ( - notification['status']['id'], - notification['status']['account']['acct'], - notification['status']['content'])) - seen_toots.add(notification['status']['id']) - m.status_reblog(notification['status']['id']) - with open('seen_toots.pickle.part', 'wb') as f: - pickle.dump(seen_toots, f) - os.rename('seen_toots.pickle.part', 'seen_toots.pickle') - time.sleep(1) + def login(self): + self.m = mastodon.Mastodon( + client_id=self.client_id, + api_base_url=self.config['user']['server'] + ) + self.m.log_in( + self.config['user']['email'], + self.config['user']['password'] + ) + + def retoot(self): + for notification in self.m.notifications(): + if (notification['type'] == 'mention' + and notification['status']['id'] not in self.seen_toots): + print('Boosting toot %d from %s: %s' % ( + notification['status']['id'], + notification['status']['account']['acct'], + notification['status']['content'])) + self.m.status_reblog(notification['status']['id']) + self.seen_toots.add(notification['status']['id']) + + # save state + with open('seen_toots.pickle.part', 'wb') as f: + pickle.dump(self.seen_toots, f) + os.rename('seen_toots.pickle.part', 'seen_toots.pickle') + + +if __name__ == '__main__': + # read config in TOML format (https://github.com/toml-lang/toml#toml) + with open('ticketfrei.cfg') as configfile: + bot = RetootBot(toml.load(configfile)) + + while True: + bot.retoot() + time.sleep(1)