/
BorisPlus
/
Telegram-Bot-Discussion-Examples
Обзор
Документация
Войти
/
BorisPlus
/
Telegram-Bot-Discussion-Examples
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
examples/change_button_bot/internal/buttons/state_button.py
74 строки
2 KB
b
2025_10_13_initial
13 окт 2025, 00:05
13 окт 2025, 00:05
0fc4405
Код
Авторство
О чём код?
from telegram import Message, Update from telegram.ext import CallbackContext from telegram.error import BadRequest from telegram_bot_discussion import Contextual from telegram_bot_discussion.button import Button from telegram_bot_discussion.functions import get_chat_id, get_message from telegram_bot_discussion.ext.button import change_button_at_keyboard from ..bot import ChangeButtonBot from .state_button_params import StateButtonParams class StateButton(Button): on_click_message: str = "" @classmethod def inverse_class(cls): return StateButton device_id: int params: StateButtonParams def __init__(self, chat_id: int, device_id: int): self.params = StateButtonParams( action=self.action(), device_id=device_id, ) super().__init__(chat_id) @classmethod async def on_click( cls, update: Update, context: CallbackContext, ): message = get_message(update) if not isinstance(message, Message): return chat_id = get_chat_id(update) discussion: ChangeButtonBot = Contextual[ChangeButtonBot](context)() params = StateButtonParams.fetch( callback_query=update.callback_query, coder=discussion.get_buttons_handler().coder, ) reply_markup = message.reply_markup if not reply_markup: return new_reply_markup = change_button_at_keyboard( reply_markup, cls(chat_id, params.device_id), ( cls.inverse_class()(chat_id, params.device_id) if cls.inverse_class() else None ), discussion.get_buttons_handler().coder, ) if not new_reply_markup: return try: await message.edit_reply_markup(reply_markup=new_reply_markup) if cls.inverse_class() and cls.inverse_class().on_click_message: await update.callback_query.answer( text=cls.inverse_class().on_click_message, show_alert=True, ) except BadRequest as e: print(e) ...