diff --git a/discord/types/channel.py b/discord/types/channel.py index 95644392c..d9c9f74d7 100644 --- a/discord/types/channel.py +++ b/discord/types/channel.py @@ -46,7 +46,7 @@ class PartialChannel(TypedDict): class _TextChannelOptional(PartialChannel, total=False): topic: str last_message_id: Optional[Snowflake] - last_pin_timestamp: int + last_pin_timestamp: str rate_limit_per_user: int diff --git a/discord/types/emoji.py b/discord/types/emoji.py new file mode 100644 index 000000000..7c5e4d80e --- /dev/null +++ b/discord/types/emoji.py @@ -0,0 +1,41 @@ +""" +The MIT License (MIT) + +Copyright (c) 2015-present Rapptz + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. +""" + +from typing import Optional, TypedDict +from .snowflake import Snowflake, SnowflakeList +from .user import User + + +class PartialEmoji(TypedDict): + id: Optional[Snowflake] + name: Optional[str] + + +class Emoji(PartialEmoji, total=False): + roles: SnowflakeList + user: User + required_colons: bool + managed: bool + animated: bool + available: bool diff --git a/discord/types/member.py b/discord/types/member.py new file mode 100644 index 000000000..4c162ef1a --- /dev/null +++ b/discord/types/member.py @@ -0,0 +1,42 @@ +""" +The MIT License (MIT) + +Copyright (c) 2015-present Rapptz + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. +""" + +from typing import TypedDict +from .snowflake import SnowflakeList +from .user import User + + +class PartialMember(TypedDict): + roles: SnowflakeList + joined_at: str + deaf: str + mute: str + + +class Member(PartialMember, total=False): + user: User + nick: str + premium_since: str + pending: bool + permissions: str diff --git a/discord/types/message.py b/discord/types/message.py new file mode 100644 index 000000000..8f5de2548 --- /dev/null +++ b/discord/types/message.py @@ -0,0 +1,134 @@ +""" +The MIT License (MIT) + +Copyright (c) 2015-present Rapptz + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. +""" + +from __future__ import annotations + +from typing import List, Literal, Optional, TypedDict, Union +from .snowflake import Snowflake, SnowflakeList +from .member import Member +from .user import User +from .emoji import PartialEmoji +from .embed import Embed +from .channel import ChannelType + + +class ChannelMention(TypedDict): + id: Snowflake + guild_id: Snowflake + type: ChannelType + name: str + + +class Reaction(TypedDict): + count: int + me: bool + emoji: PartialEmoji + + +class Attachment(TypedDict): + id: Snowflake + filename: str + size: int + url: str + proxy_url: str + height: Optional[int] + width: Optional[int] + + +MessageActivityType = Literal[1, 2, 3, 5] + + +class MessageActivity(TypedDict): + type: MessageActivityType + party_id: str + + +class _MessageApplicationOptional(TypedDict, total=False): + cover_image: str + + +class MessageApplication(_MessageApplicationOptional): + id: Snowflake + description: str + icon: Optional[str] + name: str + + +class MessageReference(TypedDict, total=False): + message_id: Snowflake + channel_id: Snowflake + guild_id: Snowflake + fail_if_not_exists: bool + + +class _StickerOptional(TypedDict, total=False): + tags: str + + +StickerFormatType = Literal[1, 2, 3] + + +class Sticker(_StickerOptional): + id: Snowflake + pack_id: Snowflake + name: str + description: str + asset: str + preview_asset: str + format_type: StickerFormatType + + +class _MessageOptional(TypedDict, total=False): + guild_id: Snowflake + member: Member + mention_channels: List[ChannelMention] + reactions: List[Reaction] + nonce: Union[int, str] + webhook_id: int + activity: MessageActivity + application: MessageApplication + message_reference: MessageReference + flags: int + stickers: List[Sticker] + referenced_message: Optional[Message] + + +MessageType = Literal[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 19, 20] + + +class Message(_MessageOptional): + id: Snowflake + channel_id: Snowflake + author: User + content: str + timestamp: str + edited_timestamp: Optional[str] + tts: bool + mention_everyone: bool + mentions: List[User] + mention_roles: SnowflakeList + attachments: List[Attachment] + embeds: List[Embed] + pinned: bool + type: MessageType diff --git a/discord/types/user.py b/discord/types/user.py index 2951254fa..fba5aef5b 100644 --- a/discord/types/user.py +++ b/discord/types/user.py @@ -23,7 +23,7 @@ DEALINGS IN THE SOFTWARE. """ from .snowflake import Snowflake -from typing import Optional, TypedDict +from typing import Literal, Optional, TypedDict class PartialUser(TypedDict): @@ -31,3 +31,18 @@ class PartialUser(TypedDict): username: str discriminator: str avatar: Optional[str] + + +PremiumType = Literal[0, 1, 2] + + +class User(PartialUser, total=False): + bot: bool + system: bool + mfa_enabled: bool + local: str + verified: bool + email: Optional[str] + flags: int + premium_type: PremiumType + public_flags: int