Проблема с обработкой типов в PyTelegramBotAPI

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

Мне нужно, чтоб бот мог отвечать на команду "all" если в сообщении будет присутствовать картинка, видео, файл и т.д. Если сказать вкратце, то бот должен ответить, вне зависимости, сколько и какой будет тип в сообщении.
Сначала я добавил декоратор для каждого типа, но при тестировании заметил, если пользователь отправил картинку и видео, то будет завершаться ошибкой. И так со всеми комбинациями типов в сообщении.

import telebot

TOKEN = "YOUtokenID"
bot = telebot.TeleBot(TOKEN)

@bot.message_handler(content_types=['text'], func=lambda message: "/all" in message.text.split())
#@bot.message_handler(content_types=['photo'], func=lambda message: "/all" in message.caption.split())
#@bot.message_handler(content_types=['video'], func=lambda message: "/all" in message.caption.split())
#@bot.message_handler(content_types=['voice'], func=lambda message: "/all" in message.caption.split())
#@bot.message_handler(content_types=['document'], func=lambda message: "/all" in message.caption.split())
def all_users(message):
    if message.chat.type != "group" and message.chat.type != "supergroup":
        return
    chat_id = message.chat.id
    members = bot.get_chat_administrators(chat_id)
    usernames = ""
    for member in members:
        user = member.user
        if user.id != bot.get_me().id:
            usernames += "@" + user.username + " "
    bot.reply_to(message, "Nickname: " + usernames)


bot.polling()  

Ответы

▲ 0Принят

В параметр content_types передается список любой длины. Поэтому просто перечислите все типы в одном декораторе, а внутри функции пихайте проверку на типы.

Читайте документацию: https://pytba.readthedocs.io/ru/latest/sync_version/index.html#telebot.TeleBot.message_handler

Там ясно написано content_types: List[str]