refactor: move member adding to manager (#6231)

Co-authored-by: Vlad Frangu <kingdgrizzle@gmail.com>
Co-authored-by: Antonio Román <kyradiscord@gmail.com>
Co-authored-by: Sugden <28943913+NotSugden@users.noreply.github.com>
This commit is contained in:
ckohen
2021-07-31 04:21:47 -07:00
committed by GitHub
parent 2a07055cc0
commit 198a5c490d
4 changed files with 87 additions and 42 deletions

8
typings/index.d.ts vendored
View File

@@ -573,7 +573,6 @@ export class Guild extends AnonymousGuild {
public readonly widgetChannel: TextChannel | null;
public widgetChannelId: Snowflake | null;
public widgetEnabled: boolean | null;
public addMember(user: UserResolvable, options: AddGuildMemberOptions): Promise<GuildMember>;
public createTemplate(name: string, description?: string): Promise<GuildTemplate>;
public delete(): Promise<Guild>;
public discoverySplashURL(options?: StaticImageURLOptions): string | null;
@@ -2341,6 +2340,11 @@ export class GuildManager extends CachedManager<Snowflake, Guild, GuildResolvabl
export class GuildMemberManager extends CachedManager<Snowflake, GuildMember, GuildMemberResolvable> {
public constructor(guild: Guild, iterable?: Iterable<unknown>);
public guild: Guild;
public add(
user: UserResolvable,
options: AddGuildMemberOptions & { fetchWhenExisting: false },
): Promise<GuildMember | null>;
public add(user: UserResolvable, options: AddGuildMemberOptions): Promise<GuildMember>;
public ban(user: UserResolvable, options?: BanOptions): Promise<GuildMember | User | Snowflake>;
public edit(user: UserResolvable, data: GuildMemberEditData, reason?: string): Promise<void>;
public fetch(
@@ -2609,6 +2613,8 @@ export interface AddGuildMemberOptions {
roles?: Collection<Snowflake, Role> | RoleResolvable[];
mute?: boolean;
deaf?: boolean;
force?: boolean;
fetchWhenExisting?: boolean;
}
export type AllowedImageFormat = 'webp' | 'png' | 'jpg' | 'jpeg' | 'gif';

View File

@@ -404,6 +404,9 @@ client.on('ready', async () => {
});
});
// This is to check that stuff is the right type
declare const assertIsPromiseMember: (m: Promise<GuildMember>) => void;
client.on('guildCreate', g => {
const channel = g.channels.cache.random();
if (!channel) return;
@@ -411,6 +414,32 @@ client.on('guildCreate', g => {
channel.setName('foo').then(updatedChannel => {
console.log(`New channel name: ${updatedChannel.name}`);
});
// @ts-expect-error no options
assertIsPromiseMember(g.members.add(testUserId));
// @ts-expect-error no access token
assertIsPromiseMember(g.members.add(testUserId, {}));
// @ts-expect-error invalid role resolvable
assertIsPromiseMember(g.members.add(testUserId, { accessToken: 'totallyRealAccessToken', roles: [g.roles.cache] }));
assertType<Promise<GuildMember | null>>(
g.members.add(testUserId, { accessToken: 'totallyRealAccessToken', fetchWhenExisting: false }),
);
assertIsPromiseMember(g.members.add(testUserId, { accessToken: 'totallyRealAccessToken' }));
assertIsPromiseMember(
g.members.add(testUserId, {
accessToken: 'totallyRealAccessToken',
mute: true,
deaf: false,
roles: [g.roles.cache.first()!],
force: true,
fetchWhenExisting: true,
}),
);
});
client.on('messageReactionRemoveAll', async message => {