Coverage for polar/integrations/discord/webhook.py: 100%

15 statements  

« prev     ^ index     » next       coverage.py v7.15.2, created at 2026-10-07 12:42 +0000

1from typing import NotRequired, TypedDict 

2 

3from polar.config import settings 

4 

5 

6class DiscordEmbedFooter(TypedDict): 

7 text: str 

8 icon_url: NotRequired[str] 

9 proxy_icon_url: NotRequired[str] 

10 

11 

12class DiscordEmbedImage(TypedDict): 

13 url: str 

14 proxy_url: NotRequired[str] 

15 height: NotRequired[int] 

16 width: NotRequired[int] 

17 

18 

19class DiscordEmbedThumbnail(DiscordEmbedImage): 

20 pass 

21 

22 

23class DiscordEmbedVideo(DiscordEmbedImage): 

24 pass 

25 

26 

27class DiscordEmbedProvider(TypedDict): 

28 name: NotRequired[str] 

29 url: NotRequired[str] 

30 

31 

32class DiscordEmbedAuthor(TypedDict): 

33 name: str 

34 url: NotRequired[str] 

35 icon_url: NotRequired[str] 

36 proxy_icon_url: NotRequired[str] 

37 

38 

39class DiscordEmbedField(TypedDict): 

40 name: str 

41 value: str 

42 inline: NotRequired[bool] 

43 

44 

45class DiscordEmbed(TypedDict): 

46 title: NotRequired[str] 

47 type: NotRequired[str] 

48 description: NotRequired[str] 

49 url: NotRequired[str] 

50 timestamp: NotRequired[str] 

51 color: NotRequired[int] 

52 footer: NotRequired[DiscordEmbedFooter] 

53 image: NotRequired[DiscordEmbedImage] 

54 thumbnail: NotRequired[DiscordEmbedThumbnail] 

55 video: NotRequired[DiscordEmbedVideo] 

56 provider: NotRequired[DiscordEmbedProvider] 

57 author: NotRequired[DiscordEmbedAuthor] 

58 fields: NotRequired[list[DiscordEmbedField]] 

59 

60 

61class DiscordPayload(TypedDict): 

62 content: NotRequired[str] 

63 embeds: NotRequired[list[DiscordEmbed]] 

64 

65 

66def get_branded_discord_embed(embed: DiscordEmbed) -> DiscordEmbed: 

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 }