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)