from aiogram import types def get_keyboard(rows, one_time_keyboard=True, **kwargs) -> types.KeyboardButton: keyboard = types.ReplyKeyboardMarkup( resize_keyboard=True, one_time_keyboard=one_time_keyboard, **kwargs ) for row in rows: keyboard.add( *[ types.KeyboardButton(button) for button in row ] ) return keyboard def get_inline_keyboard(rows, *args, **kwargs): if not rows: return None keyboard = [] for row in rows: if not row: continue result_row = [] for _item in row: if not _item: continue if isinstance(_item, dict): result_row.append( types.InlineKeyboardButton( **{ _key: _value for _key, _value in _item.items() if _value } ) ) else: result_row.append(_item) keyboard.append(result_row) return types.InlineKeyboardMarkup(inline_keyboard=keyboard) def get_inline_query(items: list): inline_items = [] for item in items: inline_items.append( types.InlineQueryResultArticle( id=str(item.get('id', '0')), title=item.get('title', ''), input_message_content=types.InputTextMessageContent( item.get('input_message_content', ''), parse_mode='html', disable_web_page_preview=True ), reply_markup=get_inline_keyboard(item.get('reply_markup')), url=item.get('url'), hide_url=item.get('hide_url'), description=item.get('description'), thumb_url=item.get('thumb_url'), ) ) return inline_items