@AlexHDreal

Есть инлайн кнопки “лайк”, “дизлайк” Телеграм бот. Как изменить значение кнопки после нажатия на неё?

Решил засунуть переменные quant1 и quant2 в строки кнопок. Но как их изменить по нажатию на кнопку не знаю. Смастерил вот такой код. Но по нажатию вылезает ошибка:

**File "bottwo.py", line 86, in callback_vote_action
quant1 += 1
TypeError: can only concatenate tuple (not "int") to tuple**

Вроде понятно что с числами в строке он работать не хочет, но как тогда сделать так чтобы он работал?

vote_cb = CallbackData('vote', 'action')  # vote:<action>
likes = {}  # user_id: amount_of_likes

	def get_keyboard():
		quant1 = 0
		quant2 = 0

		butlike = types.InlineKeyboardButton(' ' + str(quant1), callback_data=vote_cb.new(action='up'))
		butdilike = types.InlineKeyboardButton(' ' + str(quant2), callback_data=vote_cb.new(action='down'))

		return types.InlineKeyboardMarkup().row(butlike, butdilike)


	@dp.callback_query_handler(vote_cb.filter(action=['up', 'down']))
	async def callback_vote_action(query: types.CallbackQuery, callback_data: dict):
		logging.info('Получил данные обратного вызова: %r', callback_data)  # callback_data содержит всю информацию из данных обратного вызова
		await query.answer()  # Не забудьте ответить на запрос обратного вызова как можно скорее
		callback_data_action = callback_data['action']
		likes_count = likes.get(query.from_user.id, 0)


		if callback_data_action == 'up':
			likes_count += 1
			for quant1 in get_keyboard():
				quant1 += 1

			if likes_count == 1:
				pass
		else:
			likes_count -= 1
			for quant2 in get_keyboard():
				quant2 += 1

			if likes_count == 0:
				pass


		likes[query.from_user.id] = likes_count  # обновление количества лайков в хранилище
  • Вопрос задан
  • 431 просмотр
Пригласить эксперта
Ответы на вопрос 1
@Angelex
Вам нужно изменить сообщение, а именно клавиатуру при сообщении ( edit_reply_markup() ).

Судя по всему вы используете библиотеку aiogram, в ней можно ускорить процесс:
query.message.edit_reply_markup( reply_markup = ... )
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы