Как добавлять кнопку к основной клавиатуре?

Речь идет об инлайн клавиатуре: как я могу добавить кнопку к основной клавиатуре, которая будет отображаться только при определённых условиях? Например, если ID пользователя равен заданному значению, тогда к основной клавиатуре добавляется дополнительная кнопка. Я пробовал использовать метод add, как советует нейроннка , но он, похоже, не определяется.


Ответы (1 шт):

Автор решения: Рустам Рысаев
ADMIN_USERS = [айдишки]

добавьте айди в словарь

# Основная клавиатура
def get_main_keyboard(user_id: int) -> ReplyKeyboardMarkup:
    keyboard = ReplyKeyboardMarkup(resize_keyboard=True)
    keyboard.add(KeyboardButton("Основная кнопка 1"))
    keyboard.add(KeyboardButton("Основная кнопка 2"))
    

    if user_id == ADMIN_USERS :
        keyboard.add(KeyboardButton("Специальная кнопка"))  # Кнопка только для заданного ID
    
    return keyboard

@dp.message_handler(commands=["start"])
async def start_handler(message: types.Message):
    user_id = message.from_user.id
    keyboard = get_main_keyboard(user_id)
    await message.reply("Привет! Это твоя клавиатура:", reply_markup=keyboard)

или так

def get_main_keyboard(user_id: int) -> ReplyKeyboardMarkup:
    # Базовые кнопки
    kb_list = [
        [KeyboardButton(text="Основная кнопка 1")],
        [KeyboardButton(text="Основная кнопка 2")]
    ]
    
    if user_id == ADMIN_USERS :
        kb_list.append([KeyboardButton(text="Специальная кнопка")])
    
    return ReplyKeyboardMarkup(keyboard=kb_list, resize_keyboard=True)

в случае с инлайн клавиатурой

# Основная инлайн-клавиатура
def get_inline_keyboard(user_id: int) -> InlineKeyboardMarkup:
    # Базовые кнопки
    kb_list = [
        [InlineKeyboardButton(text="Основная кнопка 1", callback_data="main_button_1")],
        [InlineKeyboardButton(text="Основная кнопка 2", callback_data="main_button_2")]
    ]
    
    # Добавляем специальную кнопку для определённого пользователя
    if user_id == ADMIN_USERS:
        kb_list.append([InlineKeyboardButton(text="Специальная кнопка", callback_data="special_button")])
    
    return InlineKeyboardMarkup(inline_keyboard=kb_list)

# Хендлер для команды /start
@dp.message_handler(commands=["start"])
async def start_handler(message: types.Message):
    user_id = message.from_user.id
    keyboard = get_inline_keyboard(user_id)
    await message.reply("Привет! Это твоя инлайн-клавиатура:", reply_markup=keyboard)

# Хендлер для обработки нажатий на кнопки
@dp.callback_query_handler()
async def callback_handler(callback_query: types.CallbackQuery):
    if callback_query.data == "main_button_1":
        await callback_query.answer("Вы нажали Основную кнопку 1!")
    elif callback_query.data == "main_button_2":
        await callback_query.answer("Вы нажали Основную кнопку 2!")
    elif callback_query.data == "special_button":
        await callback_query.answer("Вы нажали Специальную кнопку!")
→ Ссылка