Example #1
0
 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
Example #3
0
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
Example #4
0
File: consts.py Project: FZ1010/FZ
 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