Source code for discord.ui.thumbnail

from __future__ import annotations

from typing import TYPE_CHECKING, TypeVar

from ..components import Thumbnail as ThumbnailComponent
from ..components import UnfurledMediaItem, _component_factory
from ..enums import ComponentType
from .item import Item

__all__ = ("Thumbnail",)

if TYPE_CHECKING:
    from ..types.components import ThumbnailComponent as ThumbnailComponentPayload
    from .view import View


T = TypeVar("T", bound="Thumbnail")
V = TypeVar("V", bound="View", covariant=True)


[docs] class Thumbnail(Item[V]): """Represents a UI Thumbnail. .. versionadded:: 2.7 Parameters ---------- url: :class:`str` The url of the thumbnail. This can either be an arbitrary URL or an ``attachment://`` URL to work with local files. description: Optional[:class:`str`] The thumbnail's description, up to 1024 characters. spoiler: Optional[:class:`bool`] Whether the thumbnail has the spoiler overlay. Defaults to ``False``. id: Optional[:class:`int`] The thumbnail's ID. """ __item_repr_attributes__: tuple[str, ...] = ( "url", "description", "spoiler", "id", ) def __init__( self, url: str, *, description: str = None, spoiler: bool = False, id: int = None, ): super().__init__() media = UnfurledMediaItem(url) self._underlying = ThumbnailComponent._raw_construct( type=ComponentType.thumbnail, id=id, media=media, description=description, spoiler=spoiler, ) @property def type(self) -> ComponentType: return self._underlying.type @property def width(self) -> int: return 5 @property def url(self) -> str: """The URL of this thumbnail's media. This can either be an arbitrary URL or an ``attachment://`` URL.""" return self._underlying.media and self._underlying.media.url @url.setter def url(self, value: str) -> None: self._underlying.media.url = value @property def description(self) -> str | None: """The thumbnail's description, up to 1024 characters.""" return self._underlying.description @description.setter def description(self, description: str | None) -> None: self._underlying.description = description @property def spoiler(self) -> bool: """Whether the thumbnail has the spoiler overlay. Defaults to ``False``.""" return self._underlying.spoiler @spoiler.setter def spoiler(self, spoiler: bool) -> None: self._underlying.spoiler = spoiler def to_component_dict(self) -> ThumbnailComponentPayload: return self._underlying.to_dict() @classmethod def from_component(cls: type[T], component: ThumbnailComponent) -> T: return cls( component.media and component.media.url, description=component.description, spoiler=component.spoiler, id=component.id, ) callback = None