Coverage for polar/integrations/discord/webhook.py: 98%
46 statements
« prev ^ index » next coverage.py v7.10.6, created at 2025-12-05 17:15 +0000
« prev ^ index » next coverage.py v7.10.6, created at 2025-12-05 17:15 +0000
1from typing import NotRequired, TypedDict 1a
3from polar.config import settings 1a
6class DiscordEmbedFooter(TypedDict): 1a
7 text: str 1a
8 icon_url: NotRequired[str] 1a
9 proxy_icon_url: NotRequired[str] 1a
12class DiscordEmbedImage(TypedDict): 1a
13 url: str 1a
14 proxy_url: NotRequired[str] 1a
15 height: NotRequired[int] 1a
16 width: NotRequired[int] 1a
19class DiscordEmbedThumbnail(DiscordEmbedImage): 1a
20 pass 1a
23class DiscordEmbedVideo(DiscordEmbedImage): 1a
24 pass 1a
27class DiscordEmbedProvider(TypedDict): 1a
28 name: NotRequired[str] 1a
29 url: NotRequired[str] 1a
32class DiscordEmbedAuthor(TypedDict): 1a
33 name: str 1a
34 url: NotRequired[str] 1a
35 icon_url: NotRequired[str] 1a
36 proxy_icon_url: NotRequired[str] 1a
39class DiscordEmbedField(TypedDict): 1a
40 name: str 1a
41 value: str 1a
42 inline: NotRequired[bool] 1a
45class DiscordEmbed(TypedDict): 1a
46 title: NotRequired[str] 1a
47 type: NotRequired[str] 1a
48 description: NotRequired[str] 1a
49 url: NotRequired[str] 1a
50 timestamp: NotRequired[str] 1a
51 color: NotRequired[int] 1a
52 footer: NotRequired[DiscordEmbedFooter] 1a
53 image: NotRequired[DiscordEmbedImage] 1a
54 thumbnail: NotRequired[DiscordEmbedThumbnail] 1a
55 video: NotRequired[DiscordEmbedVideo] 1a
56 provider: NotRequired[DiscordEmbedProvider] 1a
57 author: NotRequired[DiscordEmbedAuthor] 1a
58 fields: NotRequired[list[DiscordEmbedField]] 1a
61class DiscordPayload(TypedDict): 1a
62 content: NotRequired[str] 1a
63 embeds: NotRequired[list[DiscordEmbed]] 1a
66def get_branded_discord_embed(embed: DiscordEmbed) -> DiscordEmbed: 1a
67 return {
68 "color": 25343,
69 "author": {
70 "name": "Polar.sh",
71 "icon_url": settings.FAVICON_URL,
72 },
73 "thumbnail": {
74 "url": settings.THUMBNAIL_URL,
75 },
76 "footer": {
77 "text": "Powered by Polar.sh",
78 },
79 **embed,
80 }