@perchyyy

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

Главная функция бота - просмотр аниме (оно уже загружено на сервера тг). Я хочу сделать функцию поиска аниме. В коде под #список аниме у меня перечислены названия самих аниме в reply-кнопках, а ниже уже идут аниме со списком сезонов через callback-кнопки. Я хочу, чтобы, когда человек вводил часть названия аниме или полностью, бот присылал ему конкретное аниме или список аниме с похожим названием. Сам не разбираюсь в программировании, а в интернете не нашёл. Пожалуйста помогите. В пример можно взять другого бота (https://t.me/anilibria_bot). В нём поиск реализован так, как в моих фантазиях. Приложу нужную часть кода, т.к. он уже 1000+ строк
import telebot
import random
import os
from telebot import types
bot = telebot.TeleBot('мой токен')

#две кнопки при запуске бота(главное меню) + приветствие
@bot.message_handler(commands=['start'])
def start_message(message):
  markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
  btn1 = types.KeyboardButton("Аниме")
  btn2 = types.KeyboardButton('Как дела?')
  btn3 = types.KeyboardButton('Случайный арт')
  btn4 = types.KeyboardButton('Нажми на меня')
  markup.add(btn1, btn3)
  markup.add(btn2, btn4)
  bot.send_message(message.chat.id, "Привет")
  bot.send_message(message.chat.id, 'Ты зашёл в бота ANIME UTOPIA')
  bot.send_message(message.chat.id, 'Я - лучший сервис для просмотра аниме\nКстати, здесь ты можешь скачать любую серию', reply_markup=markup)

@bot.message_handler(content_types=['text', 'document', 'file', 'video', 'photo'])
def get_text_message(message):

#порадоваться за бота
  if message.text == 'Как дела?':
    bot.send_message(message.chat.id, 'Прекрасно, ведь меня написал perchyyy')
#главное меню
  elif message.text == 'Главное меню':
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    btn1 = types.KeyboardButton('Аниме')
    btn2 = types.KeyboardButton('Как дела?')
    btn3 = types.KeyboardButton('Случайный арт')
    btn4 = types.KeyboardButton('Нажми на меня')
    markup.add(btn1, btn3)
    markup.add(btn2, btn4)
    bot.send_message(message.chat.id, 'Вы вернулись в главное меню', reply_markup=markup)
#Список аниме
  elif message.text == 'Аниме':
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    btn1 = types.KeyboardButton('Атака титанов')
    btn3 = types.KeyboardButton('Главное меню')
    btn4 = types.KeyboardButton('Безумный азарт')
    btn5 = types.KeyboardButton('Дневник будущего')
    btn6 = types.KeyboardButton('Re:Zero')
    btn2 = types.KeyboardButton('Дороро')
    btn7 = types.KeyboardButton('Звёздное дитя')
    btn8 = types.KeyboardButton('Синяя тюрьма: Блю Лок')
    btn9 = types.KeyboardButton('Убийца Акамэ!')
    btn10 = types.KeyboardButton('Человек-бензопила')
    markup.row(btn6)
    markup.add(btn1, btn4, btn5)
    markup.row(btn2, btn7, btn8)
    markup.row(btn9, btn10)
    markup.row(btn3)
    bot.send_message(message.chat.id, 'Какое аниме хочешь посмотреть?', reply_markup = markup)
#Случайный арт
  elif message.text == 'Случайный арт':
    dir_path = 'E:\\tg pics\\2. каша'
    files = os.listdir(dir_path)
    rand_file = random.choice(files)
    full_path = os.path.join(dir_path, rand_file)
    with open(full_path, 'rb') as f:
      bot.send_photo(message.chat.id, f)

#Атака титанов
  elif message.text == 'Атака титанов':
    markup = types.InlineKeyboardMarkup(row_width=1)
    btn1 = types.InlineKeyboardButton(text='1 Сезон', callback_data='AoT1')
    btn2 = types.InlineKeyboardButton(text='2 Сезон', callback_data='AoT2')
    btn3 = types.InlineKeyboardButton(text='3 Сезон', callback_data='AoT3')
    btn4 = types.InlineKeyboardButton(text='4 Сезон', callback_data='AoT4')
    btn5 = types.InlineKeyboardButton(text='Финал', callback_data='AoT5')
    markup.row(btn1, btn2, btn3, btn4)
    markup.row(btn5)
    img = open('E:\\tg pics\\3. постеры\\Атака титанов.jpg', 'rb')
    bot.send_photo(message.chat.id, img, '➖➖➖ \nАтака титанов \nAttack on titan \n➖➖➖ \nОзвучка - StudioBand', reply_markup=markup)
#Безумный азарт
  elif message.text == 'Безумный азарт':
    markup = types.InlineKeyboardMarkup(row_width=1)
    btn1 = types.InlineKeyboardButton(text='1 Сезон', callback_data='1Azart')
    btn2 = types.InlineKeyboardButton(text='2 Сезон', callback_data='2Azart')
    markup.row(btn1, btn2)
    img = open('E:\\tg pics\\3. постеры\\Безумый азарт.jpg', 'rb')
    bot.send_photo(message.chat.id, img, '➖➖➖ \nБезумный азарт \nKakegurui \n➖➖➖ \nОзвучка - AniDUB', reply_markup=markup)
