Проблема при переходе из одного состояния в другое 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('Словили исключение')