From 34cac79a145aa7d97dd9d6789b40bd32e70b6f0c Mon Sep 17 00:00:00 2001 From: MrYacha Date: Fri, 29 May 2020 19:45:52 +0300 Subject: [PATCH] InlineKeyboardMarkup: port 'add', 'row' and 'insert' functions --- aiogram/api/types/inline_keyboard_markup.py | 46 ++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/aiogram/api/types/inline_keyboard_markup.py b/aiogram/api/types/inline_keyboard_markup.py index 73c43f0d..43fcec9e 100644 --- a/aiogram/api/types/inline_keyboard_markup.py +++ b/aiogram/api/types/inline_keyboard_markup.py @@ -18,5 +18,49 @@ class InlineKeyboardMarkup(MutableTelegramObject): Source: https://core.telegram.org/bots/api#inlinekeyboardmarkup """ - inline_keyboard: List[List[InlineKeyboardButton]] + row_width: int = 3 + inline_keyboard: List[List[InlineKeyboardButton]] = [] """Array of button rows, each represented by an Array of InlineKeyboardButton objects""" + + def add(self, *args: InlineKeyboardButton) -> InlineKeyboardMarkup: + """ + Add buttons + :param args: + :return: self + :rtype: :obj:`types.InlineKeyboardMarkup` + """ + row = [] + for index, button in enumerate(args, start=1): + row.append(button) + if index % self.row_width == 0: + self.inline_keyboard.append(row) + row = [] + if len(row) > 0: + self.inline_keyboard.append(row) + return self + + def row(self, *args: InlineKeyboardButton) -> InlineKeyboardMarkup: + """ + Add row + :param args: + :return: self + :rtype: :obj:`types.InlineKeyboardMarkup` + """ + btn_array = [] + for button in args: + btn_array.append(button) + self.inline_keyboard.append(btn_array) + return self + + def insert(self, button: InlineKeyboardButton) -> InlineKeyboardMarkup: + """ + Insert button to last row + :param button: + :return: self + :rtype: :obj:`types.InlineKeyboardMarkup` + """ + if self.inline_keyboard and len(self.inline_keyboard[-1]) < self.row_width: + self.inline_keyboard[-1].append(button) + else: + self.add(button) + return self