64 lines
2.4 KiB
Python
64 lines
2.4 KiB
Python
import json
|
|
import io
|
|
from fastapi import APIRouter, HTTPException, BackgroundTasks
|
|
from pydantic import BaseModel
|
|
from create_bot import bot, important_message, url
|
|
from aiogram import types
|
|
from create_bot import request_url, api_token
|
|
import requests
|
|
import time
|
|
import re
|
|
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton, WebAppInfo, ReplyKeyboardRemove
|
|
from loguru import logger
|
|
|
|
def get_answer_keyboard():
|
|
keyboard = InlineKeyboardMarkup()
|
|
button1 = InlineKeyboardButton('Главное меню', callback_data='main_menu_text')
|
|
keyboard.add(button1)
|
|
return keyboard
|
|
|
|
class AlertSchema(BaseModel):
|
|
tg_id: int
|
|
message: str
|
|
|
|
class DispatchSchema(BaseModel):
|
|
tg_id: int
|
|
text: str
|
|
attachment_path: str
|
|
button_name: str | None = None
|
|
button_url: str | None = None
|
|
web_app_button_name: str | None = None
|
|
|
|
send_message_router = APIRouter(
|
|
prefix=''
|
|
)
|
|
|
|
@send_message_router.post('/dispatch/')
|
|
async def handle_dispatch(data: DispatchSchema, background_tasks: BackgroundTasks):
|
|
try:
|
|
media = io.BytesIO(requests.get(data.attachment_path).content)
|
|
media.seek(0)
|
|
attachment = types.InputFile(media)
|
|
keyboard = InlineKeyboardMarkup()
|
|
if data.button_name and data.button_url:
|
|
button1 = InlineKeyboardButton(f'{data.button_name}', url=f"{data.button_url}")
|
|
keyboard.add(button1)
|
|
if data.web_app_button_name:
|
|
button2 = InlineKeyboardButton(f'{data.web_app_button_name}', web_app=WebAppInfo(url=f"{url}"))
|
|
keyboard.add(button2)
|
|
|
|
if not data.button_name and not data.web_app_button_name:
|
|
await bot.send_photo(data.tg_id, attachment, caption=data.text, parse_mode=types.ParseMode.MARKDOWN, reply_markup=ReplyKeyboardRemove())
|
|
else:
|
|
await bot.send_photo(data.tg_id, attachment, caption=data.text, reply_markup=keyboard, parse_mode=types.ParseMode.MARKDOWN)
|
|
except Exception as e:
|
|
raise HTTPException(status_code=500, detail=str(e))
|
|
return {'ok': True}
|
|
|
|
@send_message_router.post('/alert/')
|
|
async def handle_alert(data: AlertSchema):
|
|
try:
|
|
await bot.send_message(chat_id=data.tg_id, text=data.message, parse_mode=types.ParseMode.MARKDOWN) #, reply_markup=get_answer_keyboard())
|
|
except Exception as e:
|
|
raise HTTPException(status_code=500, detail=str(e))
|
|
return {'ok': True} |