make shutdown_contact configurable

This commit is contained in:
Thomas L 2017-06-25 19:31:40 +02:00
parent 3202499efa
commit 4b85bf933d
2 changed files with 37 additions and 25 deletions

View File

@ -6,8 +6,6 @@ import pytoml as toml
import trigger import trigger
from time import sleep from time import sleep
__encoding__ = "utf-8"
class RetweetBot(object): class RetweetBot(object):
""" """
@ -15,19 +13,20 @@ class RetweetBot(object):
1) mention him, 1) mention him,
2) contain at least one of the triggerwords provided. 2) contain at least one of the triggerwords provided.
api: The api object, generated with your oAuth keys, responsible for communication with twitter rest API api: The api object, generated with your oAuth keys, responsible for
triggers: a list of words, one of them has to be in a tweet for it to be retweeted communication with twitter rest API
triggers: a list of words, one of them has to be in a tweet for it to be
retweeted
last_mention: the ID of the last tweet which mentioned you last_mention: the ID of the last tweet which mentioned you
""" """
def __init__(self, trigger, config, def __init__(self, trigger, config,
historypath="last_mention", historypath="last_mention"):
user_id="801098086005243904",
screen_name="links_tech"):
""" """
Initializes the bot and loads all the necessary data. Initializes the bot and loads all the necessary data.
:param historypath: Path to the file with ID of the last retweeted Tweet :param historypath: Path to the file with ID of the last retweeted
Tweet
""" """
self.config = config self.config = config
keys = self.get_api_keys() keys = self.get_api_keys()
@ -36,8 +35,12 @@ class RetweetBot(object):
access_token_key=keys[2], access_token_key=keys[2],
access_token_secret=keys[3]) access_token_secret=keys[3])
self.historypath = historypath self.historypath = historypath
self.user_id = user_id try:
self.screen_name = screen_name self.user_id = self.config['tapp']['shutdown_contact_userid']
self.screen_name = \
self.config['tapp']['shutdown_contact_screen_name']
except KeyError:
self.no_shutdown_contact = True
self.last_mention = self.get_history(self.historypath) self.last_mention = self.get_history(self.historypath)
self.trigger = trigger self.trigger = trigger
@ -64,9 +67,11 @@ class RetweetBot(object):
return keys return keys
def get_history(self, path): def get_history(self, path):
""" This counter is needed to keep track of your mentions, so you don't double RT them """ This counter is needed to keep track of your mentions, so you
don't double RT them
:param path: string: contains path to the file where the ID of the last_mention is stored. :param path: string: contains path to the file where the ID of the
last_mention is stored.
:return: last_mention: ID of the last tweet which mentioned the bot :return: last_mention: ID of the last tweet which mentioned the bot
""" """
try: try:
@ -83,7 +88,8 @@ class RetweetBot(object):
:todo vmann: add all the mastodon API magic. :todo vmann: add all the mastodon API magic.
:param status: Object of a tweet. :param status: Object of a tweet.
:return: toot: text tooted on mastodon, e.g. "_b3yond: There are uniformed controllers in the U2 at Opernhaus." :return: toot: text tooted on mastodon, e.g. "_b3yond: There are
uniformed controllers in the U2 at Opernhaus."
""" """
toot = status.user.name + ": " + status.text toot = status.user.name + ": " + status.text
return toot return toot
@ -99,7 +105,7 @@ class RetweetBot(object):
mentions = self.api.GetMentions(since_id=self.last_mention) mentions = self.api.GetMentions(since_id=self.last_mention)
return mentions return mentions
except twitter.TwitterError: except twitter.TwitterError:
print("[ERROR] Rate Limit exceeded, trying again once a minute") print("[ERROR] Rate Limit exceeded, trying again in a minute")
sleep(60) sleep(60)
except requests.exceptions.ConnectionError: except requests.exceptions.ConnectionError:
print("[ERROR] Bad Connection.") print("[ERROR] Bad Connection.")
@ -116,7 +122,8 @@ class RetweetBot(object):
try: try:
self.api.PostRetweet(status.id) self.api.PostRetweet(status.id)
return self.format_mastodon(status) return self.format_mastodon(status)
# maybe one day we get rid of this error. If not, try to uncomment these lines. # maybe one day we get rid of this error. If not, try to uncomment
# these lines.
except twitter.error.TwitterError: except twitter.error.TwitterError:
print("[ERROR] probably you already retweeted this tweet.") print("[ERROR] probably you already retweeted this tweet.")
return None return None
@ -165,11 +172,15 @@ class RetweetBot(object):
return mastodon return mastodon
def shutdown(self): def shutdown(self):
""" If something breaks, it shuts down the bot and messages the owner. """ """ If something breaks, it shuts down the bot and messages the owner.
"""
print("[ERROR] Shit went wrong, closing down.") print("[ERROR] Shit went wrong, closing down.")
if self.no_shutdown_contact:
return
with open(self.historypath, "w") as f: with open(self.historypath, "w") as f:
f.write(str(self.last_mention)) f.write(str(self.last_mention))
self.api.PostDirectMessage("Help! I broke down. restart me pls :$", self.user_id, self.screen_name) self.api.PostDirectMessage("Help! I broke down. restart me pls :$",
self.user_id, self.screen_name)
if __name__ == "__main__": if __name__ == "__main__":

View File

@ -7,14 +7,15 @@ password = 'yourpassword'
server = 'yourmastodoninstance' server = 'yourmastodoninstance'
[tapp] [tapp]
consumer_key = "709823example98n4cnc098rnnsc98nec" consumer_key = 'yourtwitterconsumerkey'
consumer_secret = "09muvs098u08m9examplevsum098mu" consumer_secret = 'yourtwitterconsumersecret'
# shutdown_contact_userid = 012345
# shutdown_contact_screen_name = 'yourscreenname'
[tuser] [tuser]
access_token_key = "u098umgfres09ugexa-mplef7n60cwhxm12" access_token_key = 'youraccesstokenkey'
access_token_secret = "8708mj9ßc298m34333example3333tex" access_token_secret = 'youraccesstokensecret'
[trigger]
goodlist_path = "goodlist/"
blacklist_path = "blacklist/"
# [trigger]
# goodlist_path = 'goodlists'
# blacklist_path = 'blacklists'