diff --git a/mastodon.py b/mastodon.py new file mode 100644 index 0000000..9e0da11 --- /dev/null +++ b/mastodon.py @@ -0,0 +1,74 @@ +import os +import logging +from pwnagotchi.voice import Voice +import pwnagotchi.plugins as plugins +try: + from mastodon import Mastodon +except ImportError: + logging.error('Could not import mastodon') + + +class MastodonStatus(plugins.Plugin): + __author__ = 'siina@siina.dev' + __version__ = '1.0.0' + __license__ = 'GPL3' + __description__ = 'Periodically post status updates. Based on twitter plugin by evilsocket' + + def on_loaded(self): + logging.info("mastodon plugin loaded.") + + # Called when there's available internet + def on_internet_available(self, agent): + config = agent.config() + display = agent.view() + last_session = agent.last_session + api_base_url = self.options['instance_url'] + email = self.options['email'] + password = self.options['password'] + visibility = self.options['visibility'] + client_cred = '/root/.mastodon.client.secret' + user_cred = '/root/.mastodon.user.secret' + + if last_session.is_new() and last_session.handshakes > 0: + logging.info("Detected internet and new activity: time to post!") + + if not os.path.isfile(user_cred) or not os.path.isfile(client_cred): + # Runs only if there are any missing credential files + Mastodon.create_app( + config['main']['name'], + api_base_url=api_base_url, + to_file=client_cred + ) + picture = '/root/pwnagotchi.png' + display.on_manual_mode(last_session) + display.image().save(picture, 'png') + display.update(force=True) + + try: + logging.info('Connecting to Mastodon API') + mastodon = Mastodon( + client_id=client_cred, + api_base_url=api_base_url + ) + mastodon.log_in( + email, + password, + to_file=user_cred + ) + mastodon = Mastodon( + access_token=user_cred, + api_base_url=api_base_url + ) + message = Voice(lang=config['main']['lang']).on_last_session_tweet(last_session) + mastodon.status_post( + message, + media_ids=mastodon.media_post(picture), + visibility=visibility + ) + + last_session.save_session_id() + logging.info("posted: %s" % message) + display.set('status', 'Posted!') + display.update(force=True) + except Exception: + logging.exception("error while posting") diff --git a/mastodon.yml b/mastodon.yml new file mode 100644 index 0000000..8947486 --- /dev/null +++ b/mastodon.yml @@ -0,0 +1,6 @@ +mastodon: + enabled: false + instance_url: ~ + visibility: unlisted + email: ~ + password: ~