@kovalchuk_evgenii

При повторном обращении к боту, он крашится?

Сделал бота который опрашивает пользователя и сохраняет полученные данные в бд.

если пройти опрос один раз, все срабатывает хорошо. Ноооо если пройти второй раз, в середине просто крашится. Не могу понять причины. Думаю что это связанно с способом сохранения данных.

так же почему то поле id в бд остается пустым, хотя должно автоматом давать значение +1.

from telebot import types
import sqlite3

bot = telebot.TeleBot('токен')

org = ''
uchr = ''
nalog = ''
inoe = ''
vopros = ''
users_id = ''
# chat_id = '@chat_ras_gos_RF'

@bot.message_handler(commands=['/sotr'])
def sotr(message):
    a = telebot.types.ReplyKeyboardRemove()
    bot.send_message(message.chat.id, 'Опишите свой вопрос, я отправлю его администратору', reply_markup=a)
    bot.register_next_step_handler(message, sotr_otpravil)

def sotr_otpravil(message):
    a = telebot.types.ReplyKeyboardRemove()
    bot.send_message(message.chat.id, 'Ваше сообщение отправленно', reply_markup=a)

    start(message)

@bot.message_handler(commands=['/start'])
def start(message):
    a = telebot.types.ReplyKeyboardRemove()
    bot.send_message(message.chat.id, 'Выберете команду из меню или напишите\n/sotr (По вопросам сотрудничества)\n/reg (Зарегестрировать вопрос)\n/start (Старт бота)', reply_markup=a)
    bot.register_next_step_handler(message, answer_start)
    
@bot.message_handler(func=lambda message: True)
def answer_start(message: types.Message):
    if message.text == "/sotr":
        sotr(message) 
    elif message.text == "/reg":
        reg(message)
    else:
        start(message)

@bot.message_handler(content_types=['text'])

@bot.message_handler(commands=['/reg']) 
def reg(message: types.Message): #узнаем вид организации !!!НЕ ДОБАВЛЯЕТСЯ ИД!!!
    conn = sqlite3.connect('bdusers.db')
    cur = conn.cursor()

    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    markup.add("Госсектор", "Бизнес")

    cur.execute('CREATE TABLE IF NOT EXISTS users (id INTEGR PRIMARY KEY, users_id varchar(50), org varchar(50), uchr varchar(50), nalog varchar(50), inoe varchar(50), vopros varchar(1500))')
    conn.commit()
    cur.close()
    conn.close()

    bot.send_message(message.chat.id, 'Выберете Вид организации?', reply_markup=markup)
    bot.register_next_step_handler(message, answer_buisness)

@bot.message_handler(func=lambda message: True)
def answer_buisness(message: types.Message): 
    if message.text == "Госсектор":
        user_org(message) 
    elif message.text == "Бизнес":
        user_nalog(message)
    else:
        reg(message)

@bot.message_handler(func=lambda message: True)
def dop_nalog(message: types.Message):
    if message.text == "Иное":
        user_inoe(message)
    elif message.text == "ООО":
        user_bis(message)
    elif message.text == "ЗАО":
        user_bis(message)
    elif message.text == "ИП":
        user_bis(message)
    elif message.text == "ОАО":
        user_bis(message)
    elif message.text == "Самозанятый":
        user_bis(message)
    else:
        user_nalog(message)

def user_org(message): #узнаем вид учреждения
    global org
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    markup.add("Бюджетное", "Автономное", "Казенное")
    org = message.text
    bot.send_message(message.chat.id, 'Выберете вид учреждения.', reply_markup=markup)
    bot.register_next_step_handler(message, user_uchr)

def user_nalog(message): #узнаем систему налогооблажения
    global org
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    markup.add("ООО", "ЗАО", "ОАО", "ИП", "Самозанятый", "Иное")
    org = message.text
    bot.send_message(message.chat.id, 'Укажите вид налогообложения?', reply_markup=markup)
    bot.register_next_step_handler(message, dop_nalog)

def user_inoe(message): #узнаем иную систему налогооблажения
    global inoe
    a = telebot.types.ReplyKeyboardRemove()
    inoe = message.text

    bot.send_message(message.chat.id, 'Напишите вид налогообложения.\nНапример: ООО', reply_markup=a)
    bot.register_next_step_handler(message, user_bis)

def user_uchr(message): 
    global uchr
    a = telebot.types.ReplyKeyboardRemove()
    uchr = message.text

    bot.send_message(message.chat.id, 'Четко сформулируйте вопрос?', reply_markup=a)
    bot.register_next_step_handler(message, users_id)

def user_bis(message): 
    global nalog
    a = telebot.types.ReplyKeyboardRemove()
    nalog = message.text
    
    bot.send_message(message.chat.id, 'Четко сформулируйте вопрос?', reply_markup=a)
    bot.register_next_step_handler(message, users_id)

def users_id(message): 
    global vopros
    a = telebot.types.ReplyKeyboardRemove()
    vopros = message.text
    
    bot.send_message(message.chat.id, 'Напишите свой юзер id\nПример: @Test_buuh_bot', reply_markup=a)
    bot.register_next_step_handler(message, user_vopros)

def user_vopros(message): #уточняем верность вопроса и отправляем в чат
    global users_id
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    markup.add("Да", "Нет")
    users_id = message.text

    question = ''+org+'\n'+uchr+'\n'+nalog+'\nАвтор: '+users_id+'\n\nВаш вопрос: \n'+vopros+''
    bot.send_message(message.from_user.id, text=question, reply_markup=markup)
    bot.send_message(message.chat.id, 'отправляю вопрос в чат?', reply_markup=markup)

    conn = sqlite3.connect('bdusers.db')
    cur = conn.cursor()
    cur.execute("INSERT INTO users (users_id, org, uchr, nalog, inoe, vopros) VALUES ('%s', '%s', '%s', '%s', '%s', '%s')" % (users_id, org, uchr, nalog, inoe, vopros))
    conn.commit()
    cur.close()
    conn.close()

    bot.register_next_step_handler(message, callback_worker)

@bot.callback_query_handler(func=lambda call: True)
def callback_worker(message):
    a = telebot.types.ReplyKeyboardRemove()

    bot.send_message(message.chat.id, 'Вопрос отправлен в чат https://t.me/buh_rus', reply_markup=a)
    start(message)

bot.infinity_polling()
# bot.polling(non_stop=True)```
  • Вопрос задан
  • 61 просмотр
Пригласить эксперта
Ваш ответ на вопрос

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

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