Kак остановить handler после выполнения, чтобы команда отрабатывала только 1 раз, telebot?

Рейтинг: 1Ответов: 0Опубликовано: 17.02.2023

Пытаюсь написать бот для чата друзей:

  • при команде /gif в чат прилетает рандомная гифка из коллекции
  • при команде /gif_add в коллекцию можно добавить новую гифку

Проблема в том, что файл, который присылают в чат, даже без команды "gif_add" все равно отрабатывается ботом и загружает его в коллекцию. Как сделать так, чтобы возможность загрузить гифку появлялась исключительно после команды "gif_add", а все остальное время бот не слушал чат, пока его не вызовут той или иной командой?
И еще один вопрос.
Можно ли сделать так, чтобы пользователь мог посмотреть, какие гифки уже есть в коллекции? Спасибо!

import os, random, os.path
import telebot

bot = telebot.TeleBot('apikey')



@bot.message_handler(commands=['start'])
def start(message):
    bot.send_message(message.chat.id, "Привет! Я могу присылать гифку!"
                                      "для того, чтобы отправить в чат гифку дня напиши /gif"
                                      "Не забывай пополнять коллекцию с помощью команды /аdd_gif")


@bot.message_handler(commands=["gif"])
def add_user_handler(message):
    bot.send_message(message.chat.id, "Гифка дня!")
    gif = open('gif/' + random.choice(os.listdir('gif')), 'rb')
    bot.send_animation(message.chat.id, gif)


@bot.message_handler(commands=["add_gif"])
def add_user_handler(message):
    msg = bot.send_message(message.chat.id, f'@{message.from_user.username}, кидай гифку!')
    bot.register_next_step_handler(msg, handle_file)

@bot.message_handler(func=lambda message: True, content_types=['animation'])
def handle_file(message):
    try:
        chat_id = message.chat.id
        file_info = bot.get_file(message.animation.file_id)
        downloaded_file = bot.download_file(file_info.file_path)
        src = './gif/' + message.animation.file_name;
        with open(src, 'wb') as new_file:
            new_file.write(downloaded_file)
        DIR = './gif/'
        gif_num = len([name for name in os.listdir(DIR) if os.path.isfile(os.path.join(DIR, name))])
        bot.reply_to(message, f"Спасибо! Гифка получена! Теперь в коллекции {gif_num} gif!!!")
        bot.polling.abort = True
    except Exception as e:
        bot.reply_to(message, e)


bot.infinity_polling()

Ответы

Ответов пока нет.