JoostSijm 4 anni fa
parent
commit
0aef1e956d

+ 58 - 0
src/vboo_info_bot/__init__.py

@@ -0,0 +1,58 @@
+"""Initialize VBOO Info Bot"""
+
+import os
+import logging
+
+from dotenv import load_dotenv
+import telegram
+from telegram.ext import Updater
+from rival_regions_wrapper import LocalAuthentication, ApiWrapper
+
+
+load_dotenv()
+
+# get logger
+LOGGER = logging.getLogger(__name__)
+LOGGER.setLevel(logging.INFO)
+TELEGRAM_LOGGER = logging.getLogger('telegram')
+TELEGRAM_LOGGER.setLevel(logging.INFO)
+
+# create file handler
+FILE_HANDLER = logging.FileHandler('output.log')
+FILE_HANDLER.setLevel(logging.INFO)
+
+# create console handler
+STREAM_HANDLER = logging.StreamHandler()
+STREAM_HANDLER.setLevel(logging.INFO)
+
+# create formatter and add it to the handlers
+FORMATTER = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
+STREAM_HANDLER.setFormatter(FORMATTER)
+FILE_HANDLER.setFormatter(FORMATTER)
+
+# add the handlers to logger
+LOGGER.addHandler(STREAM_HANDLER)
+LOGGER.addHandler(FILE_HANDLER)
+TELEGRAM_LOGGER.addHandler(STREAM_HANDLER)
+TELEGRAM_LOGGER.addHandler(FILE_HANDLER)
+
+TELEGRAM_KEY = os.environ['TELEGRAM_KEY']
+TELEGRAM_BOT = telegram.Bot(token=TELEGRAM_KEY)
+TELEGRAM_UPDATER = Updater(TELEGRAM_KEY, use_context=True)
+
+
+class MissingAuthenticationError(Exception):
+    """Error for missing authentication"""
+
+RR_USERNAME = os.environ.get('RIVAL_REGIONS_USERNAME', None)
+RR_PASSWORD = os.environ.get('RIVAL_REGIONS_PASSWORD', None)
+RR_LOGIN_METHOD = os.environ.get('RIVAL_REGIONS_LOGIN_METHOD', None)
+
+if None in (RR_USERNAME, RR_PASSWORD, RR_LOGIN_METHOD):
+    raise MissingAuthenticationError(
+        'Load the following variables in your user environment: '
+        'RIVAL_REGIONS_USERNAME, RIVAL_REGIONS_PASSWORD, RIVAL_REGIONS_LOGIN_METHOD'
+    )
+
+AUTHENTICATION = LocalAuthentication(RR_USERNAME, RR_PASSWORD, RR_LOGIN_METHOD)
+API_WRAPPER = ApiWrapper(AUTHENTICATION)

+ 12 - 0
src/vboo_info_bot/__main__.py

@@ -0,0 +1,12 @@
+"""VBOO Info Bot"""
+
+from vboo_info_bot import LOGGER, telegram_bot
+
+
+def main():
+    """Main function"""
+    LOGGER.info('Starting application')
+    telegram_bot.run()
+
+if __name__ == '__main__':
+    main()

+ 10 - 0
src/vboo_info_bot/api.py

@@ -0,0 +1,10 @@
+"""API function"""
+
+
+from rival_regions_wrapper.api_wrapper import Article
+
+from vboo_info_bot import API_WRAPPER
+
+def get_article(article_id):
+    """Get article by id"""
+    return Article(API_WRAPPER).info(article_id)

+ 11 - 0
src/vboo_info_bot/functions.py

@@ -0,0 +1,11 @@
+"""Common functions"""
+
+
+def telegram_format_article(article):
+    """Format article object for telegram"""
+    formatted_article = '*{}* by: {}\n_{}_'.format(
+        article['article_title'],
+        article['author_name'],
+        article['content_text'][0:50],
+    )
+    return formatted_article

+ 46 - 0
src/vboo_info_bot/telegram_bot.py

@@ -0,0 +1,46 @@
+"""Telegram bot"""
+
+import re
+
+import hyperlink
+from telegram import ParseMode
+from telegram.ext import MessageHandler, CommandHandler, Filters
+
+from vboo_info_bot import TELEGRAM_UPDATER, api, functions
+
+
+def cmd_start(update, context):
+    """Start command"""
+    update.message.reply_text(
+        'Hi {}'.format(update.message.from_user.first_name))
+
+def cmd_help(update, context):
+    """Help command"""
+    update.message.reply_text('**HELP**', parse_mode=ParseMode.MARKDOWN)
+
+def text_handler(update, context):
+    """Handle text"""
+    urls = re.findall(r'(https?://\S+)', update.message.text)
+    for url in urls:
+        url = hyperlink.URL.from_text(url)
+        if url.host == 'rivalregions.com' or url.host == 'm.rivalregions.com':
+            if 'news/show/' in url.fragment:
+                article_id = url.fragment.replace('news/show/', '')
+                article = api.get_article(article_id)
+                formatted_article = functions.telegram_format_article(article)
+                update.message.reply_text(formatted_article, parse_mode=ParseMode.MARKDOWN)
+
+
+def run():
+    """run function"""
+    dispatcher = TELEGRAM_UPDATER.dispatcher
+
+    # general commands
+    dispatcher.add_handler(CommandHandler('start', cmd_start))
+    dispatcher.add_handler(CommandHandler('help', cmd_help))
+
+    # translate
+    dispatcher.add_handler(MessageHandler(Filters.text, text_handler))
+
+    TELEGRAM_UPDATER.start_polling()
+    TELEGRAM_UPDATER.idle()