Задать вопрос
@twink132

Как вывести сообщение от бота только 1 раз?

Пишу телеграм бота пересылающий сообщения (фото и текстовые) в канал в зависимости от филиала регистрации с аналитикой по обращениям.
Возникла следующая проблема: бот при отправки Media group-ы из-за того, что фото грузятся асинхронно как отдельные сообщения отправляет сообщение столько раз сколько фото отправлено.
Код необходимого модуля:
@bot.message_handler(content_types = ['photo', 'text']) ## обработчик данных фото и текста инициализация
def echo(message): ##функция отправляющая сообщения
    u = mapUser(message.from_user)
    user = fetchUser(u)
    if user == False:
        return
    channel = mrfToChannels[user.MRF] 
    chat_id = channel.channel_chat_id
    if message.text == "/start" or message.text == "/Analytics" or message.text == "/countusers" or message.text == "/deleteme" or message.text == "/Deleteuser":
        bot.send_message(message.chat.id, "<b>ОШИБКА:</b> Отправка <b>команд для бота</b> в канал запрещена.", 
        parse_mode="HTML")
        bot.send_message(message.chat.id, 
        "Попробуйте снова по следующей инструкции:\n1. Введите команду <b>/start</b>, ожидайте сообщение-привествие\n2. Пишите свое обращение, приклепляйте фото по необходимости", 
        parse_mode="HTML")
        return
    elif message.media_group_id:
        bot.send_message(message.chat.id,"<b>ОШИБКА</b> Отправка больше 1-ого изображения в канал <b>ЗАПРЕЩЕНА</b> из-за ограничений API Telegram", parse_mode ='HTML')
        bot.send_message(message.chat.id,
        "Попробуйте снова по следующей инструкции:\n"
        "1. Введите команду <b>/start</b>, ожидайте сообщение-привествие\n"
        "2. Пишите свое обращение, прикрепите фото по необходимости, <b> НО НЕ БОЛЕЕ 1-го</b>\n"
        "3. При наличии дополнительных фото прикрепите оставшиеся в комментарии к посту",
        parse_mode = 'HTML')           
        return



    else: 

        if(message.caption): 
            caption = message.caption + "\n\nЗапрос от монтера - #" + u.fullname().replace(" ", "_")
        else:
            caption = "\n\nЗапрос от монтера - #" + u.fullname().replace(" ", "_")

        if message.content_type == 'photo': 
            photo_id = message.photo[-1].file_id
            sendedMessage = bot.send_photo(chat_id, photo_id, caption)
        elif message.content_type == 'text':
            sendedMessage = bot.send_message(chat_id, text=message.text + "\n\nЗапрос от монтера - #" + u.fullname().replace(" ", "_"))

    
    bot.send_message(message.chat.id, f"Для перехода в канал обращения перейдите по ссылке {channel.channel_link}")
    bot.send_message(message.chat.id, "Для создания нового обращения введите команду /start")
    save_bot_repost_info(message, sendedMessage)

Пробовал следующим образом:
mediagroup = []
            if message.media_group_id in mediagroup:
                return
            else:
                mediagroup.insert(message.media_group_id)
                bot.send_message(message.chat.id,
                "<b>ОШИБКА:</b> Отправка <u>больше 1 изображения</u> в канал запрещена из-за ограничений API Telegram",parse_mode = 'HTML')
                bot.send_message(message.chat.id,
                "Попробуйте снова по следующей инструкции:\n1. Введите команду <b>/start</b>, ожидайте сообщение привествие\n"
                "2. Пишите свое обращение, приклепляйте фото по необходимости (<b>!!!НО НЕ БОЛЕЕ 1-ой!!!</b>)\n"
                "3. При наличии дополнительных фото прикрепите оставшиеся в коментариях к посту",parse_mode = 'HTML')
                return

но сообщение так-же дублируется в зависимости от количества фото.
В массив при этом вставляется два раза одинаковый message.media_group_id
Необходимо сделать, чтобы бот отправлял не больше 1 фото с подписью, а при попытки отправить больше 1-ой фото выводил аллерт-сообщение (ровно 1 раз)и выходил из функции.
  • Вопрос задан
  • 231 просмотр
Подписаться 2 Простой 3 комментария
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы