import io import base64 from flask import request, Response, send_file from viberbot.api.messages.url_message import URLMessage from viberbot.api.messages.text_message import TextMessage from viberbot.api.messages.picture_message import PictureMessage from viberbot.api.messages.keyboard_message import KeyboardMessage from viberbot.api.viber_requests import ViberMessageRequest from viberbot.api.viber_requests import ViberConversationStartedRequest from load import app, logger, viber, config from config import parse_bool from parser.parser import get_about_replacements, docs_parse ENABLE_PARSER = parse_bool(text=config.parser.enable_parse) KEYBOARD = { "Type": "keyboard", "Buttons": [ { "Columns": 6, "Rows": 1, "BgColor": "#e6f5ff", "BgLoop": True, "ActionType": "reply", "ActionBody": "replaces", #"ReplyType": "message", "Text": "Заміни" }, { "Columns": 3, "Rows": 2, "BgColor": "#e6f5ff", "BgLoop": True, "ActionType": "reply", "ActionBody": "link", #"ReplyType": "message", "Text": "Посилання на файл" } ] } if ENABLE_PARSER: KEYBOARD["Buttons"].append({ "Columns": 3, "Rows": 2, "BgColor": "#e6f5ff", "BgLoop": True, "ActionType": "reply", "ActionBody": "update", #"ReplyType": "message", "Text": "Обновити дані" }) else: KEYBOARD["Buttons"][1]["Columns"] = 6 def get_text_button(index: int): return KEYBOARD["Buttons"][index]["ActionBody"] @app.route('/', methods=['POST']) def incoming(): logger.debug("received request. post data: {0}".format(request.get_data())) viber_request = viber.parse_request(request.get_data().decode('utf8')) if isinstance(viber_request, ViberConversationStartedRequest): viber.send_messages(viber_request.user.id, [ KeyboardMessage(keyboard=KEYBOARD) ]) if isinstance(viber_request, ViberMessageRequest): message = viber_request.message.text if message == "id": viber.send_messages(viber_request.sender.id, [TextMessage(text=viber_request.sender.id, keyboard=KEYBOARD)]) if message == get_text_button(0): data = get_about_replacements() if 'image' in data: viber.send_messages(viber_request.sender.id, [ PictureMessage( media=f"{config.webhook.webhook_url}/image", keyboard=KEYBOARD ) ]) elif message == get_text_button(1): viber.send_messages(viber_request.sender.id, [ URLMessage(media=config.parser.link, keyboard=KEYBOARD) ]) elif ENABLE_PARSER and message == get_text_button(2) and viber_request.sender.id: if viber_request.sender.id not in config.parser.admins.split(","): viber.send_messages(viber_request.sender.id, [TextMessage(text="Ви не адміністратор!")]) else: try: docs_parse() viber.send_messages(viber_request.sender.id, [ TextMessage(text="Замены обновлены!", keyboard=KEYBOARD)]) except Exception as e: print(e) viber.send_messages(viber_request.sender.id, [ TextMessage(text='Ошибка обновления', keyboard=KEYBOARD)]) else: viber.send_messages(viber_request.sender.id, [ TextMessage(text='Привіт!', keyboard=KEYBOARD)]) return Response(status=200) @app.route('/image') def get_image(): data = get_about_replacements() if 'image' in data: return send_file(io.BytesIO(base64.b64decode(data['data']['all'])), mimetype='image/jpeg')