init commit
This commit is contained in:
90
app/bots/editor/keyboards.py
Normal file
90
app/bots/editor/keyboards.py
Normal file
@@ -0,0 +1,90 @@
|
||||
from __future__ import annotations
|
||||
from typing import Iterable, List, Tuple, Optional
|
||||
from telegram import InlineKeyboardButton, InlineKeyboardMarkup
|
||||
|
||||
|
||||
class KbBuilder:
|
||||
@staticmethod
|
||||
def channels(channels: Iterable) -> InlineKeyboardMarkup:
|
||||
rows = [[InlineKeyboardButton(ch.title or str(ch.chat_id), callback_data=f"channel:{ch.id}")]
|
||||
for ch in channels]
|
||||
return InlineKeyboardMarkup(rows)
|
||||
|
||||
@staticmethod
|
||||
def post_types() -> InlineKeyboardMarkup:
|
||||
rows = [
|
||||
[InlineKeyboardButton("Текст", callback_data="type:text"),
|
||||
InlineKeyboardButton("Фото", callback_data="type:photo")],
|
||||
[InlineKeyboardButton("Видео", callback_data="type:video"),
|
||||
InlineKeyboardButton("GIF", callback_data="type:animation")],
|
||||
]
|
||||
return InlineKeyboardMarkup(rows)
|
||||
|
||||
@staticmethod
|
||||
def parse_modes() -> InlineKeyboardMarkup:
|
||||
rows = [[InlineKeyboardButton("HTML", callback_data="fmt:HTML"),
|
||||
InlineKeyboardButton("MarkdownV2", callback_data="fmt:MarkdownV2")]]
|
||||
return InlineKeyboardMarkup(rows)
|
||||
|
||||
@staticmethod
|
||||
def send_confirm() -> InlineKeyboardMarkup:
|
||||
rows = [
|
||||
[InlineKeyboardButton("Отправить сейчас", callback_data="send:now")],
|
||||
[InlineKeyboardButton("Запланировать", callback_data="send:schedule")],
|
||||
]
|
||||
return InlineKeyboardMarkup(rows)
|
||||
|
||||
@staticmethod
|
||||
def templates_list(items: List, page: int, total: int, page_size: int) -> InlineKeyboardMarkup:
|
||||
rows: List[List[InlineKeyboardButton]] = []
|
||||
for t in items:
|
||||
rows.append([
|
||||
InlineKeyboardButton((t.title or t.name), callback_data=f"tpluse:{t.name}"),
|
||||
InlineKeyboardButton("👁 Предпросмотр", callback_data=f"tplprev:{t.name}")
|
||||
])
|
||||
|
||||
nav: List[InlineKeyboardButton] = []
|
||||
if page > 0:
|
||||
nav.append(InlineKeyboardButton("◀️ Назад", callback_data=f"tplpage:{page-1}"))
|
||||
if (page + 1) * page_size < total:
|
||||
nav.append(InlineKeyboardButton("Вперёд ▶️", callback_data=f"tplpage:{page+1}"))
|
||||
if nav:
|
||||
rows.append(nav)
|
||||
|
||||
rows.append([InlineKeyboardButton("Отмена", callback_data="tpl:cancel")])
|
||||
return InlineKeyboardMarkup(rows)
|
||||
|
||||
@staticmethod
|
||||
def preview_actions() -> InlineKeyboardMarkup:
|
||||
rows = [
|
||||
[InlineKeyboardButton("✅ Использовать", callback_data="pv:use")],
|
||||
[InlineKeyboardButton("✏️ Изменить переменные", callback_data="pv:edit")],
|
||||
[InlineKeyboardButton("Отмена", callback_data="tpl:cancel")],
|
||||
]
|
||||
return InlineKeyboardMarkup(rows)
|
||||
|
||||
@staticmethod
|
||||
def tpl_types() -> InlineKeyboardMarkup:
|
||||
rows = [
|
||||
[InlineKeyboardButton("Текст", callback_data="tpltype:text"),
|
||||
InlineKeyboardButton("Фото", callback_data="tpltype:photo")],
|
||||
[InlineKeyboardButton("Видео", callback_data="tpltype:video"),
|
||||
InlineKeyboardButton("GIF", callback_data="tpltype:animation")],
|
||||
]
|
||||
return InlineKeyboardMarkup(rows)
|
||||
|
||||
@staticmethod
|
||||
def tpl_formats() -> InlineKeyboardMarkup:
|
||||
rows = [
|
||||
[InlineKeyboardButton("HTML (по умолчанию)", callback_data="tplfmt:HTML")],
|
||||
[InlineKeyboardButton("MarkdownV2", callback_data="tplfmt:MarkdownV2")],
|
||||
]
|
||||
return InlineKeyboardMarkup(rows)
|
||||
|
||||
@staticmethod
|
||||
def tpl_confirm_delete(tpl_id: int) -> InlineKeyboardMarkup:
|
||||
rows = [
|
||||
[InlineKeyboardButton("Да, удалить", callback_data=f"tpldelok:{tpl_id}")],
|
||||
[InlineKeyboardButton("Отмена", callback_data="tpl:cancel")],
|
||||
]
|
||||
return InlineKeyboardMarkup(rows)
|
||||
Reference in New Issue
Block a user