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')
|