@plsHelp11

Pyrogram пересылает группу медиафайлов несколько раз?

При отправке сообщения из n-ого кол-ва медиафайлов, бот присылает n-ое кол-во сообщений (т.е. 2 медиафайла - 2 сообщения)
Отправляю в этот канал медиафайлы 2+ одним сообщением: 64035bd6b48e6633731324.png
Сюда приходит 2 одинаковых сообщения: 64035c064d93c629812004.png

import pyrogram
import config

channels = []
lm = []

with open('channels.txt','r') as f:
	for channel in f.read().split('\n'):
		channels.append(channel)

app = pyrogram.Client('my_account', config.api_id, config.api_hash)

@app.on_message()
def copy_to_my_channel(app, message):
	print(message)
	if str(message.chat.id) in channels:
		if message.media_group_id == None:
			app.copy_message(from_chat_id = message.chat.id, chat_id = config.my_channel, message_id = message.id)
		else:
			if message.media_group_id not in lm:
				app.copy_media_group(from_chat_id = message.chat.id, chat_id = config.my_channel, message_id = message.id)
				
				lm.append(message.media_group_id)
		print('Пост опубликован')

app.run()
  • Вопрос задан
  • 1011 просмотров
Пригласить эксперта
Ответы на вопрос 1
TemaSM
@TemaSM
Fullstack, DevOps, InfSec
Проблема заключается в том, что Pyrogram метод copy_media_group() отправляет каждый медиафайл как отдельное сообщение, что приводит к отправке нескольких сообщений вместо одного с группой медиафайлов.

Для исправления этой проблемы вам нужно использовать метод send_media_group() вместо copy_media_group(). Метод send_media_group() отправляет все медиафайлы в одном сообщении, что дает возможность отправлять группу медиафайлов как единое сообщение.

Ниже приведен исправленный код:
import pyrogram
import config

channels = []
lm = []

with open('channels.txt','r') as f:
  for channel in f.read().split('\n'):
    channels.append(channel)

app = pyrogram.Client('my_account', config.api_id, config.api_hash)

@app.on_message()
def copy_to_my_channel(app, message):
  print(message)
  if str(message.chat.id) in channels:
    if message.media_group_id is None:
      app.copy_message(from_chat_id=message.chat.id, chat_id=config.my_channel, message_id=message.message_id)
    else:
      if message.media_group_id not in lm:
        media_group = app.get_media_group(chat_id=message.chat.id, message_id=message.message_id)
        app.send_media_group(chat_id=config.my_channel, media=media_group)
        lm.append(message.media_group_id)
    print('Пост опубликован')

app.run()

В этом коде мы использовали метод get_media_group() для получения группы медиафайлов из оригинального сообщения, а затем отправили ее в новый канал, используя метод send_media_group().
Ответ написан
Ваш ответ на вопрос

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

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