#Дневник будущего
  elif message.text == 'Дневник будущего':
    markup = types.InlineKeyboardMarkup(row_width=1)
    btn1 = types.InlineKeyboardButton(text='1 Сезон', callback_data='FutureDiary')
    markup.row(btn1)
    img = open('E:\\tg pics\\3. постеры\\Дневник будущего.jpg', 'rb')
    bot.send_photo(message.chat.id, img, '➖➖➖ \nДневник будущего \nThe Future Diary \n➖➖➖ \nОзвучка - AniDUB', reply_markup=markup)
#Re:Zero
  elif message.text == 'Re:Zero':
    markup = types.InlineKeyboardMarkup(row_width=1)
    btn1 = types.InlineKeyboardButton(text='1 Сезон', callback_data='1Re:Zero')
    btn2 = types.InlineKeyboardButton(text='2 Сезон', callback_data='2Re:Zero')
    markup.row(btn1, btn2)
    img = open('E:\\tg pics\\3. постеры\\ReZero.jpg', 'rb')
    bot.send_photo(message.chat.id, img, '➖➖➖ \nRe:Zero. Жизнь с нуля в альтернативном мире \nRe:Zero kara Hajimeru Isekai Seikatsu \n➖➖➖ \nОзвучка - AniDUB', reply_markup=markup)
#Дороро
  elif message.text == 'Дороро':
    markup = types.InlineKeyboardMarkup(row_width=1)
    btn1 = types.InlineKeyboardButton(text='1 Сезон', callback_data='Dororo')
    markup.row(btn1)
    img = open('E:\\tg pics\\3. постеры\\Дороро.jpg', 'rb')
    bot.send_photo(message.chat.id, img, '➖➖➖ \nДороро \nDororo \n➖➖➖ \nОзвучка - AniLibria', reply_markup=markup)
#Звёздное дитя
  elif message.text == 'Звёздное дитя':
    markup = types.InlineKeyboardMarkup(row_width=1)
    btn1 = types.InlineKeyboardButton(text='1 Сезон', callback_data='OshinoKo')
    markup.row(btn1)
    img = open('E:\\tg pics\\3. постеры\\Звёздное дитя.jpg', 'rb')
    bot.send_photo(message.chat.id, img, '➖➖➖ \nЗвёздное дитя \nOshi no Ko \n➖➖➖ \nОзвучка - AniLibria', reply_markup=markup)
#Синяя тюрьма: Блю Лок
  elif message.text == 'Синяя тюрьма: Блю Лок':
    markup = types.InlineKeyboardMarkup(row_width=1)
    btn1 = types.InlineKeyboardButton(text='1 Сезон', callback_data='BlueLock')
    markup.row(btn1)
    img = open('E:\\tg pics\\3. постеры\\Синяя тюрьма.jpg', 'rb')
    bot.send_photo(message.chat.id, img, '➖➖➖ \nСиняя тюрьма: Блю Лок \nBlue Lock \n➖➖➖ \nОзвучка - AniLibria', reply_markup=markup)
#Убийца Акамэ
  elif message.text == 'Убийца Акамэ!':
    markup = types.InlineKeyboardMarkup(row_width=1)
    btn1 = types.InlineKeyboardButton(text='1 Сезон', callback_data='AkameGaKill')
    markup.row(btn1)
    img = open('E:\\tg pics\\3. постеры\\Убийца Акамэ.jpg', 'rb')
    bot.send_photo(message.chat.id, img, '➖➖➖ \nУбийца Акамэ! \nAkame Ga Kill!! \n➖➖➖ \nОзвучка - AniDUB', reply_markup=markup)
#Человек-бензопила
  elif message.text == 'Человек-бензопила':
    markup = types.InlineKeyboardMarkup(row_width=1)
    btn1 = types.InlineKeyboardButton(text='1 Сезон', callback_data='1ChainsawMan')
    markup.row(btn1)
    img = open('E:\\tg pics\\3. постеры\\Человек-бензопила.jpg', 'rb')
    bot.send_photo(message.chat.id, img, '➖➖➖ \nЧеловек-бензопила! \nChainsaw Man!! \n➖➖➖ \nОзвучка - AniLibria', reply_markup=markup)

  else:
    bot.send_message(message.chat.id, 'Прости, я не умею общаться не заложенными в меня командами')
  • Вопрос задан
  • 100 просмотров
Пригласить эксперта
Ответы на вопрос 2
Dr_Elvis
@Dr_Elvis
В гугле забанен
Сам не разбираюсь в программировании

Так разберитесь
Ответ написан
Vindicar
@Vindicar
RTFM!
Вместо того, чтобы хардкодить названия, сделай какую-то коллекцию с ними. Не обязательно БД, хотя бы текстовый файл, который читается в список. Тогда можно будет перебирать элементы списка и при создании кнопок, и при поиске.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы