mirror of
https://github.com/aiogram/aiogram.git
synced 2026-04-08 16:37:47 +00:00
* Refactor: Introduce Union types for streamlined type handling Implemented Union types across various modules to consolidate and simplify type annotations. This change replaces repetitive union declarations with reusable Union aliases, improving code readability and maintainability. Updates applied to affected classes, methods, and imports accordingly. * Refactor unions into type aliases for better reusability Replaced inline `Union` types with predefined aliases like `MediaUnion`, `ReplyMarkupUnion`, and `ChatIdUnion`. Simplifies type annotations, improves code readability, and reduces duplication. Added `media_union.py` for grouping related media types. * Refactor type unions with ResultChatMemberUnion and ResultMenuButtonUnion Replaced verbose type definitions of chat member and menu button unions with `ResultChatMemberUnion` and `ResultMenuButtonUnion` for improved readability and maintainability. Updated relevant methods, modules, and documentation to use the new type aliases consistently. * Added changelog
119 lines
6.4 KiB
Python
119 lines
6.4 KiB
Python
from __future__ import annotations
|
|
|
|
from typing import TYPE_CHECKING, Any, Optional, Union
|
|
|
|
from pydantic import Field
|
|
|
|
from ..client.default import Default
|
|
from ..types import (
|
|
ChatIdUnion,
|
|
DateTimeUnion,
|
|
MessageEntity,
|
|
MessageId,
|
|
ReplyMarkupUnion,
|
|
ReplyParameters,
|
|
)
|
|
from .base import TelegramMethod
|
|
|
|
|
|
class CopyMessage(TelegramMethod[MessageId]):
|
|
"""
|
|
Use this method to copy messages of any kind. Service messages, paid media messages, giveaway messages, giveaway winners messages, and invoice messages can't be copied. A quiz :class:`aiogram.methods.poll.Poll` can be copied only if the value of the field *correct_option_id* is known to the bot. The method is analogous to the method :class:`aiogram.methods.forward_message.ForwardMessage`, but the copied message doesn't have a link to the original message. Returns the :class:`aiogram.types.message_id.MessageId` of the sent message on success.
|
|
|
|
Source: https://core.telegram.org/bots/api#copymessage
|
|
"""
|
|
|
|
__returning__ = MessageId
|
|
__api_method__ = "copyMessage"
|
|
|
|
chat_id: ChatIdUnion
|
|
"""Unique identifier for the target chat or username of the target channel (in the format :code:`@channelusername`)"""
|
|
from_chat_id: ChatIdUnion
|
|
"""Unique identifier for the chat where the original message was sent (or channel username in the format :code:`@channelusername`)"""
|
|
message_id: int
|
|
"""Message identifier in the chat specified in *from_chat_id*"""
|
|
message_thread_id: Optional[int] = None
|
|
"""Unique identifier for the target message thread (topic) of the forum; for forum supergroups only"""
|
|
video_start_timestamp: Optional[DateTimeUnion] = None
|
|
"""New start timestamp for the copied video in the message"""
|
|
caption: Optional[str] = None
|
|
"""New caption for media, 0-1024 characters after entities parsing. If not specified, the original caption is kept"""
|
|
parse_mode: Optional[Union[str, Default]] = Default("parse_mode")
|
|
"""Mode for parsing entities in the new caption. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details."""
|
|
caption_entities: Optional[list[MessageEntity]] = None
|
|
"""A JSON-serialized list of special entities that appear in the new caption, which can be specified instead of *parse_mode*"""
|
|
show_caption_above_media: Optional[Union[bool, Default]] = Default("show_caption_above_media")
|
|
"""Pass :code:`True`, if the caption must be shown above the message media. Ignored if a new caption isn't specified."""
|
|
disable_notification: Optional[bool] = None
|
|
"""Sends the message `silently <https://telegram.org/blog/channels-2-0#silent-messages>`_. Users will receive a notification with no sound."""
|
|
protect_content: Optional[Union[bool, Default]] = Default("protect_content")
|
|
"""Protects the contents of the sent message from forwarding and saving"""
|
|
allow_paid_broadcast: Optional[bool] = None
|
|
"""Pass :code:`True` to allow up to 1000 messages per second, ignoring `broadcasting limits <https://core.telegram.org/bots/faq#how-can-i-message-all-of-my-bot-39s-subscribers-at-once>`_ for a fee of 0.1 Telegram Stars per message. The relevant Stars will be withdrawn from the bot's balance"""
|
|
reply_parameters: Optional[ReplyParameters] = None
|
|
"""Description of the message to reply to"""
|
|
reply_markup: Optional[ReplyMarkupUnion] = None
|
|
"""Additional interface options. A JSON-serialized object for an `inline keyboard <https://core.telegram.org/bots/features#inline-keyboards>`_, `custom reply keyboard <https://core.telegram.org/bots/features#keyboards>`_, instructions to remove a reply keyboard or to force a reply from the user"""
|
|
allow_sending_without_reply: Optional[bool] = Field(
|
|
None, json_schema_extra={"deprecated": True}
|
|
)
|
|
"""Pass :code:`True` if the message should be sent even if the specified replied-to message is not found
|
|
|
|
.. deprecated:: API:7.0
|
|
https://core.telegram.org/bots/api-changelog#december-29-2023"""
|
|
reply_to_message_id: Optional[int] = Field(None, json_schema_extra={"deprecated": True})
|
|
"""If the message is a reply, ID of the original message
|
|
|
|
.. deprecated:: API:7.0
|
|
https://core.telegram.org/bots/api-changelog#december-29-2023"""
|
|
|
|
if TYPE_CHECKING:
|
|
# DO NOT EDIT MANUALLY!!!
|
|
# This section was auto-generated via `butcher`
|
|
|
|
def __init__(
|
|
__pydantic__self__,
|
|
*,
|
|
chat_id: ChatIdUnion,
|
|
from_chat_id: ChatIdUnion,
|
|
message_id: int,
|
|
message_thread_id: Optional[int] = None,
|
|
video_start_timestamp: Optional[DateTimeUnion] = None,
|
|
caption: Optional[str] = None,
|
|
parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
|
|
caption_entities: Optional[list[MessageEntity]] = None,
|
|
show_caption_above_media: Optional[Union[bool, Default]] = Default(
|
|
"show_caption_above_media"
|
|
),
|
|
disable_notification: Optional[bool] = None,
|
|
protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
|
|
allow_paid_broadcast: Optional[bool] = None,
|
|
reply_parameters: Optional[ReplyParameters] = None,
|
|
reply_markup: Optional[ReplyMarkupUnion] = None,
|
|
allow_sending_without_reply: Optional[bool] = None,
|
|
reply_to_message_id: Optional[int] = None,
|
|
**__pydantic_kwargs: Any,
|
|
) -> None:
|
|
# DO NOT EDIT MANUALLY!!!
|
|
# This method was auto-generated via `butcher`
|
|
# Is needed only for type checking and IDE support without any additional plugins
|
|
|
|
super().__init__(
|
|
chat_id=chat_id,
|
|
from_chat_id=from_chat_id,
|
|
message_id=message_id,
|
|
message_thread_id=message_thread_id,
|
|
video_start_timestamp=video_start_timestamp,
|
|
caption=caption,
|
|
parse_mode=parse_mode,
|
|
caption_entities=caption_entities,
|
|
show_caption_above_media=show_caption_above_media,
|
|
disable_notification=disable_notification,
|
|
protect_content=protect_content,
|
|
allow_paid_broadcast=allow_paid_broadcast,
|
|
reply_parameters=reply_parameters,
|
|
reply_markup=reply_markup,
|
|
allow_sending_without_reply=allow_sending_without_reply,
|
|
reply_to_message_id=reply_to_message_id,
|
|
**__pydantic_kwargs,
|
|
)
|