Удалить inline-клавиатуру для конкретного пользователя в канале
Бот на aiogram отправляет сообщение в канал с двумя кнопками ("рейтинг +1" и "рейтинг -1") inline-клавиатуры. Как можно сделать так, чтобы при нажатии на кнопку пользователем кнопки пропадали только у него (либо становились disabled)? Сейчас в этом коде кнопки пропадают у всех, после первого нажавшего пользователя.
# создание клавиатуры
def get_keyboard(_quote_uid: int):
# создание кнопок
rating_up = types.InlineKeyboardButton(text='рейтинг +1', callback_data=f'update_up_{_quote_uid}')
rating_down = types.InlineKeyboardButton(text='рейтинг -1', callback_data=f'update_down_{_quote_uid}')
# сборка клавиатуры
keyboard = types.InlineKeyboardMarkup(inline_keyboard=[[rating_up, rating_down]])
return keyboard
# функция отправки сообщения
async def send_quote() -> None:
# получение цитаты и её uid
get_quote: list = get_quote_db()
quote_uid: int = get_quote[0]
quote: str = get_quote[1]
logging.info(f"send_quote: {quote_uid}")
# отправка
await bot.send_message(
CHAT_ID,
text=quote,
reply_markup=get_keyboard(quote_uid)
)
# обработчик клика на кнопки
@dp.callback_query(F.data.startswith("update_"))
async def update_db(callback: types.CallbackQuery) -> None:
action = callback.data.split('_')[1]
quid = callback.data.split('_')[2]
# отправка в БД
set_vote_db(quid, action)
# удаление клавиатуры
await bot.edit_message_reply_markup(
chat_id=callback.message.chat.id,
message_id=callback.message.message_id,
reply_markup=None
)
await callback.answer(text='Ваш голос учтён. Спасибо!')
Ответы (1 шт):
Автор решения: Vyacheslav
→ Ссылка
В итоге сделал запись нажатий кнопок в БД и проверку на повторное нажатие