feat: Guild.fetchMember(s) and Member.fetch

This commit is contained in:
Yuzu 2022-07-30 17:42:46 -05:00
parent 75e35a1ecb
commit fe82c9b4a2
3 changed files with 40 additions and 0 deletions

View File

@ -73,6 +73,20 @@ export function GUILD_MEMBER(guildId: Snowflake, userId: Snowflake): string {
return `/guilds/${guildId}/members/${userId}`;
}
export interface ListGuildMembers {
limit?: number;
after?: string;
}
export function GUILD_MEMBERS(guildId: Snowflake, options?: ListGuildMembers) {
let url = `/guilds/${guildId}/members?`;
if (options?.limit) url += `limit=${options.limit}`;
if (options?.after) url += `&after=${options.after}`;
return url;
}
/** used to ban members */
export function GUILD_BAN(guildId: Snowflake, userId: Snowflake): string {
return `/guilds/${guildId}/bans/${userId}`;

View File

@ -24,6 +24,7 @@ import {
VideoQualityModes,
GetBans,
GetInvite,
ListGuildMembers,
} from '@biscuitland/api-types';
import type { ImageFormat, ImageSize } from '../utils/util';
import { GuildFeatures, PremiumTiers } from '@biscuitland/api-types';
@ -44,6 +45,7 @@ import {
GUILD_PRUNE,
GUILD_INVITES,
GUILD_MEMBER,
GUILD_MEMBERS,
GUILD_MEMBER_ROLE,
GUILD_ROLE,
GUILD_ROLES,
@ -1210,4 +1212,22 @@ export class Guild extends BaseGuild implements Model {
return new GuildPreview(this.session, preview);
}
/** fetches a member */
async fetchMember(memberId: Snowflake): Promise<Member> {
const member = await this.session.rest.get<DiscordMemberWithUser>(
GUILD_MEMBER(this.id, memberId)
);
return new Member(this.session, member, this.id);
}
/** fetches multiple members */
async fetchMembers(options?: ListGuildMembers): Promise<Member[]> {
const members = await this.session.rest.get<DiscordMemberWithUser[]>(
GUILD_MEMBERS(this.id, options)
);
return members.map((member) => new Member(this.session, member, this.id));
}
}

View File

@ -164,6 +164,12 @@ export class Member implements Model {
);
}
async fetch(): Promise<Member> {
const member = await Guild.prototype.fetchMember.call({ session: this.session, id: this.guildId }, this.id);
return member;
}
/** gets the members's guild avatar, not to be confused with Member.user.avatarURL() */
avatarURL(options: AvatarOptions): string {
let url: string;