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