Нужно скорректировать правильно код телеграмм бота на пайтоне
Нужно что бы функции выполнялись последовательно, а у меня после получения фамилии, постоянно выводится /reg
import telebot
name = '';
surname = '';
bot = telebot.TeleBot("1119574263:AAEAj7XVzpHLVHPNnLs_9TrHvITraba9PnY")
keyboard1 = telebot.types.ReplyKeyboardMarkup(True)
keyboard1.row('Заказать стикеры', 'Связаться со мной')
@bot.message_handler(content_types=['text'])
def start(message):
if message.text == '/reg':
bot.send_message(message.from_user.id, "Как тебя зовут?", reply_markup=keyboard1);
bot.register_next_step_handler(message, get_name); #получаем имя
else:
bot.send_message(message.from_user.id, 'Напиши /reg');
def get_surname(message):
surname = message.text
bot.register_next_step_handler(message, send_text);
def get_name(message): #получаем фамилию
global name;
name = message.text;
bot.send_message(message.from_user.id, 'Какая у тебя фамилия? После нажмите заказать стикеры.');
bot.register_next_step_handler(message, get_surname);
@bot.message_handler(content_types=['text'])
def send_text(message):
if message.text == 'Заказать стикеры': #далее пользователь нажимает на кнопку заказать стикеры и выводится это
bot.send_message(message.chat.id, ' Для заказа введите ваши данные (Имя Фамилия, Телефонный номер, Адрес)')
elif message.text == 'Связаться со мной':
bot.send_message(message.chat.id, 'https://api.whatsapp.com/send?phone=77086836315')
@bot.message_handler(content_types=['photo'])
def send_photo(message): #и в самом конце бот переотправляет мне отправленную фотографию
bot.forward_message(474551257, message.chat.id, message.message_id)
bot.polling()
Ответы (1 шт):
Автор решения: usrsem
→ Ссылка
Сделай отдельно обработчики команд
@bot.message_handler(commands=['start', 'help'])
def start(message):
bot.send_message(message.from_user.id, "Введи /reg для регистрауии")
@bot.message_handler(commands=['reg'])
def reg(message):
bot.send_message(message.from_user.id, "Как тебя зовут?")
bot.register_next_step_handler(message, get_name)
Также советую использовать инлайн клавиатуру. Это и удобнее и есть обработчик отдельный.
К каждой кнопке клавиатуры добавляешь значение callback_data.
Потом просто обрабатываешь значения и текст.
У тебя не будет винегрета с текстом от юзера
key.add(item_i0, item_i1)
@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
if call.message:
if call.data == 'order'
и тут уже можешь текст обрабатывать
Вот здесь про клаву почитать можешь: https://core.telegram.org/bots/api#inlinekeyboardmarkup
И еще, зарегай нового бота, ты засветил токен, сейчас кто угодно может данные получить.