mirror of
https://github.com/aiogram/aiogram.git
synced 2026-04-08 16:37:47 +00:00
Fix input media. And allow to edit media
This commit is contained in:
parent
8a4b2a16dd
commit
6c0bd76a63
4 changed files with 19 additions and 11 deletions
|
|
@ -78,6 +78,9 @@ from ..types import (
|
||||||
InlineKeyboardMarkup,
|
InlineKeyboardMarkup,
|
||||||
InlineQueryResult,
|
InlineQueryResult,
|
||||||
InputFile,
|
InputFile,
|
||||||
|
InputMedia,
|
||||||
|
InputMediaPhoto,
|
||||||
|
InputMediaVideo,
|
||||||
LabeledPrice,
|
LabeledPrice,
|
||||||
MaskPosition,
|
MaskPosition,
|
||||||
Message,
|
Message,
|
||||||
|
|
@ -673,7 +676,7 @@ class Bot(BaseBot):
|
||||||
async def send_media_group(
|
async def send_media_group(
|
||||||
self,
|
self,
|
||||||
chat_id: Union[int, str],
|
chat_id: Union[int, str],
|
||||||
media: Union[str, InputFile],
|
media: List[Union[InputMediaPhoto, InputMediaVideo]],
|
||||||
disable_notification: Optional[bool] = None,
|
disable_notification: Optional[bool] = None,
|
||||||
reply_to_message_id: Optional[int] = None,
|
reply_to_message_id: Optional[int] = None,
|
||||||
) -> List[Message]:
|
) -> List[Message]:
|
||||||
|
|
@ -685,7 +688,7 @@ class Bot(BaseBot):
|
||||||
:param chat_id: Unique identifier for the target chat or username of the target channel (in the format @channelusername)
|
:param chat_id: Unique identifier for the target chat or username of the target channel (in the format @channelusername)
|
||||||
:type chat_id: :obj:`Union[int, str]`
|
:type chat_id: :obj:`Union[int, str]`
|
||||||
:param media: A JSON-serialized array describing photos and videos to be sent, must include 2–10 items
|
:param media: A JSON-serialized array describing photos and videos to be sent, must include 2–10 items
|
||||||
:type media: :obj:`Union[str, InputFile]`
|
:type media: :obj:`List[Union[InputMediaPhoto, InputMediaVideo]]`
|
||||||
:param disable_notification: Sends the messages silently. Users will receive a notification with no sound.
|
:param disable_notification: Sends the messages silently. Users will receive a notification with no sound.
|
||||||
:type disable_notification: :obj:`Optional[bool]`
|
:type disable_notification: :obj:`Optional[bool]`
|
||||||
:param reply_to_message_id: If the messages are a reply, ID of the original message
|
:param reply_to_message_id: If the messages are a reply, ID of the original message
|
||||||
|
|
@ -1501,7 +1504,7 @@ class Bot(BaseBot):
|
||||||
|
|
||||||
async def edit_message_media(
|
async def edit_message_media(
|
||||||
self,
|
self,
|
||||||
media: Union[str, InputFile],
|
media: InputMedia,
|
||||||
chat_id: Optional[Union[int, str]] = None,
|
chat_id: Optional[Union[int, str]] = None,
|
||||||
message_id: Optional[int] = None,
|
message_id: Optional[int] = None,
|
||||||
inline_message_id: Optional[str] = None,
|
inline_message_id: Optional[str] = None,
|
||||||
|
|
@ -1513,7 +1516,7 @@ class Bot(BaseBot):
|
||||||
Source: https://core.telegram.org/bots/api#editmessagemedia
|
Source: https://core.telegram.org/bots/api#editmessagemedia
|
||||||
|
|
||||||
:param media: A JSON-serialized object for a new media content of the message
|
:param media: A JSON-serialized object for a new media content of the message
|
||||||
:type media: :obj:`Union[str, InputFile]`
|
:type media: :obj:`InputMedia`
|
||||||
:param chat_id: Required if inline_message_id is not specified. Unique identifier for the target chat or username of the target channel (in the format @channelusername)
|
:param chat_id: Required if inline_message_id is not specified. Unique identifier for the target chat or username of the target channel (in the format @channelusername)
|
||||||
:type chat_id: :obj:`Optional[Union[int, str]]`
|
:type chat_id: :obj:`Optional[Union[int, str]]`
|
||||||
:param message_id: Required if inline_message_id is not specified. Identifier of the message to edit
|
:param message_id: Required if inline_message_id is not specified. Identifier of the message to edit
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,8 @@
|
||||||
|
import secrets
|
||||||
from typing import Any, Dict, Optional, Union
|
from typing import Any, Dict, Optional, Union
|
||||||
|
|
||||||
from ..types import InlineKeyboardMarkup, InputFile, Message
|
|
||||||
from .base import Request, TelegramMethod
|
from .base import Request, TelegramMethod
|
||||||
|
from ..types import InlineKeyboardMarkup, InputMedia, Message, InputFile
|
||||||
|
|
||||||
|
|
||||||
class EditMessageMedia(TelegramMethod[Union[Message, bool]]):
|
class EditMessageMedia(TelegramMethod[Union[Message, bool]]):
|
||||||
|
|
@ -13,7 +14,7 @@ class EditMessageMedia(TelegramMethod[Union[Message, bool]]):
|
||||||
|
|
||||||
__returning__ = Union[Message, bool]
|
__returning__ = Union[Message, bool]
|
||||||
|
|
||||||
media: Union[str, InputFile]
|
media: InputMedia
|
||||||
"""A JSON-serialized object for a new media content of the message"""
|
"""A JSON-serialized object for a new media content of the message"""
|
||||||
|
|
||||||
chat_id: Optional[Union[int, str]] = None
|
chat_id: Optional[Union[int, str]] = None
|
||||||
|
|
@ -29,11 +30,15 @@ class EditMessageMedia(TelegramMethod[Union[Message, bool]]):
|
||||||
"""A JSON-serialized object for a new inline keyboard."""
|
"""A JSON-serialized object for a new inline keyboard."""
|
||||||
|
|
||||||
def build_request(self) -> Request:
|
def build_request(self) -> Request:
|
||||||
data: Dict[str, Any] = self.dict(
|
data: Dict[str, Any] = self.dict()
|
||||||
exclude={"media",}
|
|
||||||
)
|
|
||||||
|
|
||||||
files: Dict[str, InputFile] = {}
|
files: Dict[str, InputFile] = {}
|
||||||
self.prepare_file(data=data, files=files, name="media", value=self.media)
|
self.prepare_media_file(data=data, files=files)
|
||||||
|
|
||||||
return Request(method="editMessageMedia", data=data, files=files)
|
return Request(method="editMessageMedia", data=data, files=files)
|
||||||
|
|
||||||
|
def prepare_media_file(self, data: Dict[str, Any], files: Dict[str, InputFile]) -> None:
|
||||||
|
if isinstance(data["media"]["media"], InputFile):
|
||||||
|
tag = secrets.token_urlsafe(10)
|
||||||
|
files[tag] = data["media"].pop("media") # type: ignore
|
||||||
|
data["media"]["media"] = f"attach://{tag}"
|
||||||
|
|
|
||||||
|
|
@ -70,7 +70,7 @@ class BaseSession(abc.ABC):
|
||||||
loop.create_task(self.close())
|
loop.create_task(self.close())
|
||||||
|
|
||||||
def prepare_value(self, value: Any) -> Union[str, int, bool]:
|
def prepare_value(self, value: Any) -> Union[str, int, bool]:
|
||||||
if isinstance(value, (bool, str, int)):
|
if isinstance(value, str):
|
||||||
return value
|
return value
|
||||||
if isinstance(value, (list, dict)):
|
if isinstance(value, (list, dict)):
|
||||||
return self.json_dumps(self.clean_json(value))
|
return self.json_dumps(self.clean_json(value))
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue