feat: Guild.editMember

This commit is contained in:
Yuzu 2022-07-01 10:34:45 -05:00
parent 44a9f11fd6
commit 5abbe95750
2 changed files with 40 additions and 4 deletions

View File

@ -1,7 +1,7 @@
import type { Model } from "./Base.ts"; import type { Model } from "./Base.ts";
import type { Snowflake } from "../util/Snowflake.ts"; import type { Snowflake } from "../util/Snowflake.ts";
import type { Session } from "../session/Session.ts"; import type { Session } from "../session/Session.ts";
import type { DiscordEmoji, DiscordGuild, DiscordInviteMetadata, DiscordRole } from "../vendor/external.ts"; import type { DiscordEmoji, DiscordGuild, DiscordMemberWithUser, DiscordInviteMetadata, DiscordRole } from "../vendor/external.ts";
import type { GetInvite } from "../util/Routes.ts"; import type { GetInvite } from "../util/Routes.ts";
import { import {
DefaultMessageNotificationLevels, DefaultMessageNotificationLevels,
@ -56,6 +56,18 @@ export interface CreateGuildBan {
reason?: string; reason?: string;
} }
/**
* @link https://discord.com/developers/docs/resources/guild#modify-guild-member
* */
export interface ModifyGuildMember {
nick?: string;
roles?: Snowflake[];
mute?: boolean;
deaf?: boolean;
channelId?: Snowflake;
communicationDisabledUntil?: number;
}
/** /**
* Represents a guild * Represents a guild
* @link https://discord.com/developers/docs/resources/guild#guild-object * @link https://discord.com/developers/docs/resources/guild#guild-object
@ -236,14 +248,32 @@ export class Guild extends BaseGuild implements Model {
/** /**
* Kicks the member * Kicks the member
*/ */
async kickMember(memebrId: Snowflake, { reason }: { reason?: string }) { async kickMember(memberId: Snowflake, { reason }: { reason?: string }) {
await this.session.rest.runMethod<undefined>( await this.session.rest.runMethod<undefined>(
this.session.rest, this.session.rest,
"DELETE", "DELETE",
Routes.GUILD_MEMBER(this.id, memebrId), Routes.GUILD_MEMBER(this.id, memberId),
{ reason }, { reason },
); );
} }
async editMember(memberId: Snowflake, options: ModifyGuildMember) {
const member = await this.session.rest.runMethod<DiscordMemberWithUser>(
this.session.rest,
"PATCH",
Routes.GUILD_MEMBER(this.id, memberId)
{
nick: options.nick,
roles: options.roles,
mute: options.mute,
deaf: options.deaf,
channel_id: options.channelId,
communication_disabled_until: options.communicationDisabledUntil ? new Date(options.communicationDisabledUntil).toISOString() : undefined,
},
);
return new Member(this.session, member, this.id);
}
} }
export default Guild; export default Guild;

View File

@ -3,7 +3,7 @@ import type { Snowflake } from "../util/Snowflake.ts";
import type { Session } from "../session/Session.ts"; import type { Session } from "../session/Session.ts";
import type { DiscordMemberWithUser } from "../vendor/external.ts"; import type { DiscordMemberWithUser } from "../vendor/external.ts";
import type { ImageFormat, ImageSize } from "../util/shared/images.ts"; import type { ImageFormat, ImageSize } from "../util/shared/images.ts";
import type { CreateGuildBan } from "./Guild.ts"; import type { CreateGuildBan, ModifyGuildMember } from "./Guild.ts";
import { iconBigintToHash, iconHashToBigInt } from "../util/hash.ts"; import { iconBigintToHash, iconHashToBigInt } from "../util/hash.ts";
import User from "./User.ts"; import User from "./User.ts";
import Guild from "./Guild.ts"; import Guild from "./Guild.ts";
@ -68,6 +68,12 @@ export class Member implements Model {
return this; return this;
} }
async edit(options: ModifyGuildMember): Promise<Member> {
const member = await Guild.prototype.editMember.call({ id: this.guildId, session: this.session }, this.user.id, options);
return member;
}
/** gets the user's avatar */ /** gets the user's avatar */
avatarUrl(options: { format?: ImageFormat; size?: ImageSize } = { size: 128 }) { avatarUrl(options: { format?: ImageFormat; size?: ImageSize } = { size: 128 }) {
let url: string; let url: string;