@Elvira15

Есть рабочий телеграмм бот. Можно ли как то заносить ответы пользователей на кнопки в базу?

Есть бот, который проводит консультацию по заболеваниям животных в дельфинарии. Можно ли как то с помощью базы данных вытаскивать последовательность ответов пользователя и в конце на основании всех ответов выводит какой то текст. Например при нажатии на кнопки "Дельфин", "37.1-38", "Да" выводилось сообщение "Предположительный диагноз: отравление".
import telebot
import config

token =('')
bot=telebot.TeleBot(token)

from telebot import types

bot = telebot.TeleBot(config.TOKEN)

@bot.message_handler(commands=['start'])
def welcome(message):
    # keyboard
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    item1 = types.KeyboardButton("Номер ветеринарной клиники")
    item2 = types.KeyboardButton("Провести консультацию")
 
    markup.add(item1, item2)
 
    bot.send_message(message.chat.id, "Добро пожаловать, {0.first_name}!\nЯ - {1.first_name} бот, который поможет разобраться с самочувствием млекопитающих в вашем дельфинарии.".format(message.from_user, bot.get_me()),  reply_markup=markup)
 
@bot.message_handler(content_types=['text'])
def lalala(message):
      if message.text == "Номер ветеринарной клиники":

          markup = types.InlineKeyboardMarkup()

          item1 = types.InlineKeyboardButton("Набережные Челны", callback_data='Naberezhnye Chelny')
          item2 = types.InlineKeyboardButton("Анапа", callback_data='Anapa')
          markup.add(item1, item2)
          bot.send_message(message.chat.id, "Выберите нужный город", reply_markup=markup)

      elif message.text == "Провести консультацию":
          markup = types.InlineKeyboardMarkup()
          item1 = types.InlineKeyboardButton("Дельфин", callback_data='Dolphin')
          item2 = types.InlineKeyboardButton("Морской котик", callback_data='Ful seal')
          markup.add(item1, item2)
          bot.send_message(message.chat.id, "Выберите животное", reply_markup=markup)

@bot.callback_query_handler(func=lambda call: True)
def tempo(call):
  if call.data == 'Naberezhnye Chelny':
                bot.send_message(call.message.chat.id, text='Ветеринарный центр ')
  elif call.data == 'Anapa':
                bot.send_message(call.message.chat.id, text='Ветеринарная клиника')
            
  if call.data == 'Dolphin':
        keyboard = types.InlineKeyboardMarkup()
        item1 = types.InlineKeyboardButton("36-37", callback_data='Normal')
        item2 = types.InlineKeyboardButton("37.1-38", callback_data='Middling')
        item3 = types.InlineKeyboardButton("38.1-39", callback_data='Hight')
        keyboard.add(item1, item2, item3)
        bot.send_message(call.message.chat.id, text='Выберите температуру тела у дельфина', reply_markup=keyboard)

  elif call.data == 'Ful seal':
        keyboard = types.InlineKeyboardMarkup()
        item1 = types.InlineKeyboardButton("38-39", callback_data='Normal')
        item2 = types.InlineKeyboardButton("39.1-41", callback_data='Middling')
        item3 = types.InlineKeyboardButton("41.1-43", callback_data='Hight')
        keyboard.add(item1, item2, item3)
        bot.send_message(call.message.chat.id, text='Выберите температуру тела у морского котика', reply_markup=keyboard)


  if call.data == 'Normal' or call.data == 'Middling':
        keyboard = types.InlineKeyboardMarkup()
        item1 = types.InlineKeyboardButton("Да", callback_data='Yes')
        item2 = types.InlineKeyboardButton("Нет", callback_data='No')
        keyboard.add(item1, item2)
        bot.send_message(call.message.chat.id, text='Была ли рвота у животного в последние 3 дня?', reply_markup=keyboard)
  elif call.data == 'Hight':
        bot.send_message(call.message.chat.id, text='У животного слишком высокая температура.Выберите пункт "Номер ветеринарной клиники" и обратитесь к врачу')

  if call.data == 'No':
        keyboard = types.InlineKeyboardMarkup()
        item1 = types.InlineKeyboardButton("Да", callback_data='Yes1')
        item2 = types.InlineKeyboardButton("Нет", callback_data='No1')
        keyboard.add(item1, item2)
        bot.send_message(call.message.chat.id, text='Появились ли у животного красные пятна на теле, зуд кожи?', reply_markup=keyboard)
  elif call.data == 'Yes':
        bot.send_message(call.message.chat.id, text='Учитывая наличие повышенной темпераутры и наличие рвоты в последние 3 дня предположительный диагноз: отравление.')
  
  if call.data == 'No1':
        bot.send_message(call.message.chat.id, text='Данных полученных во время консультации не достаточно для поставки точного диагноза. Выберите пункт меню "Номер ветеринарной клиники" и свяжитесь с специалистом.')
  elif call.data == 'Yes1':
        bot.send_message(call.message.chat.id, text='Учитывая наличие повышенной температуры и появление красных пятен и зуда кожи предположительный диагноз: аллергия.')
  
bot.polling(none_stop=True)
  • Вопрос задан
  • 96 просмотров
Пригласить эксперта
Ответы на вопрос 1
@o5a
Можно ли как то с помощью базы данных вытаскивать последовательность ответов пользователя и в конце на основании всех ответов выводит какой то текст.

Так вопрос в том, как хранить данные этих опросов в базе или хотите полностью переделать систему опроса. Ведь сейчас диагноз итак формируется.
В базе хранить лучше не в логике последовательности, а просто заносить все параметры. Т.е. таблица примерно с такими полями
id - автоматически увеличивающийся идентификатор
user - идентификатор/имя пользователя
animal_type - вид животного "Дельфин" и т.п.
temperature - температура
и т.д., т.е. все запрашиваемые параметры в отдельном поле.

Тогда можно в любой момент будет сделать запрос в базу данных как по пользователю, так и по id опроса, и по этим данным опроса выдать диагноз.

Например, выдать данные последнего опроса выбранного пользователя:
select anymal_type, temperature, ... from table where user = <user> order by id desc limit 1
Ответ написан
Ваш ответ на вопрос

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

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