diff --git a/aiogram/types/animation.py b/aiogram/types/animation.py deleted file mode 100644 index fab71560..00000000 --- a/aiogram/types/animation.py +++ /dev/null @@ -1,28 +0,0 @@ -from .base import Deserializable -from .photo_size import PhotoSize - - -class Animation(Deserializable): - """ - You can provide an animation for your game so that it looks stylish in chats. - This object represents an animation file to be displayed in the message containing a game. - - https://core.telegram.org/bots/api#animation - """ - - def __init__(self, file_id, thumb, file_name, mime_type, file_size): - self.file_id: str = file_id - self.thumb: PhotoSize = thumb - self.file_name: str = file_name - self.mime_type: str = mime_type - self.file_size: int = file_size - - @classmethod - def de_json(cls, raw_data): - file_id = raw_data.get('file_id') - thumb = PhotoSize.deserialize(raw_data.get('thumb')) - file_name = raw_data.get('file_name') - mime_type = raw_data.get('mime_type') - file_size = raw_data.get('file_size') - - return Animation(file_id, thumb, file_name, mime_type, file_size) diff --git a/aiogram/types/audio.py b/aiogram/types/audio.py deleted file mode 100644 index 536eff92..00000000 --- a/aiogram/types/audio.py +++ /dev/null @@ -1,28 +0,0 @@ -from .base import Deserializable - - -class Audio(Deserializable): - """ - This object represents an audio file to be treated as music by the Telegram clients. - - https://core.telegram.org/bots/api#audio - """ - - def __init__(self, file_id, duration, performer, title, mime_type, file_size): - self.file_id: str = file_id - self.duration: int = duration - self.performer: str = performer - self.title: str = title - self.mime_type: str = mime_type - self.file_size: int = file_size - - @classmethod - def de_json(cls, raw_data): - file_id = raw_data.get('file_id') - duration = raw_data.get('duration') - performer = raw_data.get('performer') - title = raw_data.get('title') - mime_type = raw_data.get('mime_type') - file_size = raw_data.get('file_size') - - return Audio(file_id, duration, performer, title, mime_type, file_size) diff --git a/aiogram/types/callback_query.py b/aiogram/types/callback_query.py deleted file mode 100644 index 99e98833..00000000 --- a/aiogram/types/callback_query.py +++ /dev/null @@ -1,40 +0,0 @@ -from .base import Deserializable -from .message import Message -from .user import User - - -class CallbackQuery(Deserializable): - """ - This object represents an incoming callback query from a callback button in an inline keyboard. - - If the button that originated the query was attached to a message sent by the bot, - the field message will be present. - - If the button was attached to a message sent via the bot (in inline mode), - the field inline_message_id will be present. - - Exactly one of the fields data or game_short_name will be present. - - https://core.telegram.org/bots/api#callbackquery - """ - - def __init__(self, id, from_user, message, inline_message_id, chat_instance, data, game_short_name): - self.id: int = id - self.from_user: User = from_user - self.message: Message = message - self.inline_message_id: int = inline_message_id - self.chat_instance: str = chat_instance - self.data: str = data - self.game_short_name: str = game_short_name - - @classmethod - def de_json(cls, raw_data): - id = raw_data.get('id') - from_user = User.deserialize(raw_data.get('from')) - message = Message.deserialize(raw_data.get('message')) - inline_message_id = raw_data.get('inline_message_id') - chat_instance = raw_data.get('chat_instance') - data = raw_data.get('data') - game_short_name = raw_data.get('game_short_name') - - return CallbackQuery(id, from_user, message, inline_message_id, chat_instance, data, game_short_name) diff --git a/aiogram/types/chat.py b/aiogram/types/chat.py deleted file mode 100644 index aa6dd95e..00000000 --- a/aiogram/types/chat.py +++ /dev/null @@ -1,162 +0,0 @@ -from aiogram.utils.markdown import hlink, link -from .base import Deserializable -from .chat_photo import ChatPhoto -from ..utils.helper import Helper, HelperMode, Item - - -class Chat(Deserializable): - """ - This object represents a chat. - - https://core.telegram.org/bots/api#chat - """ - - def __init__(self, id, type, title, username, first_name, last_name, all_members_are_administrators, photo, - description, invite_link, pinned_message): - from .message import Message - - self.id: int = id - self.type: str = type - self.title: str = title - self.username: str = username - self.first_name: str = first_name - self.last_name: str = last_name - self.all_members_are_administrators: bool = all_members_are_administrators - self.photo: ChatPhoto = photo - self.description: str = description - self.invite_link: str = invite_link - self.pinned_message: Message = pinned_message - - @classmethod - def de_json(cls, raw_data) -> 'Chat': - from .message import Message - - id: int = raw_data.get('id') - type: str = raw_data.get('type') - title: str = raw_data.get('title') - username: str = raw_data.get('username') - first_name: str = raw_data.get('first_name') - last_name: str = raw_data.get('last_name') - all_members_are_administrators: bool = raw_data.get('all_members_are_administrators', False) - photo = raw_data.get('photo') - description = raw_data.get('description') - invite_link = raw_data.get('invite_link') - pinned_message: Message = Message.deserialize(raw_data.get('pinned_message')) - - return Chat(id, type, title, username, first_name, last_name, all_members_are_administrators, photo, - description, invite_link, pinned_message) - - @property - def full_name(self): - if self.type == ChatType.PRIVATE: - full_name = self.first_name - if self.last_name: - full_name += ' ' + self.last_name - return full_name - return self.title - - @property - def mention(self): - """ - Get mention if dialog have username or full name if this is Private dialog otherwise None - """ - if self.username: - return '@' + self.username - if self.type == ChatType.PRIVATE: - return self.full_name - return None - - @property - def user_url(self): - if self.type != ChatType.PRIVATE: - raise TypeError('This property available only in private chats.') - - return f"tg://user?id={self.id}" - - def get_mention(self, name=None, as_html=False): - if name is None: - name = self.mention - if as_html: - return hlink(name, self.user_url) - return link(name, self.user_url) - - async def set_photo(self, photo): - return await self.bot.set_chat_photo(self.id, photo) - - async def delete_photo(self): - return await self.bot.delete_chat_photo(self.id) - - async def set_title(self, title): - return await self.bot.set_chat_title(self.id, title) - - async def set_description(self, description): - return await self.bot.delete_chat_description(self.id, description) - - async def pin_message(self, message_id: int, disable_notification: bool = False): - return await self.bot.pin_chat_message(self.id, message_id, disable_notification) - - async def unpin_message(self): - return await self.bot.unpin_chat_message(self.id) - - async def leave(self): - return await self.bot.leave_chat(self.id) - - async def get_administrators(self): - return await self.bot.get_chat_administrators(self.id) - - async def get_members_count(self): - return await self.bot.get_chat_members_count(self.id) - - async def get_member(self, user_id): - return await self.bot.get_chat_member(self.id, user_id) - - async def do(self, action): - return await self.bot.send_chat_action(self.id, action) - - -class ChatType(Helper): - """ - List of chat types - - :key: PRIVATE - :key: GROUP - :key: SUPER_GROUP - :key: CHANNEL - """ - - mode = HelperMode.lowercase - - PRIVATE = Item() # private - GROUP = Item() # group - SUPER_GROUP = Item() # supergroup - CHANNEL = Item() # channel - - -class ChatActions(Helper): - """ - List of chat actions - - :key: TYPING - :key: UPLOAD_PHOTO - :key: RECORD_VIDEO - :key: UPLOAD_VIDEO - :key: RECORD_AUDIO - :key: UPLOAD_AUDIO - :key: UPLOAD_DOCUMENT - :key: FIND_LOCATION - :key: RECORD_VIDEO_NOTE - :key: UPLOAD_VIDEO_NOTE - """ - - mode = HelperMode.snake_case - - TYPING = Item() # typing - UPLOAD_PHOTO = Item() # upload_photo - RECORD_VIDEO = Item() # record_video - UPLOAD_VIDEO = Item() # upload_video - RECORD_AUDIO = Item() # record_audio - UPLOAD_AUDIO = Item() # upload_audio - UPLOAD_DOCUMENT = Item() # upload_document - FIND_LOCATION = Item() # find_location - RECORD_VIDEO_NOTE = Item() # record_video_note - UPLOAD_VIDEO_NOTE = Item() # upload_video_note diff --git a/aiogram/types/chat_member.py b/aiogram/types/chat_member.py deleted file mode 100644 index 3ef7311a..00000000 --- a/aiogram/types/chat_member.py +++ /dev/null @@ -1,78 +0,0 @@ -import datetime - -from .base import Deserializable -from .user import User -from ..utils.helper import Helper, Item - - -class ChatMember(Deserializable): - """ - This object contains information about one member of the chat. - - https://core.telegram.org/bots/api#chatmember - """ - - def __init__(self, user, status, until_date, can_be_edited, can_change_info, can_post_messages, - can_edit_messages, can_delete_messages, can_invite_users, can_restrict_members, - can_pin_messages, can_promote_members, can_send_messages, can_send_media_messages, - can_send_other_messages, can_add_web_page_previews - ): - self.user: User = user - self.status: str = status - - self.until_date: datetime.datetime = until_date - self.can_be_edited: bool = can_be_edited - self.can_change_info: bool = can_change_info - self.can_post_messages: bool = can_post_messages - self.can_edit_messages: bool = can_edit_messages - self.can_delete_messages: bool = can_delete_messages - self.can_invite_users: bool = can_invite_users - self.can_restrict_members: bool = can_restrict_members - self.can_pin_messages: bool = can_pin_messages - self.can_promote_members: bool = can_promote_members - self.can_send_messages: bool = can_send_messages - self.can_send_media_messages: bool = can_send_media_messages - self.can_send_other_messages: bool = can_send_other_messages - self.can_add_web_page_previews: bool = can_add_web_page_previews - - @classmethod - def de_json(cls, raw_data): - user = User.deserialize(raw_data.get('user')) - status = raw_data.get('status') - - until_date = cls._parse_date(raw_data.get('until_date')) - can_be_edited = raw_data.get('can_be_edited') - can_change_info = raw_data.get('can_change_info') - can_post_messages = raw_data.get('can_post_messages') - can_edit_messages = raw_data.get('can_edit_messages') - can_delete_messages = raw_data.get('can_delete_messages') - can_invite_users = raw_data.get('can_invite_users') - can_restrict_members = raw_data.get('can_restrict_members') - can_pin_messages = raw_data.get('can_pin_messages') - can_promote_members = raw_data.get('can_promote_members') - can_send_messages = raw_data.get('can_send_messages') - can_send_media_messages = raw_data.get('can_send_media_messages') - can_send_other_messages = raw_data.get('can_send_other_messages') - can_add_web_page_previews = raw_data.get('can_add_web_page_previews') - - return ChatMember(user, status, until_date, can_be_edited, can_change_info, can_post_messages, - can_edit_messages, can_delete_messages, can_invite_users, can_restrict_members, - can_pin_messages, can_promote_members, can_send_messages, can_send_media_messages, - can_send_other_messages, can_add_web_page_previews - ) - - -class ChatMemberStatus(Helper): - CREATOR = Item() # creator - ADMINISTRATOR = Item() # administrator - MEMBER = Item() # member - LEFT = Item() # left - KICKED = Item() # kicked - - @classmethod - def is_admin(cls, role): - return role in [cls.ADMINISTRATOR, cls.CREATOR] - - @classmethod - def is_member(cls, role): - return role in [cls.MEMBER, cls.ADMINISTRATOR, cls.CREATOR] diff --git a/aiogram/types/chat_photo.py b/aiogram/types/chat_photo.py deleted file mode 100644 index a49e5d1d..00000000 --- a/aiogram/types/chat_photo.py +++ /dev/null @@ -1,20 +0,0 @@ -from .base import Deserializable - - -class ChatPhoto(Deserializable): - """ - This object represents a chat photo. - - https://core.telegram.org/bots/api#chatphoto - """ - - def __init__(self, small_file_id, big_file_id): - self.small_file_id: str = small_file_id - self.big_file_id: str = big_file_id - - @classmethod - def de_json(cls, raw_data): - small_file_id = raw_data.get('small_file_id') - big_file_id = raw_data.get('big_file_id') - - return ChatPhoto(small_file_id, big_file_id) diff --git a/aiogram/types/chosen_inline_result.py b/aiogram/types/chosen_inline_result.py deleted file mode 100644 index 60ba3d0f..00000000 --- a/aiogram/types/chosen_inline_result.py +++ /dev/null @@ -1,28 +0,0 @@ -from .base import Deserializable -from .location import Location -from .user import User - - -class ChosenInlineResult(Deserializable): - """ - Represents a result of an inline query that was chosen by the user and sent to their chat partner. - - https://core.telegram.org/bots/api#choseninlineresult - """ - - def __init__(self, result_id, from_user, location, inline_message_id, query): - self.result_id: str = result_id - self.from_user: User = from_user - self.location: Location = location - self.inline_message_id: str = inline_message_id - self.query: str = query - - @classmethod - def de_json(cls, raw_data): - result_id = raw_data.get('result_id') - from_user = User.deserialize(raw_data.get('from')) - location = Location.deserialize(raw_data.get('location')) - inline_message_id = raw_data.get('inline_message_id') - query = raw_data.get('query') - - return ChosenInlineResult(result_id, from_user, location, inline_message_id, query) diff --git a/aiogram/types/contact.py b/aiogram/types/contact.py deleted file mode 100644 index 4ffb6ab0..00000000 --- a/aiogram/types/contact.py +++ /dev/null @@ -1,24 +0,0 @@ -from .base import Deserializable - - -class Contact(Deserializable): - """ - This object represents a phone contact. - - https://core.telegram.org/bots/api#contact - """ - - def __init__(self, phone_number, first_name, last_name, user_id): - self.phone_number: str = phone_number - self.first_name: str = first_name - self.last_name: str = last_name - self.user_id: int = user_id - - @classmethod - def de_json(cls, raw_data): - phone_number = raw_data.get('phone_number') - first_name = raw_data.get('first_name') - last_name = raw_data.get('last_name') - user_id = raw_data.get('user_id') - - return Contact(phone_number, first_name, last_name, user_id) diff --git a/aiogram/types/document.py b/aiogram/types/document.py deleted file mode 100644 index 0f0f62e3..00000000 --- a/aiogram/types/document.py +++ /dev/null @@ -1,27 +0,0 @@ -from .base import Deserializable -from .photo_size import PhotoSize - - -class Document(Deserializable): - """ - This object represents a general file (as opposed to photos, voice messages and audio files). - - https://core.telegram.org/bots/api#document - """ - - def __init__(self, file_id, thumb, file_name, mime_type, file_size): - self.file_id: str = file_id - self.thumb: PhotoSize = thumb - self.file_name: str = file_name - self.mime_type: str = mime_type - self.file_size: int = file_size - - @classmethod - def de_json(cls, raw_data): - file_id = raw_data.get('file_id') - thumb = PhotoSize.deserialize(raw_data.get('thumb')) - file_name = raw_data.get('file_name') - mime_type = raw_data.get('mime_type') - file_size = raw_data.get('file_size') - - return Document(file_id, thumb, file_name, mime_type, file_size) diff --git a/aiogram/types/file.py b/aiogram/types/file.py deleted file mode 100644 index 7fa55fcc..00000000 --- a/aiogram/types/file.py +++ /dev/null @@ -1,30 +0,0 @@ -from .base import Deserializable - - -class File(Deserializable): - """ - This object represents a file ready to be downloaded. - - The file can be downloaded via the link https://api.telegram.org/file/bot/. - - It is guaranteed that the link will be valid for at least 1 hour. When the link expires, - a new one can be requested by calling getFile. - - https://core.telegram.org/bots/api#file - """ - - def __init__(self, file_id, file_size, file_path): - self.file_id: str = file_id - self.file_size: int = file_size - self.file_path: str = file_path - - @classmethod - def de_json(cls, raw_data): - file_id = raw_data.get('file_id') - file_size = raw_data.get('file_size') - file_path = raw_data.get('file_path') - - return File(file_id, file_size, file_path) - - async def download(self, destination=None, timeout=30, chunk_size=65536, seek=True): - return await self.bot.download_file(self.file_path, destination, timeout, chunk_size, seek) diff --git a/aiogram/types/force_reply.py b/aiogram/types/force_reply.py deleted file mode 100644 index 91a4278b..00000000 --- a/aiogram/types/force_reply.py +++ /dev/null @@ -1,23 +0,0 @@ -from .base import Serializable - - -class ForceReply(Serializable): - """ - Upon receiving a message with this object, - Telegram clients will display a reply interface to the user - (act as if the user has selected the bot‘s message and tapped ’Reply'). - - This can be extremely useful if you want to create user-friendly step-by-step - interfaces without having to sacrifice privacy mode. - - https://core.telegram.org/bots/api#forcereply - """ - - def __init__(self, selective=None): - self.selective = selective - - def to_json(self): - data = {'force_reply': True} - if self.selective: - data['selective'] = True - return data diff --git a/aiogram/types/game.py b/aiogram/types/game.py deleted file mode 100644 index 22fed354..00000000 --- a/aiogram/types/game.py +++ /dev/null @@ -1,33 +0,0 @@ -from .animation import Animation -from .base import Deserializable -from .message_entity import MessageEntity -from .photo_size import PhotoSize - - -class Game(Deserializable): - """ - This object represents a game. - - Use BotFather to create and edit games, their short names will act as unique identifiers. - - https://core.telegram.org/bots/api#game - """ - - def __init__(self, title, description, photo, text, text_entities, animation): - self.title = title - self.description = description - self.photo = photo - self.text = text - self.text_entities = text_entities - self.animation = animation - - @classmethod - def de_json(cls, raw_data): - title = raw_data.get('title') - description = raw_data.get('description') - photo = PhotoSize.deserialize(raw_data.get('photo')) - text = raw_data.get('text') - text_entities = MessageEntity.deserialize(raw_data.get('text_entities')) - animation = Animation.deserialize(raw_data.get('animation')) - - return Game(title, description, photo, text, text_entities, animation) diff --git a/aiogram/types/game_high_score.py b/aiogram/types/game_high_score.py deleted file mode 100644 index 46fe5307..00000000 --- a/aiogram/types/game_high_score.py +++ /dev/null @@ -1,23 +0,0 @@ -from .base import Deserializable -from .user import User - - -class GameHighScore(Deserializable): - """ - This object represents one row of the high scores table for a game. - - https://core.telegram.org/bots/api#gamehighscore - """ - - def __init__(self, position, user, score): - self.position: int = position - self.user: User = user - self.score: int = score - - @classmethod - def de_json(cls, raw_data): - position = raw_data.get('position') - user = User.deserialize(raw_data.get('user')) - score = raw_data.get('score') - - return GameHighScore(position, user, score) diff --git a/aiogram/types/inline_keyboard.py b/aiogram/types/inline_keyboard.py deleted file mode 100644 index c45105e1..00000000 --- a/aiogram/types/inline_keyboard.py +++ /dev/null @@ -1,57 +0,0 @@ -from .base import Serializable - - -class InlineKeyboardMarkup(Serializable): - """ - This object represents an inline keyboard that appears right next to the message it belongs to. - - https://core.telegram.org/bots/api#inlinekeyboardmarkup - """ - - def __init__(self, row_width=3): - self.row_width = row_width - - self.keyboard = [] - - def add(self, *args): - i = 1 - row = [] - for button in args: - row.append(button.to_json()) - if i % self.row_width == 0: - self.keyboard.append(row) - row = [] - i += 1 - if len(row) > 0: - self.keyboard.append(row) - - def row(self, *args): - btn_array = [] - for button in args: - btn_array.append(button.to_json()) - self.keyboard.append(btn_array) - return self - - def to_json(self): - return {'inline_keyboard': self.keyboard} - - -class InlineKeyboardButton(Serializable): - """ - This object represents one button of an inline keyboard. You must use exactly one of the optional fields. - - https://core.telegram.org/bots/api#inlinekeyboardbutton - """ - - def __init__(self, text, url=None, callback_data=None, switch_inline_query=None, - switch_inline_query_current_chat=None, callback_game=None, pay=None): - self.text = text - self.url = url - self.callback_data = callback_data - self.switch_inline_query = switch_inline_query - self.switch_inline_query_current_chat = switch_inline_query_current_chat - self.callback_game = callback_game - self.pay = pay - - def to_json(self): - return {key: value for key, value in self.__dict__.items() if value} diff --git a/aiogram/types/inline_query.py b/aiogram/types/inline_query.py deleted file mode 100644 index dc768102..00000000 --- a/aiogram/types/inline_query.py +++ /dev/null @@ -1,30 +0,0 @@ -from .base import Deserializable -from .location import Location -from .user import User - - -class InlineQuery(Deserializable): - """ - This object represents an incoming inline query. - - When the user sends an empty query, your bot could return some default or trending results. - - https://core.telegram.org/bots/api#inlinequery - """ - - def __init__(self, id, from_user, location, query, offset): - self.id: int = id - self.from_user: User = from_user - self.location: Location = location - self.query: str = query - self.offset: str = offset - - @classmethod - def de_json(cls, raw_data): - id = raw_data.get('id') - from_user = User.deserialize(raw_data.get('from')) - location = Location.deserialize(raw_data.get('location')) - query = raw_data.get('query') - offset = raw_data.get('offset') - - return InlineQuery(id, from_user, location, query, offset) diff --git a/aiogram/types/inline_query_result.py b/aiogram/types/inline_query_result.py deleted file mode 100644 index 84f23ddf..00000000 --- a/aiogram/types/inline_query_result.py +++ /dev/null @@ -1,605 +0,0 @@ -from .base import Serializable -from .inline_keyboard import InlineKeyboardMarkup - - -class InputMessageContent(Serializable): - """ - This object represents the content of a message to be sent as a result of an inline query. - - Telegram clients currently support the following 4 types: - - :class:`aiogram.types.InputTextMessageContent` - :class:`aiogram.types.InputLocationMessageContent` - :class:`aiogram.types.InputVenueMessageContent` - :class:`aiogram.types.InputContactMessageContent` - """ - - def to_json(self): - return {k: v.to_json() if hasattr(v, 'to_json') else v for k, v in self.__dict__.items() if - v is not None and not k.startswith('_')} - - -class InlineQueryResult(InputMessageContent): - """ - This object represents one result of an inline query. - - Telegram clients currently support results of the following 20 types: - - :class:`aiogram.types.InlineQueryResultCachedAudio` - - :class:`aiogram.types.InlineQueryResultCachedDocument` - - :class:`aiogram.types.InlineQueryResultCachedGif` - - :class:`aiogram.types.InlineQueryResultCachedMpeg4Gif` - - :class:`aiogram.types.InlineQueryResultCachedPhoto` - - :class:`aiogram.types.InlineQueryResultCachedSticker` - - :class:`aiogram.types.InlineQueryResultCachedVideo` - - :class:`aiogram.types.InlineQueryResultCachedVoice` - - :class:`aiogram.types.InlineQueryResultArticle` - - :class:`aiogram.types.InlineQueryResultAudio` - - :class:`aiogram.types.InlineQueryResultContact` - - :class:`aiogram.types.InlineQueryResultGame` - - :class:`aiogram.types.InlineQueryResultDocument` - - :class:`aiogram.types.InlineQueryResultGif` - - :class:`aiogram.types.InlineQueryResultLocation` - - :class:`aiogram.types.InlineQueryResultMpeg4Gif` - - :class:`aiogram.types.InlineQueryResultPhoto` - - :class:`aiogram.types.InlineQueryResultVenue` - - :class:`aiogram.types.InlineQueryResultVideo` - - :class:`aiogram.types.InlineQueryResultVoice` - - """ - pass - - -class InlineQueryResultArticle(InlineQueryResult): - """ - Represents a link to an article or web page. - - https://core.telegram.org/bots/api#inlinequeryresultarticle - """ - - def __init__(self, id: str, title: str, input_message_content: InputMessageContent, - reply_markup: InlineKeyboardMarkup = None, url: str = None, hide_url: bool = None, - description: str = None, thumb_url: str = None, thumb_width: int = None, thumb_height: int = None): - self.type = 'article' - self.id: str = id - self.title: str = title - self.input_message_content: InputMessageContent = input_message_content - self.reply_markup: InlineKeyboardMarkup = reply_markup - self.url: str = url - self.hide_url: bool = hide_url - self.description: str = description - self.thumb_url: str = thumb_url - self.thumb_width: int = thumb_width - self.thumb_height: int = thumb_height - - -class InlineQueryResultPhoto(InlineQueryResult): - """ - Represents a link to a photo. By default, this photo will be sent by the user with optional caption. - - Alternatively, you can use input_message_content to send a message with the specified content instead - of the photo. - - https://core.telegram.org/bots/api#inlinequeryresultphoto - """ - - def __init__(self, id: str, photo_url: str, thumb_url: str, photo_width: int = None, - photo_height: int = None, title: str = None, description: str = None, caption: str = None, - reply_markup: InlineKeyboardMarkup = None, input_message_content: InputMessageContent = None): - self.type = 'photo' - self.id: str = id - self.photo_url: str = photo_url - self.thumb_url: str = thumb_url - self.photo_width: int = photo_width - self.photo_height: int = photo_height - self.title: str = title - self.description: str = description - self.caption: str = caption - self.reply_markup: InlineKeyboardMarkup = reply_markup - self.input_message_content: InputMessageContent = input_message_content - - -class InlineQueryResultGif(InlineQueryResult): - """ - Represents a link to an animated GIF file. - - By default, this animated GIF file will be sent by the user with optional caption. - - Alternatively, you can use input_message_content to send a message with the specified - content instead of the animation. - - https://core.telegram.org/bots/api#inlinequeryresultgif - """ - - def __init__(self, id: str, gif_url: str, thumb_url: str, gif_width: int = None, gif_height: int = None, - gif_duration: int = None, title: str = None, caption: str = None, - reply_markup: InlineKeyboardMarkup = None, input_message_content: InputMessageContent = None): - self.type = 'gif' - self.id: str = id - self.gif_url: str = gif_url - self.gif_width: int = gif_width - self.gif_height: int = gif_height - self.gif_duration: int = gif_duration - self.thumb_url: str = thumb_url - self.title: str = title - self.caption: str = caption - self.reply_markup: InlineKeyboardMarkup = reply_markup - self.input_message_content: InputMessageContent = input_message_content - - -class InlineQueryResultMpeg4Gif(InlineQueryResult): - """ - Represents a link to a video animation (H.264/MPEG-4 AVC video without sound). - - By default, this animated MPEG-4 file will be sent by the user with optional caption. - - Alternatively, you can use input_message_content to send a message with the specified content - instead of the animation. - - https://core.telegram.org/bots/api#inlinequeryresultmpeg4gif - """ - - def __init__(self, id: str, mpeg4_url: str, thumb_url: str, mpeg4_width: int = None, - mpeg4_height: int = None, mpeg4_duration: int = None, title: str = None, caption: str = None, - reply_markup: InlineKeyboardMarkup = None, input_message_content: InputMessageContent = None): - self.type = 'mpeg4_gif' - self.id: str = id - self.mpeg4_url: str = mpeg4_url - self.mpeg4_width: int = mpeg4_width - self.mpeg4_height: int = mpeg4_height - self.mpeg4_duration: int = mpeg4_duration - self.thumb_url: str = thumb_url - self.title: str = title - self.caption: str = caption - self.reply_markup: InlineKeyboardMarkup = reply_markup - self.input_message_content: InputMessageContent = input_message_content - - -class InlineQueryResultVideo(InlineQueryResult): - """ - Represents a link to a page containing an embedded video player or a video file. - By default, this video file will be sent by the user with an optional caption. - Alternatively, you can use input_message_content to send a message with the specified content - instead of the video. - - https://core.telegram.org/bots/api#inlinequeryresultvideo - """ - - def __init__(self, id: str, video_url: str, mime_type: str, thumb_url: str, title: str, - caption: str = None, video_width: int = None, video_height: int = None, video_duration: int = None, - description: str = None, reply_markup: InlineKeyboardMarkup = None, - input_message_content: InputMessageContent = None): - self.type = 'video' - self.id: str = id - self.video_url: str = video_url - self.mime_type: str = mime_type - self.thumb_url: str = thumb_url - self.title: str = title - self.caption: str = caption - self.video_width: int = video_width - self.video_height: int = video_height - self.video_duration: int = video_duration - self.description: str = description - self.reply_markup: InlineKeyboardMarkup = reply_markup - self.input_message_content: InputMessageContent = input_message_content - - -class InlineQueryResultAudio(InlineQueryResult): - """ - Represents a link to an mp3 audio file. By default, this audio file will be sent by the user. Alternatively, - you can use input_message_content to send a message with the specified content instead of the audio. - - https://core.telegram.org/bots/api#inlinequeryresultaudio - """ - - def __init__(self, id: str, audio_url: str, title: str, caption: str = None, performer: str = None, - audio_duration: int = None, reply_markup: InlineKeyboardMarkup = None, - input_message_content: InputMessageContent = None): - self.type = 'audio' - self.id: str = id - self.audio_url: str = audio_url - self.title: str = title - self.caption: str = caption - self.performer: str = performer - self.audio_duration: int = audio_duration - self.reply_markup: InlineKeyboardMarkup = reply_markup - self.input_message_content: InputMessageContent = input_message_content - - -class InlineQueryResultVoice(InlineQueryResult): - """ - Represents a link to a voice recording in an .ogg container encoded with OPUS. - - By default, this voice recording will be sent by the user. - - Alternatively, you can use input_message_content to send a message with the specified content - instead of the the voice message. - - https://core.telegram.org/bots/api#inlinequeryresultvoice - """ - - def __init__(self, id: str, voice_url: str, title: str, caption: str = None, voice_duration: int = None, - reply_markup: InlineKeyboardMarkup = None, input_message_content: InputMessageContent = None): - self.type = 'voice' - self.id: str = id - self.voice_url: str = voice_url - self.title: str = title - self.caption: str = caption - self.voice_duration: int = voice_duration - self.reply_markup: InlineKeyboardMarkup = reply_markup - self.input_message_content: InputMessageContent = input_message_content - - -class InlineQueryResultDocument(InlineQueryResult): - """ - Represents a link to a file. By default, this file will be sent by the user with an optional caption. - - Alternatively, you can use input_message_content to send a message with the specified content - instead of the file. Currently, only .PDF and .ZIP files can be sent using this method. - - https://core.telegram.org/bots/api#inlinequeryresultdocument - """ - - def __init__(self, id: str, title: str, document_url: str, mime_type: str, caption: str = None, - description: str = None, reply_markup: InlineKeyboardMarkup = None, - input_message_content: InputMessageContent = None, thumb_url: str = None, thumb_width: int = None, - thumb_height: int = None): - self.type = 'document' - self.id: str = id - self.title: str = title - self.caption: str = caption - self.document_url: str = document_url - self.mime_type: str = mime_type - self.description: str = description - self.reply_markup: InlineKeyboardMarkup = reply_markup - self.input_message_content: InputMessageContent = input_message_content - self.thumb_url: str = thumb_url - self.thumb_width: int = thumb_width - self.thumb_height: int = thumb_height - - -class InlineQueryResultLocation(InlineQueryResult): - """ - Represents a location on a map. By default, the location will be sent by the user. - Alternatively, you can use input_message_content to send a message with the specified content - instead of the location. - - https://core.telegram.org/bots/api#inlinequeryresultlocation - """ - - def __init__(self, id: str, latitude: float, longitude: float, title: str, - reply_markup: InlineKeyboardMarkup = None, input_message_content: InputMessageContent = None, - thumb_url: str = None, thumb_width: int = None, thumb_height: int = None): - self.type = 'location' - self.id: str = id - self.latitude: float = latitude - self.longitude: float = longitude - self.title: str = title - self.reply_markup: InlineKeyboardMarkup = reply_markup - self.input_message_content: InputMessageContent = input_message_content - self.thumb_url: str = thumb_url - self.thumb_width: int = thumb_width - self.thumb_height: int = thumb_height - - -class InlineQueryResultVenue(InlineQueryResult): - """ - Represents a venue. By default, the venue will be sent by the user. - Alternatively, you can use input_message_content to send a message with the specified - content instead of the venue. - - https://core.telegram.org/bots/api#inlinequeryresultvenue - """ - - def __init__(self, id: str, latitude: float, longitude: float, title: str, address: str, - foursquare_id: str = None, reply_markup: InlineKeyboardMarkup = None, - input_message_content: InputMessageContent = None, thumb_url: str = None, thumb_width: int = None, - thumb_height: int = None): - self.type = 'venue' - self.id: str = id - self.latitude: float = latitude - self.longitude: float = longitude - self.title: str = title - self.address: str = address - self.foursquare_id: str = foursquare_id - self.reply_markup: InlineKeyboardMarkup = reply_markup - self.input_message_content: InputMessageContent = input_message_content - self.thumb_url: str = thumb_url - self.thumb_width: int = thumb_width - self.thumb_height: int = thumb_height - - -class InlineQueryResultContact(InlineQueryResult): - """ - Represents a contact with a phone number. - - By default, this contact will be sent by the user. - - Alternatively, you can use input_message_content to send a message with the specified content instead - of the contact. - - https://core.telegram.org/bots/api#inlinequeryresultcontact - """ - - def __init__(self, id: str, phone_number: str, first_name: str, last_name: str = None, - reply_markup: InlineKeyboardMarkup = None, input_message_content: InputMessageContent = None, - thumb_url: str = None, thumb_width: int = None, thumb_height: int = None): - self.type = 'contact' - self.id: str = id - self.phone_number: str = phone_number - self.first_name: str = first_name - self.last_name: str = last_name - self.reply_markup: InlineKeyboardMarkup = reply_markup - self.input_message_content: InputMessageContent = input_message_content - self.thumb_url: str = thumb_url - self.thumb_width: int = thumb_width - self.thumb_height: int = thumb_height - - -class InlineQueryResultGame(InlineQueryResult): - """ - Represents a Game. - - https://core.telegram.org/bots/api#inlinequeryresultgame - """ - - def __init__(self, id: str, game_short_name: str, reply_markup: InlineKeyboardMarkup = None): - self.type = 'game' - self.id: str = id - self.game_short_name: str = game_short_name - self.reply_markup: InlineKeyboardMarkup = reply_markup - - -class InlineQueryResultCachedPhoto(InlineQueryResult): - """ - Represents a link to a photo stored on the Telegram servers. - - By default, this photo will be sent by the user with an optional caption. - - Alternatively, you can use input_message_content to send a message with the specified - content instead of the photo. - - https://core.telegram.org/bots/api#inlinequeryresultcachedphoto - """ - - def __init__(self, id: str, photo_file_id: str, title: str = None, description: str = None, - caption: str = None, reply_markup: InlineKeyboardMarkup = None, - input_message_content: InputMessageContent = None): - self.type = 'photo' - self.id: str = id - self.photo_file_id: str = photo_file_id - self.title: str = title - self.description: str = description - self.caption: str = caption - self.reply_markup: InlineKeyboardMarkup = reply_markup - self.input_message_content: InputMessageContent = input_message_content - - -class InlineQueryResultCachedGif(InlineQueryResult): - """ - Represents a link to an animated GIF file stored on the Telegram servers. - - By default, this animated GIF file will be sent by the user with an optional caption. - - Alternatively, you can use input_message_content to send a message with specified content - instead of the animation. - - https://core.telegram.org/bots/api#inlinequeryresultcachedgif - """ - - def __init__(self, id: str, gif_file_id: str, title: str = None, caption: str = None, - reply_markup: InlineKeyboardMarkup = None, input_message_content: InputMessageContent = None): - self.type = 'gif' - self.id: str = id - self.gif_file_id: str = gif_file_id - self.title: str = title - self.caption: str = caption - self.reply_markup: InlineKeyboardMarkup = reply_markup - self.input_message_content: InputMessageContent = input_message_content - - -class InlineQueryResultCachedMpeg4Gif(InlineQueryResult): - """ - Represents a link to a video animation (H.264/MPEG-4 AVC video without sound) stored on the Telegram servers. - - By default, this animated MPEG-4 file will be sent by the user with an optional caption. - - Alternatively, you can use input_message_content to send a message with the specified content - instead of the animation. - - https://core.telegram.org/bots/api#inlinequeryresultcachedmpeg4gif - """ - - def __init__(self, id: str, mpeg4_file_id: str, title: str = None, caption: str = None, - reply_markup: InlineKeyboardMarkup = None, input_message_content: InputMessageContent = None): - self.type = 'mpeg4_gif' - self.id: str = id - self.mpeg4_file_id: str = mpeg4_file_id - self.title: str = title - self.caption: str = caption - self.reply_markup: InlineKeyboardMarkup = reply_markup - self.input_message_content: InputMessageContent = input_message_content - - -class InlineQueryResultCachedSticker(InlineQueryResult): - """ - Represents a link to a sticker stored on the Telegram servers. - - By default, this sticker will be sent by the user. - - Alternatively, you can use input_message_content to send a message with the specified content - instead of the sticker. - - https://core.telegram.org/bots/api#inlinequeryresultcachedsticker - """ - - def __init__(self, id: str, sticker_file_id: str, reply_markup: InlineKeyboardMarkup = None, - input_message_content: InputMessageContent = None): - self.type = 'sticker' - self.id: str = id - self.sticker_file_id: str = sticker_file_id - self.reply_markup: InlineKeyboardMarkup = reply_markup - self.input_message_content: InputMessageContent = input_message_content - - -class InlineQueryResultCachedDocument(InlineQueryResult): - """ - Represents a link to a file stored on the Telegram servers. - - By default, this file will be sent by the user with an optional caption. - - Alternatively, you can use input_message_content to send a message with the specified content - instead of the file. - - https://core.telegram.org/bots/api#inlinequeryresultcacheddocument - """ - - def __init__(self, id: str, title: str, document_file_id: str, description: str = None, - caption: str = None, reply_markup: InlineKeyboardMarkup = None, - input_message_content: InputMessageContent = None): - self.type = 'document' - self.id: str = id - self.title: str = title - self.document_file_id: str = document_file_id - self.description: str = description - self.caption: str = caption - self.reply_markup: InlineKeyboardMarkup = reply_markup - self.input_message_content: InputMessageContent = input_message_content - - -class InlineQueryResultCachedVideo(InlineQueryResult): - """ - Represents a link to a video file stored on the Telegram servers. - By default, this video file will be sent by the user with an optional caption. - Alternatively, you can use input_message_content to send a message with the specified content instead - of the video. - - https://core.telegram.org/bots/api#inlinequeryresultcachedvideo - """ - - def __init__(self, id: str, video_file_id: str, title: str, description: str = None, caption: str = None, - reply_markup: InlineKeyboardMarkup = None, input_message_content: InputMessageContent = None): - self.type = 'video' - self.id: str = id - self.video_file_id: str = video_file_id - self.title: str = title - self.description: str = description - self.caption: str = caption - self.reply_markup: InlineKeyboardMarkup = reply_markup - self.input_message_content: InputMessageContent = input_message_content - - -class InlineQueryResultCachedVoice(InlineQueryResult): - """ - Represents a link to a voice message stored on the Telegram servers. - - By default, this voice message will be sent by the user. - - Alternatively, you can use input_message_content to send a message with the specified content - instead of the voice message. - - https://core.telegram.org/bots/api#inlinequeryresultcachedvoice - """ - - def __init__(self, id: str, voice_file_id: str, title: str, caption: str = None, - reply_markup: InlineKeyboardMarkup = None, input_message_content: InputMessageContent = None): - self.type = 'voice' - self.id: str = id - self.voice_file_id: str = voice_file_id - self.title: str = title - self.caption: str = caption - self.reply_markup: InlineKeyboardMarkup = reply_markup - self.input_message_content: InputMessageContent = input_message_content - - -class InlineQueryResultCachedAudio(InlineQueryResult): - """ - Represents a link to an mp3 audio file stored on the Telegram servers. - - By default, this audio file will be sent by the user. - Alternatively, you can use input_message_content to send a message with the specified content - instead of the audio. - - https://core.telegram.org/bots/api#inlinequeryresultcachedaudio - """ - - def __init__(self, id: str, audio_file_id: str, caption: str = None, - reply_markup: InlineKeyboardMarkup = None, input_message_content: InputMessageContent = None): - self.type = 'audio' - self.id: str = id - self.audio_file_id: str = audio_file_id - self.caption: str = caption - self.reply_markup: InlineKeyboardMarkup = reply_markup - self.input_message_content: InputMessageContent = input_message_content - - -class InputTextMessageContent(InputMessageContent): - """ - Represents the content of a text message to be sent as the result of an inline query. - - https://core.telegram.org/bots/api#inputtextmessagecontent - """ - - def __init__(self, message_text: str, parse_mode: str = None, disable_web_page_preview: bool = None): - self.message_text: str = message_text - self.parse_mode: str = parse_mode - self.disable_web_page_preview: bool = disable_web_page_preview - - -class InputLocationMessageContent(InputMessageContent): - """ - Represents the content of a location message to be sent as the result of an inline query. - - https://core.telegram.org/bots/api#inputlocationmessagecontent - """ - - def __init__(self, latitude: float, longitude: float): - self.latitude: float = latitude - self.longitude: float = longitude - - -class InputVenueMessageContent(InputMessageContent): - """ - Represents the content of a venue message to be sent as the result of an inline query. - - https://core.telegram.org/bots/api#inputvenuemessagecontent - """ - - def __init__(self, latitude: float, longitude: float, title: str, address: str, foursquare_id: str = None): - self.latitude: float = latitude - self.longitude: float = longitude - self.title: str = title - self.address: str = address - self.foursquare_id: str = foursquare_id - - -class InputContactMessageContent(InputMessageContent): - """ - Represents the content of a contact message to be sent as the result of an inline query. - - https://core.telegram.org/bots/api#inputcontactmessagecontent - """ - - def __init__(self, phone_number: str, first_name: str, last_name: str = None): - self.phone_number: str = phone_number - self.first_name: str = first_name - self.last_name: str = last_name diff --git a/aiogram/types/invoice.py b/aiogram/types/invoice.py deleted file mode 100644 index 234bc3f9..00000000 --- a/aiogram/types/invoice.py +++ /dev/null @@ -1,26 +0,0 @@ -from .base import Deserializable - - -class Invoice(Deserializable): - """ - This object contains basic information about an invoice. - - https://core.telegram.org/bots/api#invoice - """ - - def __init__(self, title, description, start_parameter, currency, total_amount): - self.title: str = title - self.description: str = description - self.start_parameter: str = start_parameter - self.currency: str = currency - self.total_amount: int = total_amount - - @classmethod - def de_json(cls, raw_data): - title = raw_data.get('title') - description = raw_data.get('description') - start_parameter = raw_data.get('start_parameter') - currency = raw_data.get('currency') - total_amount = raw_data.get('total_amount') - - return Invoice(title, description, start_parameter, currency, total_amount) diff --git a/aiogram/types/labeled_price.py b/aiogram/types/labeled_price.py deleted file mode 100644 index 11830756..00000000 --- a/aiogram/types/labeled_price.py +++ /dev/null @@ -1,13 +0,0 @@ -from .base import Serializable - - -class LabeledPrice(Serializable): - """ - This object represents a portion of the price for goods or services. - - https://core.telegram.org/bots/api#labeledprice - """ - - def __init__(self, label, amount): - self.label = label - self.amount = amount diff --git a/aiogram/types/location.py b/aiogram/types/location.py deleted file mode 100644 index a6225672..00000000 --- a/aiogram/types/location.py +++ /dev/null @@ -1,20 +0,0 @@ -from .base import Deserializable - - -class Location(Deserializable): - """ - This object represents a point on the map. - - https://core.telegram.org/bots/api#location - """ - - def __init__(self, longitude, latitude): - self.longitude = longitude - self.latitude = latitude - - @classmethod - def de_json(cls, raw_data): - longitude = raw_data.get('longitude') - latitude = raw_data.get('latitude') - - return Location(longitude, latitude) diff --git a/aiogram/types/mask_position.py b/aiogram/types/mask_position.py deleted file mode 100644 index 8e3d181b..00000000 --- a/aiogram/types/mask_position.py +++ /dev/null @@ -1,24 +0,0 @@ -from .base import Deserializable - - -class MaskPosition(Deserializable): - """ - This object describes the position on faces where a mask should be placed by default. - - https://core.telegram.org/bots/api#maskposition - """ - - def __init__(self, point, x_shift, y_shift, zoom): - self.point: str = point - self.x_shift: float = x_shift - self.y_shift: float = y_shift - self.zoom: float = zoom - - @classmethod - def de_json(cls, raw_data): - point = raw_data.get('point') - x_shift = raw_data.get('x_shift') - y_shift = raw_data.get('y_shift') - zoom = raw_data.get('zoom') - - return cls(point=point, x_shift=x_shift, y_shift=y_shift, zoom=zoom) diff --git a/aiogram/types/message.py b/aiogram/types/message.py deleted file mode 100644 index de70af6b..00000000 --- a/aiogram/types/message.py +++ /dev/null @@ -1,289 +0,0 @@ -import datetime - -from .audio import Audio -from .base import Deserializable -from .chat import Chat -from .contact import Contact -from .document import Document -from .game import Game -from .invoice import Invoice -from .location import Location -from .message_entity import MessageEntity -from .photo_size import PhotoSize -from .sticker import Sticker -from .successful_payment import SuccessfulPayment -from .user import User -from .venue import Venue -from .video import Video -from .video_note import VideoNote -from .voice import Voice -from ..utils.exceptions import TelegramAPIError -from ..utils.helper import Item, HelperMode, Helper, ListItem - - -class Message(Deserializable): - """ - This object represents a message. - - https://core.telegram.org/bots/api#message - """ - - def __init__(self, message_id, from_user, date, chat, forward_from, forward_from_chat, forward_from_message_id, - forward_signature, forward_date, reply_to_message, edit_date, author_signature, text, entities, audio, - document, game, photo, sticker, video, voice, video_note, new_chat_members, caption, contact, location, - venue, left_chat_member, new_chat_title, new_chat_photo, delete_chat_photo, group_chat_created, - supergroup_chat_created, channel_chat_created, migrate_to_chat_id, migrate_from_chat_id, - pinned_message, invoice, successful_payment, content_type): - self.message_id: int = message_id - self.from_user: User = from_user - self.date: datetime.datetime = date - self.chat: Chat = chat - self.forward_from: User = forward_from - self.forward_from_chat: Chat = forward_from_chat - self.forward_from_message_id: int = forward_from_message_id - self.forward_signature: str = forward_signature - self.forward_date: datetime.datetime = forward_date - self.reply_to_message: Message = reply_to_message - self.edit_date: datetime.datetime = edit_date - self.author_signature: str = author_signature - self.text: str = text - self.entities = entities - self.audio = audio - self.document = document - self.game = game - self.photo = photo - self.sticker = sticker - self.video = video - self.voice = voice - self.video_note = video_note - self.new_chat_members = new_chat_members - self.caption = caption - self.contact = contact - self.location = location - self.venue = venue - self.left_chat_member = left_chat_member - self.new_chat_title = new_chat_title - self.new_chat_photo = new_chat_photo - self.delete_chat_photo = delete_chat_photo - self.group_chat_created = group_chat_created - self.supergroup_chat_created = supergroup_chat_created - self.channel_chat_created = channel_chat_created - self.migrate_to_chat_id = migrate_to_chat_id - self.migrate_from_chat_id = migrate_from_chat_id - self.pinned_message = pinned_message - self.invoice = invoice - self.successful_payment = successful_payment - - self.content_type = content_type - - @classmethod - def de_json(cls, raw_data): - message_id = raw_data.get('message_id') - from_user = User.deserialize(raw_data.get('from')) - date = cls._parse_date(raw_data.get('date', 0)) - chat = Chat.deserialize(raw_data.get('chat', {})) - forward_from = User.deserialize(raw_data.get('forward_from', {})) - forward_from_chat = Chat.deserialize(raw_data.get('forward_from_chat', {})) - forward_from_message_id = raw_data.get('forward_from_message_id') - forward_signature = raw_data.get('forward_signature') - forward_date = cls._parse_date(raw_data.get('forward_date', 0)) - reply_to_message = Message.deserialize(raw_data.get('reply_to_message', {})) - edit_date = cls._parse_date(raw_data.get('edit_date', 0)) - author_signature = raw_data.get('author_signature') - text = raw_data.get('text') - entities = MessageEntity.deserialize(raw_data.get('entities')) - audio = Audio.deserialize(raw_data.get('audio')) - document = Document.deserialize(raw_data.get('document')) - game = Game.deserialize(raw_data.get('game')) - photo = PhotoSize.deserialize(raw_data.get('photo')) - sticker = Sticker.deserialize(raw_data.get('sticker')) - video = Video.deserialize(raw_data.get('video')) - voice = Voice.deserialize(raw_data.get('voice')) - video_note = VideoNote.deserialize(raw_data.get('video_note')) - new_chat_members = User.deserialize(raw_data.get('new_chat_members')) - caption = raw_data.get('caption') - contact = Contact.deserialize(raw_data.get('contact')) - location = Location.deserialize(raw_data.get('location')) - venue = Venue.deserialize(raw_data.get('venue')) - left_chat_member = User.deserialize(raw_data.get('left_chat_member')) - new_chat_title = raw_data.get('new_chat_title') - new_chat_photo = raw_data.get('new_chat_photo') - delete_chat_photo = PhotoSize.deserialize(raw_data.get('delete_chat_photo')) - group_chat_created = raw_data.get('group_chat_created') - supergroup_chat_created = raw_data.get('supergroup_chat_created') - channel_chat_created = raw_data.get('channel_chat_created') - migrate_to_chat_id = raw_data.get('migrate_to_chat_id') - migrate_from_chat_id = raw_data.get('migrate_from_chat_id') - pinned_message = Message.deserialize(raw_data.get('pinned_message')) - invoice = Invoice.deserialize(raw_data.get('invoice')) - successful_payment = SuccessfulPayment.deserialize(raw_data.get('successful_payment')) - - if text: - content_type = ContentType.TEXT[0] - elif audio: - content_type = ContentType.AUDIO[0] - elif document: - content_type = ContentType.DOCUMENT[0] - elif game: - content_type = ContentType.GAME[0] - elif photo: - content_type = ContentType.PHOTO[0] - elif sticker: - content_type = ContentType.STICKER[0] - elif video: - content_type = ContentType.VIDEO[0] - elif voice: - content_type = ContentType.VOICE[0] - elif new_chat_members: - content_type = ContentType.NEW_CHAT_MEMBERS[0] - elif left_chat_member: - content_type = ContentType.LEFT_CHAT_MEMBER[0] - elif invoice: - content_type = ContentType.INVOICE[0] - elif successful_payment: - content_type = ContentType.SUCCESSFUL_PAYMENT[0] - else: - content_type = ContentType.UNKNOWN[0] - - return Message(message_id, from_user, date, chat, forward_from, forward_from_chat, forward_from_message_id, - forward_signature, forward_date, reply_to_message, edit_date, author_signature, text, entities, - audio, document, game, photo, sticker, video, voice, video_note, new_chat_members, caption, - contact, location, venue, left_chat_member, new_chat_title, new_chat_photo, delete_chat_photo, - group_chat_created, supergroup_chat_created, channel_chat_created, migrate_to_chat_id, - migrate_from_chat_id, pinned_message, invoice, successful_payment, content_type) - - def is_command(self): - """ - Check message text is command - :return: bool - """ - return self.text and self.text.startswith('/') - - def get_full_command(self): - """ - Split command and args - :return: tuple of (command, args) - """ - if self.is_command(): - command, _, args = self.text.partition(' ') - return command, args - - def get_command(self): - command = self.get_full_command() - if command: - return command[0] - - def get_args(self): - command = self.get_full_command() - if command: - return command[1].strip() - - @property - def md_text(self): - text = self.text - - if self.text and self.entities: - for entity in reversed(self.entities): - text = entity.apply_md(text) - - return text - - @property - def html_text(self): - text = self.text - - if self.text and self.entities: - for entity in reversed(self.entities): - text = entity.apply_html(text) - - return text - - async def reply(self, text, parse_mode=None, disable_web_page_preview=None, - disable_notification=None, reply_markup=None) -> 'Message': - """ - Reply to this message - - :param text: str - :param parse_mode: str - :param disable_web_page_preview: bool - :param disable_notification: bool - :param reply_markup: - :return: :class:`aoigram.types.Message` - """ - return await self.bot.send_message(self.chat.id, text, parse_mode, disable_web_page_preview, - disable_notification, self.message_id, reply_markup) - - async def forward(self, chat_id, disable_notification=None) -> 'Message': - """ - Forward this message - - :param chat_id: - :param disable_notification: - :return: - """ - return await self.bot.forward_message(chat_id, self.chat.id, self.message_id, disable_notification) - - async def delete(self): - """ - Delete this message - - :return: bool - """ - try: - await self.bot.delete_message(self.chat.id, self.message_id) - except TelegramAPIError: - return False - return True - - async def pin(self, disable_notification: bool = False): - return await self.chat.pin_message(self.message_id, disable_notification) - - -class ContentType(Helper): - """ - List of message content types - - :key: TEXT - :key: AUDIO - :key: DOCUMENT - :key: GAME - :key: PHOTO - :key: STICKER - :key: VIDEO - :key: VOICE - :key: NEW_CHAT_MEMBERS - :key: LEFT_CHAT_MEMBER - :key: INVOICE - :key: SUCCESSFUL_PAYMENT - :key: UNKNOWN - """ - mode = HelperMode.snake_case - - TEXT = ListItem() # text - AUDIO = ListItem() # audio - DOCUMENT = ListItem() # document - GAME = ListItem() # game - PHOTO = ListItem() # photo - STICKER = ListItem() # sticker - VIDEO = ListItem() # video - VOICE = ListItem() # voice - NEW_CHAT_MEMBERS = ListItem() # new_chat_members - LEFT_CHAT_MEMBER = ListItem() # left_chat_member - INVOICE = ListItem() # invoice - SUCCESSFUL_PAYMENT = ListItem() # successful_payment - - UNKNOWN = 'unknown' - - -class ParseMode(Helper): - """ - Parse modes - - :key: MARKDOWN - :key: HTML - """ - - mode = HelperMode.lowercase - - MARKDOWN = Item() - HTML = Item() diff --git a/aiogram/types/message_entity.py b/aiogram/types/message_entity.py deleted file mode 100644 index 24efbd0f..00000000 --- a/aiogram/types/message_entity.py +++ /dev/null @@ -1,95 +0,0 @@ -from .base import Deserializable -from .user import User -from ..utils import markdown -from ..utils.helper import Helper, Item, HelperMode - - -class MessageEntity(Deserializable): - """ - This object represents one special entity in a text message. For example, hashtags, usernames, URLs, etc. - - https://core.telegram.org/bots/api#messageentity - """ - - def __init__(self, type, offset, length, url, user): - self.type: str = type - self.offset: int = offset - self.length: int = length - self.url: str = url - self.user: User = user - - @classmethod - def de_json(cls, raw_data): - type = raw_data.get('type') - offset = raw_data.get('offset') - length = raw_data.get('length') - url = raw_data.get('url') - user = User.deserialize(raw_data.get('user')) - - return MessageEntity(type, offset, length, url, user) - - def _apply(self, text, func): - return text[:self.offset] + \ - func(text[self.offset:self.offset + self.length]) + \ - text[self.offset + self.length:] - - def apply_md(self, text): - if self.type == MessageEntityType.BOLD: - return self._apply(text, markdown.bold) - elif self.type == MessageEntityType.ITALIC: - return self._apply(text, markdown.italic) - elif self.type == MessageEntityType.PRE: - return self._apply(text, markdown.pre) - elif self.type == MessageEntityType.CODE: - return self._apply(text, markdown.code) - elif self.type == MessageEntityType.URL: - return self._apply(text, lambda url: markdown.link(url, url)) - elif self.type == MessageEntityType.TEXT_LINK: - return self._apply(text, lambda url: markdown.link(url, self.url)) - return text - - def apply_html(self, text): - if self.type == MessageEntityType.BOLD: - return self._apply(text, markdown.hbold) - elif self.type == MessageEntityType.ITALIC: - return self._apply(text, markdown.hitalic) - elif self.type == MessageEntityType.PRE: - return self._apply(text, markdown.hpre) - elif self.type == MessageEntityType.CODE: - return self._apply(text, markdown.hcode) - elif self.type == MessageEntityType.URL: - return self._apply(text, lambda url: markdown.hlink(url, url)) - elif self.type == MessageEntityType.TEXT_LINK: - return self._apply(text, lambda url: markdown.hlink(url, self.url)) - return text - - -class MessageEntityType(Helper): - """ - List of entity types - - :key: MENTION - :key: HASHTAG - :key: BOT_COMMAND - :key: URL - :key: EMAIL - :key: BOLD - :key: ITALIC - :key: CODE - :key: PRE - :key: TEXT_LINK - :key: TEXT_MENTION - """ - mode = HelperMode.snake_case - - MENTION = Item() # mention - @username - HASHTAG = Item() # hashtag - BOT_COMMAND = Item() # bot_command - URL = Item() # url - EMAIL = Item() # email - BOLD = Item() # bold - bold text - ITALIC = Item() # italic - italic text - CODE = Item() # code - monowidth string - PRE = Item() # pre - monowidth block - TEXT_LINK = Item() # text_link - for clickable text URLs - TEXT_MENTION = Item() # text_mention - for users without usernames diff --git a/aiogram/types/order_info.py b/aiogram/types/order_info.py deleted file mode 100644 index 9328e7ab..00000000 --- a/aiogram/types/order_info.py +++ /dev/null @@ -1,25 +0,0 @@ -from .base import Deserializable -from .shipping_address import ShippingAddress - - -class OrderInfo(Deserializable): - """ - his object represents information about an order. - - https://core.telegram.org/bots/api#orderinfo - """ - - def __init__(self, name, phone_number, email, shipping_address): - self.name: str = name - self.phone_number: str = phone_number - self.email: str = email - self.shipping_address: ShippingAddress = shipping_address - - @classmethod - def de_json(cls, raw_data): - name = raw_data.get('name') - phone_number = raw_data.get('phone_number') - email = raw_data.get('email') - shipping_address = ShippingAddress.deserialize(raw_data.get('shipping_address')) - - return OrderInfo(name, phone_number, email, shipping_address) diff --git a/aiogram/types/photo_size.py b/aiogram/types/photo_size.py deleted file mode 100644 index 686164d7..00000000 --- a/aiogram/types/photo_size.py +++ /dev/null @@ -1,28 +0,0 @@ -from .base import deserialize, Deserializable - - -class PhotoSize(Deserializable): - """ - This object represents one size of a photo or a file / sticker thumbnail. - - https://core.telegram.org/bots/api#photosize - """ - - def __init__(self, file_id, width, height, file_size): - self.file_id: str = file_id - self.width: int = width - self.height: int = height - self.file_size: int = file_size - - @classmethod - def de_json(cls, raw_data): - file_id = raw_data.get('file_id') - width = raw_data.get('width') - height = raw_data.get('height') - file_size = raw_data.get('file_size') - - return PhotoSize(file_id, width, height, file_size) - - @classmethod - def parse_array(cls, photos): - return [deserialize(PhotoSize, photo) for photo in photos] if photos else None diff --git a/aiogram/types/pre_checkout_query.py b/aiogram/types/pre_checkout_query.py deleted file mode 100644 index bbe96d67..00000000 --- a/aiogram/types/pre_checkout_query.py +++ /dev/null @@ -1,32 +0,0 @@ -from .base import Deserializable -from .order_info import OrderInfo -from .user import User - - -class PreCheckoutQuery(Deserializable): - """ - This object contains information about an incoming pre-checkout query. - - https://core.telegram.org/bots/api#precheckoutquery - """ - - def __init__(self, id, from_user, currency, total_amount, invoice_payload, shipping_option_id, order_info): - self.id: str = id - self.from_user: User = from_user - self.currency: str = currency - self.total_amount: int = total_amount - self.invoice_payload: str = invoice_payload - self.shipping_option_id: str = shipping_option_id - self.order_info: OrderInfo = order_info - - @classmethod - def de_json(cls, raw_data): - id = raw_data.get('id') - from_user = User.deserialize(raw_data.get('from')) - currency = raw_data.get('currency') - total_amount = raw_data.get('total_amount') - invoice_payload = raw_data.get('invoice_payload') - shipping_option_id = raw_data.get('shipping_option_id') - order_info = OrderInfo.deserialize(raw_data.get('order_info')) - - return PreCheckoutQuery(id, from_user, currency, total_amount, invoice_payload, shipping_option_id, order_info) diff --git a/aiogram/types/reply_keyboard.py b/aiogram/types/reply_keyboard.py deleted file mode 100644 index bd251f7e..00000000 --- a/aiogram/types/reply_keyboard.py +++ /dev/null @@ -1,90 +0,0 @@ -from .base import Serializable - - -class ReplyKeyboardMarkup(Serializable): - """ - This object represents a custom keyboard with reply options - - https://core.telegram.org/bots/api#replykeyboardmarkup - """ - - def __init__(self, resize_keyboard=None, one_time_keyboard=None, selective=None, row_width=3): - self.resize_keyboard = resize_keyboard - self.one_time_keyboard = one_time_keyboard - self.selective = selective - self.row_width = row_width - - self.keyboard = [] - - def add(self, *args): - i = 1 - row = [] - for button in args: - if isinstance(button, str): - row.append({'text': button}) - elif isinstance(button, bytes): - row.append({'text': button.decode('utf-8')}) - else: - row.append(button.to_json()) - if i % self.row_width == 0: - self.keyboard.append(row) - row = [] - i += 1 - if len(row) > 0: - self.keyboard.append(row) - - def row(self, *args): - btn_array = [] - for button in args: - if isinstance(button, str): - btn_array.append({'text': button}) - else: - btn_array.append(button.to_json()) - self.keyboard.append(btn_array) - return self - - def to_json(self): - return {key: value for key, value in self.__dict__.items() if value and key != 'row_width'} - - -class KeyboardButton(Serializable): - """ - This object represents one button of the reply keyboard. - - For simple text buttons String can be used instead of this object to specify text of the button. - - Optional fields are mutually exclusive - - https://core.telegram.org/bots/api#keyboardbutton - """ - - def __init__(self, text, request_contact=None, request_location=None): - self.text = text - self.request_contact = request_contact - self.request_location = request_location - - def to_json(self): - return self.__dict__ - - -class ReplyKeyboardRemove(Serializable): - """ - Upon receiving a message with this object, - Telegram clients will remove the current custom keyboard and display the default letter-keyboard. - - By default, custom keyboards are displayed until a new keyboard - is sent by a bot. - - An exception is made for one-time keyboards that are hidden immediately after the user presses a button - - https://core.telegram.org/bots/api#replykeyboardremove - """ - - def __init__(self, selective=None): - self.selective = selective - - def to_json(self): - json_dict = {'remove_keyboard': True} - if self.selective: - json_dict['selective'] = True - return json_dict diff --git a/aiogram/types/response_parameters.py b/aiogram/types/response_parameters.py deleted file mode 100644 index 28283b54..00000000 --- a/aiogram/types/response_parameters.py +++ /dev/null @@ -1,20 +0,0 @@ -from .base import Deserializable - - -class ResponseParameters(Deserializable): - """ - Contains information about why a request was unsuccessfull. - - https://core.telegram.org/bots/api#responseparameters - """ - - def __init__(self, migrate_to_chat_id, retry_after): - self.migrate_to_chat_id = migrate_to_chat_id - self.retry_after = retry_after - - @classmethod - def de_json(cls, raw_data): - migrate_to_chat_id = data.get('migrate_to_chat_id') - retry_after = data.get('retry_after') - - return ResponseParameters(migrate_to_chat_id, retry_after) diff --git a/aiogram/types/shipping_address.py b/aiogram/types/shipping_address.py deleted file mode 100644 index 4c467a67..00000000 --- a/aiogram/types/shipping_address.py +++ /dev/null @@ -1,28 +0,0 @@ -from .base import Deserializable - - -class ShippingAddress(Deserializable): - """ - This object represents a shipping address. - - https://core.telegram.org/bots/api#shippingaddress - """ - - def __init__(self, country_code, state, city, street_line1, street_line2, post_code): - self.country_code: str = country_code - self.state: str = state - self.city: str = city - self.street_line1: str = street_line1 - self.street_line2: str = street_line2 - self.post_code: str = post_code - - @classmethod - def de_json(cls, raw_data): - country_code = raw_data.get('country_code') - state = raw_data.get('state') - city = raw_data.get('city') - street_line1 = raw_data.get('street_line1') - street_line2 = raw_data.get('street_line2') - post_code = raw_data.get('post_code') - - return ShippingAddress(country_code, state, city, street_line1, street_line2, post_code) diff --git a/aiogram/types/shipping_option.py b/aiogram/types/shipping_option.py deleted file mode 100644 index 2ff38fab..00000000 --- a/aiogram/types/shipping_option.py +++ /dev/null @@ -1,14 +0,0 @@ -from .base import Serializable - - -class ShippingOption(Serializable): - """ - This object represents one shipping option. - - https://core.telegram.org/bots/api#shippingoption - """ - - def __init__(self, id, title, prices): - self.id = id - self.title = title - self.prices = prices diff --git a/aiogram/types/shipping_query.py b/aiogram/types/shipping_query.py deleted file mode 100644 index c9485c86..00000000 --- a/aiogram/types/shipping_query.py +++ /dev/null @@ -1,26 +0,0 @@ -from .base import Deserializable -from .shipping_address import ShippingAddress -from .user import User - - -class ShippingQuery(Deserializable): - """ - This object contains information about an incoming shipping query. - - https://core.telegram.org/bots/api#shippingquery - """ - - def __init__(self, id, from_user, invoice_payload, shipping_address): - self.id: str = id - self.from_user: User = from_user - self.invoice_payload: str = invoice_payload - self.shipping_address: ShippingAddress = shipping_address - - @classmethod - def de_json(cls, raw_data): - id = raw_data.get('id') - from_user = User.deserialize(raw_data.get('from')) - invoice_payload = raw_data.get('invoice_payload') - shipping_address = ShippingAddress.deserialize(raw_data.get('shipping_address')) - - return ShippingQuery(id, from_user, invoice_payload, shipping_address) diff --git a/aiogram/types/sticker.py b/aiogram/types/sticker.py deleted file mode 100644 index d57e87da..00000000 --- a/aiogram/types/sticker.py +++ /dev/null @@ -1,34 +0,0 @@ -from .base import Deserializable -from .mask_position import MaskPosition -from .photo_size import PhotoSize - - -class Sticker(Deserializable): - """ - This object represents a sticker. - - https://core.telegram.org/bots/api#sticker - """ - - def __init__(self, file_id, width, height, thumb, emoji, set_name, mask_position, file_size): - self.file_id: str = file_id - self.width: int = width - self.height: int = height - self.thumb: PhotoSize = thumb - self.emoji: str = emoji - self.set_name: str = set_name - self.mask_position: MaskPosition = mask_position - self.file_size: int = file_size - - @classmethod - def de_json(cls, raw_data): - file_id = raw_data.get('file_id') - width = raw_data.get('width') - height = raw_data.get('height') - thumb = PhotoSize.deserialize(raw_data.get('thumb')) - emoji = raw_data.get('emoji') - set_name = raw_data.get('set_name') - mask_position = MaskPosition.deserialize(raw_data.get('mask_position')) - file_size = raw_data.get('file_size') - - return Sticker(file_id, width, height, thumb, emoji, set_name, mask_position, file_size) diff --git a/aiogram/types/sticker_set.py b/aiogram/types/sticker_set.py deleted file mode 100644 index 83752af8..00000000 --- a/aiogram/types/sticker_set.py +++ /dev/null @@ -1,25 +0,0 @@ -from .base import Deserializable -from .sticker import Sticker - - -class StickerSet(Deserializable): - """ - This object represents a sticker set. - - https://core.telegram.org/bots/api#stickerset - """ - - def __init__(self, name, title, is_mask, stickers): - self.name: str = name - self.title: str = title - self.is_mask: bool = is_mask - self.stickers: [Sticker] = stickers - - @classmethod - def de_json(cls, raw_data): - name = raw_data.get('name') - title = raw_data.get('title') - is_mask = raw_data.get('is_mask') - stickers = Sticker.deserialize(raw_data.get('stickers')) - - return StickerSet(name, title, is_mask, stickers) diff --git a/aiogram/types/successful_payment.py b/aiogram/types/successful_payment.py deleted file mode 100644 index d5946637..00000000 --- a/aiogram/types/successful_payment.py +++ /dev/null @@ -1,33 +0,0 @@ -from .base import Deserializable -from .order_info import OrderInfo - - -class SuccessfulPayment(Deserializable): - """ - This object contains basic information about a successful payment. - - https://core.telegram.org/bots/api#successfulpayment - """ - - def __init__(self, currency, total_amount, invoice_payload, shipping_option_id, order_info, - telegram_payment_charge_id, provider_payment_charge_id): - self.currency: str = currency - self.total_amount: int = total_amount - self.invoice_payload: str = invoice_payload - self.shipping_option_id: str = shipping_option_id - self.order_info: OrderInfo = order_info - self.telegram_payment_charge_id: str = telegram_payment_charge_id - self.provider_payment_charge_id: str = provider_payment_charge_id - - @classmethod - def de_json(cls, raw_data): - currency = raw_data.get('currency') - total_amount = raw_data.get('total_amount') - invoice_payload = raw_data.get('invoice_payload') - shipping_option_id = raw_data.get('shipping_option_id') - order_info = OrderInfo.deserialize(raw_data.get('order_info')) - telegram_payment_charge_id = raw_data.get('telegram_payment_charge_id') - provider_payment_charge_id = raw_data.get('provider_payment_charge_id') - - return SuccessfulPayment(currency, total_amount, invoice_payload, shipping_option_id, order_info, - telegram_payment_charge_id, provider_payment_charge_id) diff --git a/aiogram/types/update.py b/aiogram/types/update.py deleted file mode 100644 index b1a7556e..00000000 --- a/aiogram/types/update.py +++ /dev/null @@ -1,70 +0,0 @@ -from .base import Deserializable -from .callback_query import CallbackQuery -from .chosen_inline_result import ChosenInlineResult -from .inline_query import InlineQuery -from .message import Message -from .pre_checkout_query import PreCheckoutQuery -from .shipping_query import ShippingQuery -from ..utils.helper import Helper, ListItem, HelperMode - - -class Update(Deserializable): - """ - This object represents an incoming update. - - At most one of the optional parameters can be present in any given update. - - https://core.telegram.org/bots/api#update - """ - - def __init__(self, update_id, message, edited_message, channel_post, edited_channel_post, inline_query, - chosen_inline_result, callback_query, shipping_query, pre_checkout_query): - self.update_id: int = update_id - self.message: Message = message - self.edited_message: Message = edited_message - self.channel_post: Message = channel_post - self.edited_channel_post: Message = edited_channel_post - self.inline_query: InlineQuery = inline_query - self.chosen_inline_result: ChosenInlineResult = chosen_inline_result - self.callback_query: CallbackQuery = callback_query - self.shipping_query: ShippingQuery = shipping_query - self.pre_checkout_query: PreCheckoutQuery = pre_checkout_query - - @classmethod - def de_json(cls, raw_data): - update_id = raw_data.get('update_id') - message = Message.deserialize(raw_data.get('message')) - edited_message = Message.deserialize(raw_data.get('edited_message')) - channel_post = Message.deserialize(raw_data.get('channel_post')) - edited_channel_post = Message.deserialize(raw_data.get('edited_channel_post')) - - inline_query = InlineQuery.deserialize(raw_data.get('inline_query')) - chosen_inline_result = ChosenInlineResult.deserialize(raw_data.get('chosen_inline_result')) - callback_query = CallbackQuery.deserialize(raw_data.get('callback_query')) - shipping_query = ShippingQuery.deserialize(raw_data.get('shipping_query')) - pre_checkout_query = PreCheckoutQuery.deserialize(raw_data.get('pre_checkout_query')) - - return Update(update_id, message, edited_message, channel_post, edited_channel_post, inline_query, - chosen_inline_result, callback_query, shipping_query, pre_checkout_query) - - -class AllowedUpdates(Helper): - """ - Helper for allowed_updates parameter in getUpdates and setWebhook methods. - - You can use &, + or | operators for make combination of allowed updates. - - Example: - >>> bot.get_updates(allowed_updates=AllowedUpdates.MESSAGE + AllowedUpdates.EDITED_MESSAGE) - """ - mode = HelperMode.snake_case - - MESSAGE = ListItem() # message - EDITED_MESSAGE = ListItem() # edited_message - CHANNEL_POST = ListItem() # channel_post - EDITED_CHANNEL_POST = ListItem() # edited_channel_post - INLINE_QUERY = ListItem() # inline_query - CHOSEN_INLINE_QUERY = ListItem() # chosen_inline_result - CALLBACK_QUERY = ListItem() # callback_query - SHIPPING_QUERY = ListItem() # shipping_query - PRE_CHECKOUT_QUERY = ListItem() # pre_checkout_query diff --git a/aiogram/types/user.py b/aiogram/types/user.py deleted file mode 100644 index 165abf73..00000000 --- a/aiogram/types/user.py +++ /dev/null @@ -1,88 +0,0 @@ -from ..utils.markdown import link, hlink - -try: - import babel -except ImportError: - babel = None - -from .base import Deserializable - - -class User(Deserializable): - """ - This object represents a Telegram user or bot. - - https://core.telegram.org/bots/api#user - """ - - def __init__(self, id, is_bot, first_name, last_name, username, language_code): - self.id: int = id - self.is_bot: bool = is_bot - self.first_name: str = first_name - self.last_name: str = last_name - self.username: str = username - self.language_code: str = language_code - - @classmethod - def de_json(cls, raw_data: str or dict) -> 'User': - id = raw_data.get('id') - is_bot = raw_data.get('is_bot') - first_name = raw_data.get('first_name') - last_name = raw_data.get('last_name') - username = raw_data.get('username') - language_code = raw_data.get('language_code') - - return User(id, is_bot, first_name, last_name, username, language_code) - - @property - def full_name(self): - """ - You can get full name of user. - - :return: str - """ - full_name = self.first_name - if self.last_name: - full_name += ' ' + self.last_name - return full_name - - @property - def mention(self): - """ - You can get menthion to user (If user have username, otherwise return full name) - - :return: str - """ - if self.username: - return '@' + self.username - return self.full_name - - @property - def locale(self) -> 'babel.core.Locale' or None: - """ - This property require `Babel `_ module - - :return: :class:`babel.core.Locale` - :raise: ImportError: when babel is not installed. - """ - if not babel: - raise ImportError('Babel is not installed!') - if not self.language_code: - return None - if not hasattr(self, '_locale'): - setattr(self, '_locale', babel.core.Locale.parse(self.language_code, sep='-')) - return getattr(self, '_locale') - - @property - def url(self): - return f"tg://user?id={self.id}" - - def get_mention(self, name=None, as_html=False): - if name is None: - name = self.mention - if as_html: - return hlink(name, self.url) - return link(name, self.url) - - async def get_user_profile_photos(self, offset=None, limit=None): - return await self.bot.get_user_profile_photos(self.id, offset, limit) diff --git a/aiogram/types/user_profile_photos.py b/aiogram/types/user_profile_photos.py deleted file mode 100644 index baf4dcc3..00000000 --- a/aiogram/types/user_profile_photos.py +++ /dev/null @@ -1,21 +0,0 @@ -from .base import Deserializable -from .photo_size import PhotoSize - - -class UserProfilePhotos(Deserializable): - """ - This object represent a user's profile pictures. - - https://core.telegram.org/bots/api#userprofilephotos - """ - - def __init__(self, total_count, photos): - self.total_count: int = total_count - self.photos: [PhotoSize] = photos - - @classmethod - def de_json(cls, raw_data): - total_count = raw_data.get('total_count') - photos = [PhotoSize.deserialize(item) for item in raw_data.get('photos')] - - return UserProfilePhotos(total_count, photos) diff --git a/aiogram/types/venue.py b/aiogram/types/venue.py deleted file mode 100644 index ca3d2043..00000000 --- a/aiogram/types/venue.py +++ /dev/null @@ -1,25 +0,0 @@ -from .base import Deserializable -from .location import Location - - -class Venue(Deserializable): - """ - This object represents a venue. - - https://core.telegram.org/bots/api#venue - """ - - def __init__(self, location, title, address, foursquare_id): - self.location: Location = location - self.title: str = title - self.address: str = address - self.foursquare_id: str = foursquare_id - - @classmethod - def de_json(cls, raw_data): - location = Location.deserialize(raw_data.get('location')) - title = raw_data.get('title') - address = raw_data.get('address') - foursquare_id = raw_data.get('foursquare_id') - - return Venue(location, title, address, foursquare_id) diff --git a/aiogram/types/video.py b/aiogram/types/video.py deleted file mode 100644 index decf9f26..00000000 --- a/aiogram/types/video.py +++ /dev/null @@ -1,31 +0,0 @@ -from .base import Deserializable -from .photo_size import PhotoSize - - -class Video(Deserializable): - """ - This object represents a video file. - - https://core.telegram.org/bots/api#video - """ - - def __init__(self, file_id, width, height, duration, thumb, mime_type, file_size): - self.file_id: str = file_id - self.width: int = width - self.height: int = height - self.duration: int = duration - self.thumb: PhotoSize = thumb - self.mime_type = mime_type - self.file_size: int = file_size - - @classmethod - def de_json(cls, raw_data): - file_id = raw_data.get('file_id') - width = raw_data.get('width') - height = raw_data.get('height') - duration = raw_data.get('duration') - thumb = PhotoSize.deserialize(raw_data.get('thumb')) - mime_type = raw_data.get('mime_type') - file_size = raw_data.get('file_size') - - return Video(file_id, width, height, duration, thumb, mime_type, file_size) diff --git a/aiogram/types/video_note.py b/aiogram/types/video_note.py deleted file mode 100644 index 6c70819d..00000000 --- a/aiogram/types/video_note.py +++ /dev/null @@ -1,27 +0,0 @@ -from .base import Deserializable -from .photo_size import PhotoSize - - -class VideoNote(Deserializable): - """ - This object represents a video message. - - https://core.telegram.org/bots/api#videonote - """ - - def __init__(self, file_id, length, duration, thumb, file_size): - self.file_id: str = file_id - self.length: int = length - self.duration: int = duration - self.thumb: PhotoSize = thumb - self.file_size: int = file_size - - @classmethod - def de_json(cls, raw_data): - file_id = raw_data.get('file_id') - length = raw_data.get('length') - duration = raw_data.get('duration') - thumb = PhotoSize.deserialize(raw_data.get('thumb')) - file_size = raw_data.get('file_size') - - return VideoNote(file_id, length, duration, thumb, file_size) diff --git a/aiogram/types/voice.py b/aiogram/types/voice.py deleted file mode 100644 index 8cd4f730..00000000 --- a/aiogram/types/voice.py +++ /dev/null @@ -1,24 +0,0 @@ -from .base import Deserializable - - -class Voice(Deserializable): - """ - This object represents a voice note. - - https://core.telegram.org/bots/api#voice - """ - - def __init__(self, file_id, duration, mime_type, file_size): - self.file_id: str = file_id - self.duration: int = duration - self.mime_type: str = mime_type - self.file_size: int = file_size - - @classmethod - def de_json(cls, raw_data): - file_id = raw_data.get('file_id') - duration = raw_data.get('duration') - mime_type = raw_data.get('mime_type') - file_size = raw_data.get('file_size') - - return Voice(file_id, duration, mime_type, file_size) diff --git a/aiogram/types/webhook_info.py b/aiogram/types/webhook_info.py deleted file mode 100644 index 51eb9229..00000000 --- a/aiogram/types/webhook_info.py +++ /dev/null @@ -1,32 +0,0 @@ -from .base import Deserializable - - -class WebhookInfo(Deserializable): - """ - Contains information about the current status of a webhook. - - https://core.telegram.org/bots/api#webhookinfo - """ - - def __init__(self, url, has_custom_certificate, pending_update_count, last_error_date, last_error_message, - max_connections, allowed_updates): - self.url: str = url - self.has_custom_certificate: bool = has_custom_certificate - self.pending_update_count: int = pending_update_count - self.last_error_date: int = last_error_date - self.last_error_message: str = last_error_message - self.max_connections: int = max_connections - self.allowed_updates: [str] = allowed_updates - - @classmethod - def de_json(cls, raw_data): - url = raw_data.get('url') - has_custom_certificate = raw_data.get('has_custom_certificate') - pending_update_count = raw_data.get('pending_update_count') - last_error_date = cls._parse_date(raw_data.get('last_error_date')) - last_error_message = raw_data.get('last_error_message') - max_connections = raw_data.get('max_connections') - allowed_updates = raw_data.get('allowed_updates') - - return WebhookInfo(url, has_custom_certificate, pending_update_count, last_error_date, last_error_message, - max_connections, allowed_updates)