2
0
mirror of https://github.com/pyrogram/pyrogram synced 2025-08-22 09:57:19 +00:00

Add media spoiler support for other relevant methods

- send_media_group()
- edit_message_media()
- edit_inline_media()
This commit is contained in:
Dan 2022-12-30 15:12:42 +01:00
parent 50d87bf5e9
commit e8bd639634
3 changed files with 91 additions and 67 deletions

View File

@ -16,11 +16,10 @@
# You should have received a copy of the GNU Lesser General Public License
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
import os
import re
import io
import asyncio
import io
import os
import re
import pyrogram
from pyrogram import raw
@ -80,8 +79,6 @@ class EditInlineMedia:
caption = media.caption
parse_mode = media.parse_mode
is_photo = isinstance(media, types.InputMediaPhoto)
is_bytes_io = isinstance(media.media, io.BytesIO)
is_uploaded_file = is_bytes_io or os.path.isfile(media.media)
@ -99,15 +96,16 @@ class EditInlineMedia:
else:
filename_attribute = []
if is_photo:
if isinstance(media, types.InputMediaPhoto):
if is_uploaded_file:
media = raw.types.InputMediaUploadedPhoto(
file=await self.save_file(media.media)
file=await self.save_file(media.media),
spoiler=media.has_spoiler
)
elif is_external_url:
media = raw.types.InputMediaPhotoExternal(
url=media.media
url=media.media,
spoiler=media.has_spoiler
)
else:
media = utils.get_input_media_from_file_id(media.media, FileType.PHOTO)
@ -117,18 +115,20 @@ class EditInlineMedia:
mime_type=(None if is_bytes_io else self.guess_mime_type(media.media)) or "video/mp4",
thumb=await self.save_file(media.thumb),
file=await self.save_file(media.media),
spoiler=media.has_spoiler,
attributes=[
raw.types.DocumentAttributeVideo(
supports_streaming=media.supports_streaming or None,
duration=media.duration,
w=media.width,
h=media.height
)
] + filename_attribute
raw.types.DocumentAttributeVideo(
supports_streaming=media.supports_streaming or None,
duration=media.duration,
w=media.width,
h=media.height
)
] + filename_attribute
)
elif is_external_url:
media = raw.types.InputMediaDocumentExternal(
url=media.media
url=media.media,
spoiler=media.has_spoiler
)
else:
media = utils.get_input_media_from_file_id(media.media, FileType.VIDEO)
@ -139,12 +139,12 @@ class EditInlineMedia:
thumb=await self.save_file(media.thumb),
file=await self.save_file(media.media),
attributes=[
raw.types.DocumentAttributeAudio(
duration=media.duration,
performer=media.performer,
title=media.title
)
] + filename_attribute
raw.types.DocumentAttributeAudio(
duration=media.duration,
performer=media.performer,
title=media.title
)
] + filename_attribute
)
elif is_external_url:
media = raw.types.InputMediaDocumentExternal(
@ -158,20 +158,22 @@ class EditInlineMedia:
mime_type=(None if is_bytes_io else self.guess_mime_type(media.media)) or "video/mp4",
thumb=await self.save_file(media.thumb),
file=await self.save_file(media.media),
spoiler=media.has_spoiler,
attributes=[
raw.types.DocumentAttributeVideo(
supports_streaming=True,
duration=media.duration,
w=media.width,
h=media.height
),
raw.types.DocumentAttributeAnimated()
] + filename_attribute,
raw.types.DocumentAttributeVideo(
supports_streaming=True,
duration=media.duration,
w=media.width,
h=media.height
),
raw.types.DocumentAttributeAnimated()
] + filename_attribute,
nosound_video=True
)
elif is_external_url:
media = raw.types.InputMediaDocumentExternal(
url=media.media
url=media.media,
spoiler=media.has_spoiler
)
else:
media = utils.get_input_media_from_file_id(media.media, FileType.ANIMATION)
@ -196,7 +198,6 @@ class EditInlineMedia:
session = await get_session(self, dc_id)
if is_uploaded_file:
uploaded_media = await self.invoke(
raw.functions.messages.UploadMedia(
@ -210,13 +211,15 @@ class EditInlineMedia:
id=uploaded_media.photo.id,
access_hash=uploaded_media.photo.access_hash,
file_reference=uploaded_media.photo.file_reference
)
) if is_photo else raw.types.InputMediaDocument(
),
spoiler=getattr(media, "has_spoiler", None)
) if isinstance(media, types.InputMediaPhoto) else raw.types.InputMediaDocument(
id=raw.types.InputDocument(
id=uploaded_media.document.id,
access_hash=uploaded_media.document.access_hash,
file_reference=uploaded_media.document.file_reference
)
),
spoiler=getattr(media, "has_spoiler", None)
)
else:
actual_media = media

