Проблема при переходе из одного состояния в другое telebot

Всем привет! Начал писать телеграмм-бота для записи клиентов, использую SQLite3. Прописал добавление человека в базу данных, но не могу понять, почему после ввода имени все ломается и дальше не идет... Код бота прилагается

import sqlite3
import telebot
from telebot import types


bot = telebot.TeleBot("Token")

conn = sqlite3.connect('db.sqlite3', check_same_thread=False)
cursor = conn.cursor()
cursor.execute('''CREATE TABLE IF NOT EXISTS students (
               id INTEGER PRIMARY KEY,
               user_id INTEGER NOT NULL UNIQUE,
               username TEXT NOT NULL UNIQUE,
               name TEXT)''')


def db_table_val(
        user_id: int, username: str, name: str, message: int):
    try:
        cursor.execute(
            '''INSERT INTO students (
                user_id, username, name) VALUES (
                    ?, ?, ?)''', (user_id, username, name)
        )
        conn.commit()
        bot.send_message(
            message.chat.id,
            text='Вас добавили в базу данных!'
        )

    except sqlite3.IntegrityError:
        bot.send_message(
            message.chat.id,
            text='Вы уже есть в базе данных!'
        )


@bot.message_handler(commands=['start'])
def start_message(message):
    bot.send_message(
        message.chat.id, 'Добро пожаловать. Введите ваше имя'
    )


@bot.message_handler(content_types=['text'])
def get_text_messages(msg):
    us_id = msg.from_user.id
    username = msg.from_user.username
    name = msg.text

    bot.register_next_step_handler(
        name, change_time
    )

    db_table_val(
        user_id=us_id,
        username=username,
        message=msg,
        name=name,
    )


@bot.message_handler(content_types=['text'])
def change_time(message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    monday = types.KeyboardButton('Понедельник')
    tuesday = types.KeyboardButton('Вторник')
    wednesday = types.KeyboardButton('Среда')
    thursday = types.KeyboardButton('Четверг')
    friday = types.KeyboardButton('Пятница')
    saturday = types.KeyboardButton('Суббота')
    sunday = types.KeyboardButton('Воскресенье')
    markup.add(
        monday, tuesday, wednesday, thursday, friday, saturday, sunday
    )
    if message.text == 'Вы уже есть в базе данных!' or (
        message.text == 'Вас добавили в базу данных!'
    ):
        bot.send_message(
            message.chat.id,
            text='Выберите день для занятий',
            reply_markup=markup
        )


if __name__ == '__main__':
    while True:
        try:
            bot.polling(none_stop=True)
        except Exception:
            print('Словили исключение')

Ответы (1 шт):

Автор решения: Ben Puls

В функции get_text_messages у вас ошибка.

    bot.register_next_step_handler(
        name, change_time
    )

Ошибка заключается в том, что вы передаёте имя в register_nex_step_handler, а должны передавать параметр msg, который объявляется в функции. То есть полная запись будет выглядеть так.

import sqlite3
import telebot
from telebot import types


bot = telebot.TeleBot("Token")

conn = sqlite3.connect('db.sqlite3', check_same_thread=False)
cursor = conn.cursor()
cursor.execute('''CREATE TABLE IF NOT EXISTS students (
               id INTEGER PRIMARY KEY,
               user_id INTEGER NOT NULL UNIQUE,
               username TEXT NOT NULL UNIQUE,
               name TEXT)''')


def db_table_val(
        user_id: int, username: str, name: str, message: int):
    try:
        cursor.execute(
            '''INSERT INTO students (
                user_id, username, name) VALUES (
                    ?, ?, ?)''', (user_id, username, name)
        )
        conn.commit()
        bot.send_message(
            message.chat.id,
            text='Вас добавили в базу данных!'
        )

    except sqlite3.IntegrityError:
        bot.send_message(
            message.chat.id,
            text='Вы уже есть в базе данных!'
        )


@bot.message_handler(commands=['start'])
def start_message(message):
    bot.send_message(
        message.chat.id, 'Добро пожаловать. Введите ваше имя'
    )


@bot.message_handler(content_types=['text'])
def get_text_messages(msg):
    us_id = msg.from_user.id
    username = msg.from_user.username
    name = msg.text

    bot.register_next_step_handler(
        msg, change_time
    )

    db_table_val(
        user_id=us_id,
        username=username,
        message=msg,
        name=name,
    )


@bot.message_handler(content_types=['text'])
def change_time(message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    monday = types.KeyboardButton('Понедельник')
    tuesday = types.KeyboardButton('Вторник')
    wednesday = types.KeyboardButton('Среда')
    thursday = types.KeyboardButton('Четверг')
    friday = types.KeyboardButton('Пятница')
    saturday = types.KeyboardButton('Суббота')
    sunday = types.KeyboardButton('Воскресенье')
    markup.add(
        monday, tuesday, wednesday, thursday, friday, saturday, sunday
    )
    if message.text == 'Вы уже есть в базе данных!' or (
        message.text == 'Вас добавили в базу данных!'
    ):
        bot.send_message(
            message.chat.id,
            text='Выберите день для занятий',
            reply_markup=markup
        )


if __name__ == '__main__':
    while True:
            try:
                bot.polling(none_stop=True)
            except Exception:
                print('Словили исключение')
→ Ссылка