Задать вопрос
@ArmBoy28
фотограф, студент информационной безопасности

Как сделать в телеграм боте регистрацию без register_next_step_handler?

Доброго времени суток, коллеги
Недавно начал изучать библиотеку pyTeleBot и надумал сделать бота для знакомств (да, кто-то скажет "сначала научись, а потом что-то такое делай", но мне быстрее удается изучать какой-либо материал именно на такой практике)

Всё хорошо, бот работает, отвечает на кнопки, на команды. Решил сделать регистрацию пользователя, но столкнулся с некой проблемой. Код бота разделен на 4 файла ""main.py, "functions.py" ,"database.py", "config.py".

Сделал так для своего же удобства в составлении алгоритмов, простоты и читабельности.

Покажу кусочек кода из main.py и functions.py

main.py
@bot.callback_query_handler(func=lambda call: True)
def appelation(call):
	if call.data == "lets_go":
		bot.send_message(call.message.chat.id, "Как вас зовут?")
		bot.register_next_step_handler(call.message, functions_bot.registration)


functions.py
def registration(message):
	bot.send_message(message.from_user.id, "Хорошо, как вас зовут?")
	name = bot.register_next_step_handler(message)
	
	bot.send_message(message.from_user.id, "Сколько вам лет?")
	age = bot.register_next_step_handler(int(message))
	
	bot.send_message(message.from_user.id, "Из какого вы города?")
	city = bot.register_next_step_handler(message)
	
	bot.send_message(message.from_user.id, "Кто вы?", reply_markup = gender_but)
	gender = bot.register_next_step_handler(message)
	
	bot.send_message(message.from_user.id, "Кого вы ищете?", reply_markup = sgender_but)
	sgender = bot.register_next_step_handler(message)
	
	bot.send_message(message.from_user.id, "Расскажите что-нибудь о себе")
	about = bot.register_next_step_handler(message)
	try:
		cursor.execute("INSERT INTO Users (id, name, age, city, about, gender, sgender) VALUES ( ? , ? , ? , ? , ? , ? , ? )", (message.from_user.id, name, age, city, about, gender, sgender))
		cursor.execute("COMMIT")

	except Exception:
		cursor.execute("ROLLBACK")
		traceback.print_exc()


Ошибка в
... = bot.register_next_step_handler(message)

Текст ошибки
name = bot.register_next_step_handler(message)
TypeError: TeleBot.register_next_step_handler() missing 1 required positional argument: 'callback'


Я уже понял, что register_next_step_handler() тут не нужен, поискал в интернете информацию, но единственное решение, которое я нашел это постоянно использовать функции, тобишь так:

@bot.message_handler(content_types=['text'])
def start(message):
    if message.text == '/reg':
        bot.send_message(message.from_user.id, "Как тебя зовут?");
        bot.register_next_step_handler(message, get_name); #следующий шаг – функция get_name
    else:
        bot.send_message(message.from_user.id, 'Напиши /reg');

def get_name(message): #получаем фамилию
    global name;
    name = message.text;
    bot.send_message(message.from_user.id, 'Какая у тебя фамилия?');
    bot.register_next_step_handler(message, get_surnme);

def get_surname(message):
    global surname;
    surname = message.text;
    bot.send_message('Сколько тебе лет?');
    bot.register_next_step_handler(message, get_age);


Это достаточно не удобно, постоянно обращаться к функциям, что бы записать какую-либо информацию.
Другого решения, к сожалению, не нашёл.
Может кто-нибудь знает или сталкивался с такой проблемой, подскажите, как решили её? неужели единственное решение это постоянное обращение к функциям?
  • Вопрос задан
  • 67 просмотров
Подписаться 1 Простой 3 комментария
Пригласить эксперта
Ваш ответ на вопрос

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

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