View File

@ -16,9 +16,9 @@
# You should have received a copy of the GNU Lesser General Public License
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
import io
import os
import re
import io
from typing import Union
import pyrogram
@ -93,36 +93,40 @@ class EditMessageMedia:
if isinstance(media, types.InputMediaPhoto):
if isinstance(media.media, io.BytesIO) or os.path.isfile(media.media):
media = await self.invoke(
uploaded_media = await self.invoke(
raw.functions.messages.UploadMedia(
peer=await self.resolve_peer(chat_id),
media=raw.types.InputMediaUploadedPhoto(
file=await self.save_file(media.media)
file=await self.save_file(media.media),
spoiler=media.has_spoiler
)
)
)
media = raw.types.InputMediaPhoto(
id=raw.types.InputPhoto(
id=media.photo.id,
access_hash=media.photo.access_hash,
file_reference=media.photo.file_reference
)
id=uploaded_media.photo.id,
access_hash=uploaded_media.photo.access_hash,
file_reference=uploaded_media.photo.file_reference
),
spoiler=media.has_spoiler
)
elif re.match("^https?://", media.media):
media = raw.types.InputMediaPhotoExternal(
url=media.media
url=media.media,
spoiler=media.has_spoiler
)
else:
media = utils.get_input_media_from_file_id(media.media, FileType.PHOTO)
elif isinstance(media, types.InputMediaVideo):
if isinstance(media.media, io.BytesIO) or os.path.isfile(media.media):
media = await self.invoke(
uploaded_media = await self.invoke(
raw.functions.messages.UploadMedia(
peer=await self.resolve_peer(chat_id),
media=raw.types.InputMediaUploadedDocument(
mime_type=self.guess_mime_type(media.media) or "video/mp4",
thumb=await self.save_file(media.thumb),
spoiler=media.has_spoiler,
file=await self.save_file(media.media),
attributes=[
raw.types.DocumentAttributeVideo(
@ -141,14 +145,16 @@ class EditMessageMedia:
media = raw.types.InputMediaDocument(
id=raw.types.InputDocument(
id=media.document.id,
access_hash=media.document.access_hash,
file_reference=media.document.file_reference
)
id=uploaded_media.document.id,
access_hash=uploaded_media.document.access_hash,
file_reference=uploaded_media.document.file_reference
),
spoiler=media.has_spoiler
)
elif re.match("^https?://", media.media):
media = raw.types.InputMediaDocumentExternal(
url=media.media
url=media.media,
spoiler=media.has_spoiler
)
else:
media = utils.get_input_media_from_file_id(media.media, FileType.VIDEO)
@ -190,12 +196,13 @@ class EditMessageMedia:
media = utils.get_input_media_from_file_id(media.media, FileType.AUDIO)
elif isinstance(media, types.InputMediaAnimation):
if isinstance(media.media, io.BytesIO) or os.path.isfile(media.media):
media = await self.invoke(
uploaded_media = await self.invoke(
raw.functions.messages.UploadMedia(
peer=await self.resolve_peer(chat_id),
media=raw.types.InputMediaUploadedDocument(
mime_type=self.guess_mime_type(media.media) or "video/mp4",
thumb=await self.save_file(media.thumb),
spoiler=media.has_spoiler,
file=await self.save_file(media.media),
attributes=[
raw.types.DocumentAttributeVideo(
@ -215,14 +222,16 @@ class EditMessageMedia:
media = raw.types.InputMediaDocument(
id=raw.types.InputDocument(
id=media.document.id,
access_hash=media.document.access_hash,
file_reference=media.document.file_reference
)
id=uploaded_media.document.id,
access_hash=uploaded_media.document.access_hash,
file_reference=uploaded_media.document.file_reference
),
spoiler=media.has_spoiler
)
elif re.match("^https?://", media.media):
media = raw.types.InputMediaDocumentExternal(
url=media.media
url=media.media,
spoiler=media.has_spoiler
)
else:
media = utils.get_input_media_from_file_id(media.media, FileType.ANIMATION)

View File

@ -100,7 +100,8 @@ class SendMediaGroup:
raw.functions.messages.UploadMedia(
peer=await self.resolve_peer(chat_id),
media=raw.types.InputMediaUploadedPhoto(
file=await self.save_file(i.media)
file=await self.save_file(i.media),
spoiler=i.has_spoiler
)
)
)
@ -110,14 +111,16 @@ class SendMediaGroup:
id=media.photo.id,
access_hash=media.photo.access_hash,
file_reference=media.photo.file_reference
)
),
spoiler=i.has_spoiler
)
elif re.match("^https?://", i.media):
media = await self.invoke(
raw.functions.messages.UploadMedia(
peer=await self.resolve_peer(chat_id),
media=raw.types.InputMediaPhotoExternal(
url=i.media
url=i.media,
spoiler=i.has_spoiler
)
)
)
@ -127,7 +130,8 @@ class SendMediaGroup:
id=media.photo.id,
access_hash=media.photo.access_hash,
file_reference=media.photo.file_reference
)
),
spoiler=i.has_spoiler
)
else:
media = utils.get_input_media_from_file_id(i.media, FileType.PHOTO)
@ -136,7 +140,8 @@ class SendMediaGroup:
raw.functions.messages.UploadMedia(
peer=await self.resolve_peer(chat_id),
media=raw.types.InputMediaUploadedPhoto(
file=await self.save_file(i.media)
file=await self.save_file(i.media),
spoiler=i.has_spoiler
)
)
)
@ -146,7 +151,8 @@ class SendMediaGroup:
id=media.photo.id,
access_hash=media.photo.access_hash,
file_reference=media.photo.file_reference
)
),
spoiler=i.has_spoiler
)
elif isinstance(i, types.InputMediaVideo):
if isinstance(i.media, str):
@ -157,6 +163,7 @@ class SendMediaGroup:
media=raw.types.InputMediaUploadedDocument(
file=await self.save_file(i.media),
thumb=await self.save_file(i.thumb),
spoiler=i.has_spoiler,
mime_type=self.guess_mime_type(i.media) or "video/mp4",
attributes=[
raw.types.DocumentAttributeVideo(
@ -176,14 +183,16 @@ class SendMediaGroup:
id=media.document.id,
access_hash=media.document.access_hash,
file_reference=media.document.file_reference
)
),
spoiler=i.has_spoiler
)
elif re.match("^https?://", i.media):
media = await self.invoke(
raw.functions.messages.UploadMedia(
peer=await self.resolve_peer(chat_id),
media=raw.types.InputMediaDocumentExternal(
url=i.media
url=i.media,
spoiler=i.has_spoiler
)
)
)
@ -193,7 +202,8 @@ class SendMediaGroup:
id=media.document.id,
access_hash=media.document.access_hash,
file_reference=media.document.file_reference
)
),
spoiler=i.has_spoiler
)
else:
media = utils.get_input_media_from_file_id(i.media, FileType.VIDEO)
@ -204,6 +214,7 @@ class SendMediaGroup:
media=raw.types.InputMediaUploadedDocument(
file=await self.save_file(i.media),
thumb=await self.save_file(i.thumb),
spoiler=i.has_spoiler,
mime_type=self.guess_mime_type(getattr(i.media, "name", "video.mp4")) or "video/mp4",
attributes=[
raw.types.DocumentAttributeVideo(
@ -223,7 +234,8 @@ class SendMediaGroup:
id=media.document.id,
access_hash=media.document.access_hash,
file_reference=media.document.file_reference
)
),
spoiler=i.has_spoiler
)
elif isinstance(i, types.InputMediaAudio):
if isinstance(i.media, str):