Сделал бота который опрашивает пользователя и сохраняет полученные данные в бд.
если пройти опрос один раз, все срабатывает хорошо. Ноооо если пройти второй раз, в середине просто крашится. Не могу понять причины. Думаю что это связанно с способом сохранения данных.
так же почему то поле 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)```