Доброго времени суток, коллеги
Недавно начал изучать библиотеку 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);
Это достаточно не удобно, постоянно обращаться к функциям, что бы записать какую-либо информацию.
Другого решения, к сожалению, не нашёл.
Может кто-нибудь знает или сталкивался с такой проблемой, подскажите, как решили её? неужели единственное решение это постоянное обращение к функциям?