diff options
Diffstat (limited to 'discord/sticker.py')
| -rw-r--r-- | discord/sticker.py | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/discord/sticker.py b/discord/sticker.py new file mode 100644 index 00000000..e67314e1 --- /dev/null +++ b/discord/sticker.py @@ -0,0 +1,134 @@ +# -*- coding: utf-8 -*- + +""" +The MIT License (MIT) + +Copyright (c) 2015-2020 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 .mixins import Hashable +from .asset import Asset +from .utils import snowflake_time +from .enums import StickerType, try_enum + +class Sticker(Hashable): + """Represents a sticker + + .. versionadded:: 1.6 + + .. container:: operations + + .. describe:: str(x) + + Returns the name of the sticker + + .. describe:: x == y + + Checks if the sticker is equal to another sticker + + .. describe:: x != y + + Checks if the sticker is not equal to another sticker + + Attributes + ---------- + name: :class:`str` + The sticker's name + id: :class:`int` + The id of the sticker + description: :class:`str` + The description of the sticker + pack_id: :class:`int` + The id of the sticker's pack + format: :class:`StickerType` + The format for the sticker's image + image: :class:`str` + The sticker's image + tags: List[:class:`str`] + A list of tags for the sticker + preview_asset: Optional[:class:`str`] + The sticker's preview asset hash + """ + __slots__ = ('_state', 'id', 'name', 'description', 'pack_id', 'format', 'image', 'tags', 'preview_asset') + + def __init__(self, *, state, data): + self._state = state + self.id = int(data['id']) + self.name = data['name'] + self.description = data['description'] + self.pack_id = int(data['pack_id']) + self.format = try_enum(StickerType, data['format_type']) + self.image = data['asset'] + self.tags = [tag.strip() for tag in data.get('tags', '').split(',')] + self.preview_asset = data.get('preview_asset') + + def __repr__(self): + return '<{0.__class__.__name__} id={0.id} name={0.name!r}>'.format(self) + + def __str__(self): + return self.name + + @property + def created_at(self): + """:class:`datetime.datetime`: Returns the sticker's creation time in UTC as a naive datetime.""" + return snowflake_time(self.id) + + @property + def image_url(self): + """Returns an :class:`Asset` for the sticker's image. + + .. note:: + This will return ``None`` if the format is ``StickerType.lottie`` + + Returns + ------- + Optional[:class:`Asset`] + The resulting CDN asset. + """ + return self.image_url_as() + + def image_url_as(self, *, size=1024): + """Optionally returns an :class:`Asset` for the sticker's image. + + The size must be a power of 2 between 16 and 4096. + + .. note:: + This will return ``None`` if the format is ``StickerType.lottie``. + + Parameters + ----------- + size: :class:`int` + The size of the image to display. + + Raises + ------ + InvalidArgument + Invalid ``size``. + + Returns + ------- + Optional[:class:`Asset`] + The resulting CDN asset or ``None``. + """ + if self.format is StickerType.lottie: + return None + + return Asset._from_sticker_url(self._state, self, size=size) |