110 lines
3.8 KiB
Python
110 lines
3.8 KiB
Python
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)])
|
|
|
|
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')
|