Ожидание ввода пользователя с присвоением введённого переменной

import telebot
from telebot import types
from telebot.types import ReplyKeyboardMarkup
from youtubesearchpython import Search

bot = telebot.TeleBot('Your_Token')
@bot.message_handler(commands=['start'])
def Startbot(message):# Название функции не играет никакой роли, в принципе
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    button1 = types.KeyboardButton('Запуск')
    button2 = types.KeyboardButton('Поиск техники')
    markup.add(button1,button2)
    bot.send_message(message.chat.id, "Привет {}  {}! С помощь меня ты сможешь быстро и лекго найти нужную тебе технику айкидо".format(message.chat.first_name,message.chat.last_name),reply_markup=markup)


@bot.message_handler(content_types=['text'])
def search(message):
    allSearch = Search(message, limit=1)
    allSearch = allSearch.result()
    allSearch = str(allSearch['result'])
    allSearch = allSearch.split(', ')
    allSearch = allSearch[-2]
    allSearch = allSearch.split()
    allSearch = allSearch[-1][1:-1]
    bot.send_message(message.chat.id, allSearch)

def start(message):
    markup: ReplyKeyboardMarkup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    button1 = types.KeyboardButton('Запуск')
    button2 = types.KeyboardButton('Поиск техники')
    markup.add(button1, button2)
    if message.chat.type == 'private':
        if message.text == 'Поиск техники':
            search()
bot.polling(none_stop=True)


Ответы (1 шт):

Автор решения: Violet

В Вашем коде функция search будет выполнятся при отправке боту любого сообщения, т.к. указан обработчик с типом text.

@bot.message_handler(commands=['start'])
def start(message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    button1 = types.KeyboardButton('Запуск')
    button2 = types.KeyboardButton('Поиск техники')
    markup.add(button1, button2)
    bot.send_message(message.chat.id,
                     "Привет {}  {}! С помощь меня ты сможешь быстро и лекго найти нужную тебе технику айкидо".format(
                         message.chat.first_name, message.chat.last_name), reply_markup=markup)


# функция some будет выполнятся при отправке боту любого сообщения, т.к. указан обработчик с типом text, if message.text важен
@bot.message_handler(content_types=['text'])
def some(message):
    if message.chat.type == 'private':
        if message.text == 'Поиск техники':
            msg = bot.send_message(message.chat.id, 'Что будем искать?')
            bot.register_next_step_handler(msg, some_1)


def some_1(message):
    print(f'на предыдущем шаге введено {message.text}')
    bot.send_message(message.chat.id, Search(message.text, limit=1).result()['result'][0]['link'])

Если я всё правильно понял, то нужно отправлять пользователю ссылку на видео исходя из того что он введёт.

В приведённом примере:

  • в ответ на /start бот пришлёт Reply кнопки: Запуск и Поиск техники
  • нажатие на Поиск техники запустит ожидание ввода от пользователя (bot.register_next_step_handler)
  • после получения сообщения от пользователя выполнится функция Search (from youtubesearchpython import Search)
  • после выполнения пользователю отправится ссылка на видео
→ Ссылка