Última atividade 1702277529

Simple api used to fetch a discord user

typings.d.ts Bruto
1export type Snowflake = string;
2
3export type DiscordUser = {
4 id: Snowflake;
5 username?: string;
6 global_name?: string;
7 discriminator?: any;
8 accent_color?: ColorData['accent_color'];
9 banner_color?: ColorData['banner_color'];
10 created_at?: any;
11 avatar?: AvatarData;
12 banner?: BannerData;
13}
14
15export type AvatarDecorationData = {
16 asset: string;
17 sku_id: string;
18}
19
20export type AvatarData = {
21 id: DiscordUser['avatar'];
22 link: string;
23 is_animated: any;
24}
25
26export type BannerData = {
27 id: DiscordUser['banner'];
28 link: string;
29 color: number | null;
30 is_animated: any;
31}
32
33export type ColorData = {
34 accent_color: number | any;
35 banner_color: number | any;
36}
user.service.ts Bruto
1export const fetchDiscordUser = async ({ id }): Promise<DiscordUser> => {
2
3 let response = await fetch(env.DISCORD.API_URL + `users/${id}`, {
4 headers: {
5 'Content-Type': 'application/json',
6 'Authorization': `Bot ${env.DISCORD.API_KEY}`
7 }
8 });
9
10 if (response.status >= 429) throw boom.tooManyRequests('Too many requests');
11 if (response.status >= 427) throw boom.tooManyRequests('Too many requests');
12
13 let user = await response.json() as DiscordUser;
14 let bannner: any = user?.banner ? user.banner : '';
15 let avataar: any = user?.avatar ? user.avatar : '';
16
17 return {
18 id: user.id,
19 global_name: user.global_name,
20 created_at: `${new Date(await snowflakeToTimestamp(user.id))}`,
21 avatar: {
22 id: avataar,
23 link: `https://cdn.discordapp.com/avatars/${user.id}/${avataar}.png`,
24 is_animated: avataar.startsWith('a_') ? true : false,
25 },
26 banner: {
27 id: bannner,
28 link: `https://cdn.discordapp.com/banners/${user.id}/${bannner}.png`,
29 is_animated: bannner.startsWith('a_') ? true : false,
30 color: user.banner_color,
31 },
32 };
33}