def create_inline_kb( cls, actions: List[Dict[str, Union[str, bool, Tuple[Dict[str, str], CallbackData], ], ]], schema: List[int], ) -> InlineKeyboardMarkup: kb = InlineKeyboardMarkup() kb.row_width = max(schema) buttons = [] for a in actions: data: Dict[str, Union[str, bool, Tuple[Dict[str, str], CallbackData], ], ] = {} for k, v in cls.aliases.items(): if k in a: a[v] = a[k] del a[k] for k in a: if k in cls.available_properities["inline"]: data[k] = a[k] else: break if "callback_data" in data: data["callback_data"] = data["callback_data"][1].new( **data["callback_data"][0]) if "pay" in data: if len(buttons) != 0 and data["pay"]: raise ValueError( "Платежная кнопка должна идти первой в клавиатуре") data["pay"] = a["pay"] buttons.append(InlineKeyboardButton(**data)) kb.inline_keyboard = create_keyboard_layout(buttons, schema) return kb
def generate_keyboard(self, actions: List[Dict[str, Union[str, bool, Tuple[Dict[str, str], CallbackData], LoginUrl, CallbackGame]]], schema: List[int]) -> InlineKeyboardMarkup: markup = InlineKeyboardMarkup() markup.row_width = max(schema) buttons = list() for action in actions: self._replace_aliases(action) button_data = self._check_properties(action) if 'callback_data' in button_data: self._set_callback_data(button_data) if 'pay' in button_data: if len(buttons) != 0 and button_data['pay']: raise ValueError( 'pay type of button must always be the first button in the first row' ) button_data['pay'] = action['pay'] if len(button_data) != self.properties_amount: raise ValueError('Insufficient data to create a button') buttons.append(InlineKeyboardButton(**button_data)) markup.inline_keyboard = self.create_keyboard_layout(buttons, schema) return markup
def arrange_inline_schema(buttons: List[InlineKeyboardButton], count: List[int]) -> InlineKeyboardMarkup: kb = InlineKeyboardMarkup() kb.row_width = max(count) if sum(count) != len(buttons): raise ValueError('Количество кнопок не совпадает со схемой') tmplist = [] for a in count: tmplist.append([]) for _ in range(a): tmplist[-1].append(buttons.pop(0)) kb.inline_keyboard = tmplist return kb
def _create_kb(actions: List[Dict[str, Union[str, bool, Tuple[Dict[str, str], CallbackData], LoginUrl, CallbackGame]]], schema: List[int]) -> InlineKeyboardMarkup: kb = InlineKeyboardMarkup() kb.row_width = max(schema) btns = [] # noinspection DuplicatedCode for a in actions: data: Dict[str, Union[str, bool, Tuple[Dict[str, str], CallbackData], LoginUrl, CallbackGame]] = {} for k, v in InlineConstructor.aliases.items(): if k in a: a[v] = a[k] del a[k] for k in a: if k in InlineConstructor.available_properities: if len(data) < InlineConstructor.properties_amount: data[k] = a[k] else: break if 'callback_data' in data: data['callback_data'] = data['callback_data'][1].new( **data['callback_data'][0]) if 'pay' in data: if len(btns) != 0 and data['pay']: raise ValueError( 'Платежная кнопка должна идти первой в клавиатуре') data['pay'] = a['pay'] if len(data) != InlineConstructor.properties_amount: raise ValueError('Недостаточно данных для создания кнопки') btns.append(InlineKeyboardButton(**data)) kb.inline_keyboard = schema_generator.create_keyboard_layout( btns, schema) return kb