Levman5
@Levman5
print(“Hello World!”)

Как сделать кнопки и подсчёт голосов под сообщением на pytelegrambotapi?

Я хочу сделать что бы под сообщением были кнопки. Нажимаешь на одну: на ней прибавляется значение. С другой также. Но что бы нажать можно было только 1 раз.

Можете пожалуйста подсказать: как это сделать?
  • Вопрос задан
  • 89 просмотров
Пригласить эксперта
Ответы на вопрос 1
InternetMaster
@InternetMaster
Интернет
Добро пожаловать на сильно неприятную сторону Telegram API!
Тема затрагивает самую бесячую, сложную и вечно неработающую сторону Telegram Bot!
Нам предстоит работать с edit_message_text еще и с call, и разумеется с БД!

P.S. Следующий код подразумевает то, что ты прекрасно знаешь как работать с sqlite3 в python

Вам следует создать таблицу в БД где вы будете записывать user_id всех кто нажал хотя бы на одну кнопку, и еще 2 столбца для каждой кнопки с общим результатом количества всех пользователей кто нажал на неё.

Добавляешь сообщение с кнопкой
def deffers():
    cursor.execute('SELECT obshee_1 FROM tablica')
    knopach1 = cursor.fetchone()
    cursor.execute('SELECT obshee_2 FROM tablica')
    knopach2 = cursor.fetchone()
    klava = types.InlineKeyboardMarkup()
    button1=types.InlineKeyboardButton(text='Всего: '+knopach1[0], callback_data='knopka1')
    button2=types.InlineKeyboardButton(text='Всего: '+knopach2[0], callback_data='knopka2')
    bot.send_message(message.text, 'Ваше абсолютно любое сообщение. Абсолютно любое.', reply_markup=klava)


Теперь нужно обрабатывать нажатие кнопки пользователей.

Потом, в обработчике вы должны вытащить значение сколько людей проголосовало за нажатую кнопку, прибавить к нему +1 и вернуть новое значение в БД, занеся user_id, потом с этим же user_id нажать на эту же или другую кнопку не получится.

Потом нужно сделать bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text='Всего: [СКОЛЬКО БЫЛО+1]',reply_markup=klava)
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы