bots are safely imported in the backend, except twitterDMs

multi-deployment
b3yond 2018-07-14 16:39:53 +02:00
parent 55a804f0d6
commit 4343be7e06
6 changed files with 32 additions and 6 deletions

15
active_bots/__init__.py Normal file
View File

@ -0,0 +1,15 @@
__all__ = []
import pkgutil
import inspect
for loader, name, is_pkg in pkgutil.walk_packages(__path__):
module = loader.find_module(name).load_module(name)
for name, value in inspect.getmembers(module):
if name.startswith('__'):
continue
globals()[name] = value
__all__.append(name)

View File

@ -18,7 +18,11 @@ class MastodonBot(Bot):
:return: list of statuses
"""
mentions = []
m = Mastodon(*user.get_masto_credentials())
try:
m = Mastodon(*user.get_masto_credentials())
except TypeError:
logger.error("No Mastodon Credentials in database.", exc_info=True)
return mentions
try:
notifications = m.notifications()
except Exception:

View File

@ -13,7 +13,7 @@ logger = logging.getLogger(__name__)
class TwitterBot(Bot):
def get_api(self, user):
keys = user.get_api_keys()
keys = user.get_twitter_credentials()
auth = tweepy.OAuthHandler(consumer_key=keys[0],
consumer_secret=keys[1])
auth.set_access_token(keys[2], # access_token_key
@ -27,7 +27,11 @@ class TwitterBot(Bot):
:return: reports: (list of report.Report objects)
"""
reports = []
api = self.get_api(user)
try:
api = self.get_api(user)
except Exception:
logger.error("Error Authenticating Twitter", exc_info=True)
return reports
last_mention = user.get_seen_tweet()
try:
if last_mention == 0:

View File

@ -27,6 +27,8 @@ if __name__ == '__main__':
if isinstance(ActiveBot, type) and issubclass(ActiveBot, Bot):
bots.append(ActiveBot())
# Mailinglists not fully implemented yet. debug
bots.pop(1)
try:
while True:
for user in db.active_users:
@ -39,5 +41,5 @@ if __name__ == '__main__':
bot2.post(user, status)
time.sleep(60) # twitter rate limit >.<
except Exception:
logger.error('Shutdown.', exc_info=True)
logger.error("Shutdown.", exc_info=True)
shutdown()

3
bot.py
View File

@ -1,7 +1,8 @@
class Bot(object):
# returns a list of Report objects
def crawl(self, user):
pass
reports = []
return reports
# post/boost Report object
def post(self, user, report):

View File

@ -201,7 +201,7 @@ schlitz
db.commit()
def get_twitter_token(self):
db.execute("SELECT access_token, access_token_secret FROM twitter_accouts WHERE user_id = ?;",
db.execute("SELECT client_id, client_secret FROM twitter_accounts WHERE user_id = ?;",
(self.uid, ))
return db.cur.fetchall()