Python Telebot (PyTelegramBotAPI)
'''Я начинающий'''
Хочу написать бота для анкет (приятная версия гугл формы - идейно).
Есть более или менее работающий код, однако, он считывает данные телеграмм аккаунта (имя, фамилия).
В чем нужна помощь: Как научить его принимать введенное имя, и уже после запускать часть с выбором из меню?
На данный момент, после ввода имени выходит сообщение "Рад знакомству с тобой (введенное имя)". Затем выходит меню, но после выбора пункта бот присылает : "Рад знакомству с тобой (опросник/помощь/итд)". Буду искренне рад любой помощи и подсказкам в целом по изучению написания ботов, спасибо!
from telebot import types
bot = telebot.TeleBot('токен')
@bot.message_handler(commands=['start'])
def start(message):
send_mess = f"<b>Привет, я твой личный помощник</b>!\n What's your name?"
bot.send_message(message.chat.id, send_mess, parse_mode='html')
@bot.message_handler(content_types=['text'])
def get_text_messages(message):
grt = 'Рад знакомству с тобой'
bot.send_message(message.chat.id, grt + ' ' + message.text)
@bot.message_handler(content_types=['text'])
def mess(message):
markup = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=3)
btn1 = types.KeyboardButton('Опросники')
btn2 = types.KeyboardButton('Помощь')
btn3 = types.KeyboardButton('Плюшки')
btn4 = types.KeyboardButton('Фидбек')
btn5 = types.KeyboardButton('FAQ')
markup.add(btn1, btn2, btn3, btn4, btn5)
send_mess = f"<b>Выбери подходящий вариант</b>"
bot.send_message(message.chat.id, send_mess, parse_mode='html', reply_markup=markup)
@bot.message_handler(content_types=['text'])
def mess(message):
get_message_bot = message.text.strip().lower()
if get_message_bot == "начать тест заново":
markup = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=3)
btn1 = types.KeyboardButton('Опросники')
btn2 = types.KeyboardButton('Помощь')
btn3 = types.KeyboardButton('Плюшки')
btn4 = types.KeyboardButton('Фидбек')
btn5 = types.KeyboardButton('FAQ')
markup.add(btn1, btn2, btn3, btn4, btn5)
final_message = "Решил попробовать что-то ещё? \nВыбери какое направление тебя интересует:"
elif get_message_bot == "опросники":
markup = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=3)
btn1 = types.KeyboardButton('1')
btn2 = types.KeyboardButton('2')
markup.add(btn1, btn2)
final_message = "текст"
else:
markup = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=3)
btn1 = types.KeyboardButton('Опросники')
btn2 = types.KeyboardButton('Помощь')
btn3 = types.KeyboardButton('Плюшки')
btn4 = types.KeyboardButton('Фидбек')
btn5 = types.KeyboardButton('FAQ')
markup.add(btn1, btn2, btn3, btn4, btn5)
final_message = "Так, так, так\nПостой, лучше нажми на одну из интерактивных кнопок ниже"
bot.send_message(message.chat.id, final_message, parse_mode='html', reply_markup=markup)
bot.polling(none_stop=True)
Ответы (2 шт):
Автор решения: arnold
→ Ссылка
Я бы немного переделал ваш код, таким образом:
import telebot
from telebot import types
bot = telebot.TeleBot('1780012919:AAHPhWajy-Vi7MvQN51RLagd5cXn9QQMD1M')
markup = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=3)
btn1 = types.KeyboardButton('Опросники')
btn2 = types.KeyboardButton('Помощь')
btn3 = types.KeyboardButton('Плюшки')
btn4 = types.KeyboardButton('Фидбек')
btn5 = types.KeyboardButton('FAQ')
markup.add(btn1, btn2, btn3, btn4, btn5)
markup2 = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=3)
btn1 = types.KeyboardButton('1')
btn2 = types.KeyboardButton('2')
markup2.add(btn1, btn2)
@bot.message_handler(commands=['start'])
def start(message):
username = message.from_user.username
bot.send_message(message.chat.id, "Let`s start!", reply_markup=markup)
send_mess = f"Привет, {username}! Я твой личный помощник!"
bot.send_message(message.chat.id, send_mess, reply_markup=markup)
def mess(message):
send_mess = "Выбери подходящий вариант"
bot.send_message(message.chat.id, send_mess, reply_markup=markup)
@bot.message_handler(func=lambda message: message.text =='начать тест заново')
def foo(message):
final_message = "Решил попробовать что-то ещё? \nВыбери какое направление тебя интересует:"
bot.send_message(message.chat.id, final_message, reply_markup=markup)
@bot.message_handler(func=lambda message: message.text =="Опросники")
def foo(message):
final_message = "текст"
bot.send_message(message.chat.id, final_message, parse_mode='html', reply_markup=markup2)
bot.polling(none_stop=True)
Автор решения: Am.Per
→ Ссылка
Предлагаю так:
import telebot
from telebot import types
bot = telebot.TeleBot('TOKEN')
btn = ['Опросники', 'Помощь', 'Плюшки', 'Фидбек', 'FAQ']
btn_list = [types.KeyboardButton(text=x) for x in btn]
name = ''
answer_list = [1, 2, 3]
@bot.message_handler(commands=['start'])
def start(message):
bot.send_message(message.chat.id, "Let`s start!")
send_mess = bot.send_message(message.chat.id, 'Введите имя:')
bot.register_next_step_handler(send_mess, name)
def name(message):
global name
button = types.ReplyKeyboardMarkup(resize_keyboard=True)
button.add(*btn_list)
name = message.text
send_mess = bot.send_message(message.chat.id, f'Привет {name}\nВыбери раздел:', reply_markup=button)
bot.register_next_step_handler(send_mess, cat)
def cat(message):
if message.text in btn:
bot.send_message(message.chat.id, 'Я понял')
else:
send_mess = bot.send_message(message.chat.id, 'Я не понял')
bot.register_next_step_handler(send_mess, cat)
bot.polling(none_stop=True)