Как добавлять кнопку к основной клавиатуре?
Речь идет об инлайн клавиатуре: как я могу добавить кнопку к основной клавиатуре, которая будет отображаться только при определённых условиях? Например, если 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("Вы нажали Специальную кнопку!")