Source code for telegram_bot_discussion.ext.button.change_button_at_keyboard

from typing import Union


from telegram import InlineKeyboardMarkup


from telegram_bot_discussion.button.button import Button
from telegram_bot_discussion.button.coder_interface import CoderInterface


[docs] def change_button_at_keyboard( where: InlineKeyboardMarkup, change_from_button: Button, change_to_button: Union[Button, None], coder: CoderInterface, full_scan: bool = False, ) -> InlineKeyboardMarkup: """Help function to find and change `change_from_button`-button in `InlineKeyboardMarkup` to other or delete it, if `change_to_button` is None. :param full_scan: If `True` it scan all buttons, if `False` (default) replace first only. :type full_scan: bool """ reply_markup_inline_keyboard = list(map(list, where.inline_keyboard)) was_change = False new_reply_markup_inline_keyboard = [] for _, reply_markup_buttons_row in enumerate(reply_markup_inline_keyboard): new_row = [] for _, reply_markup_button in enumerate(reply_markup_buttons_row): if full_scan: if change_from_button.equals( reply_markup_button, coder, ): was_change = True if change_to_button: new_row.append(change_to_button.as_button(coder)) if not full_scan: break else: new_row.append(reply_markup_button) else: if was_change: new_row.append(reply_markup_button) else: if change_from_button.equals( reply_markup_button, coder, ): was_change = True if change_to_button: new_row.append(change_to_button.as_button(coder)) else: new_row.append(reply_markup_button) if len(new_row) > 0: new_reply_markup_inline_keyboard.append(new_row) if was_change: return InlineKeyboardMarkup(new_reply_markup_inline_keyboard) return where # None