Пишу телеграм бота пересылающий сообщения (фото и текстовые) в канал в зависимости от филиала регистрации с аналитикой по обращениям.
Возникла следующая проблема: бот при отправки 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 раз)и выходил из функции.