feat: invite endpoints

This commit is contained in:
Yuzu 2022-06-26 19:24:47 -05:00
parent 8c9b667e99
commit 4f178ca962
2 changed files with 48 additions and 7 deletions

View File

@ -1,6 +1,7 @@
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, DiscordRole } from "../vendor/external.ts"; import type { DiscordEmoji, DiscordGuild, DiscordInviteMetadata, DiscordRole } from "../vendor/external.ts";
import type { GetInvite } from "../util/Routes.ts";
import { import {
DefaultMessageNotificationLevels, DefaultMessageNotificationLevels,
ExplicitContentFilterLevels, ExplicitContentFilterLevels,
@ -11,8 +12,8 @@ import { urlToBase64 } from "../util/urlToBase64.ts";
import { Member } from "./Member.ts"; import { Member } from "./Member.ts";
import { BaseGuild } from "./BaseGuild.ts"; import { BaseGuild } from "./BaseGuild.ts";
import { Role } from "./Role.ts"; import { Role } from "./Role.ts";
import { Emoji } from "./Emoji.ts";
import { GuildEmoji } from "./GuildEmoji.ts"; import { GuildEmoji } from "./GuildEmoji.ts";
import { Invite } from "./Invite.ts";
import { Routes } from "../util/mod.ts"; import { Routes } from "../util/mod.ts";
export interface CreateRole { export interface CreateRole {
@ -69,7 +70,7 @@ export class Guild extends BaseGuild {
roles: Role[]; roles: Role[];
emojis: GuildEmoji[]; emojis: GuildEmoji[];
async createEmoji(options: CreateGuildEmoji) { async createEmoji(options: CreateGuildEmoji): Promise<GuildEmoji> {
if (options.image && !options.image.startsWith("data:image/")) { if (options.image && !options.image.startsWith("data:image/")) {
options.image = await urlToBase64(options.image); options.image = await urlToBase64(options.image);
} }
@ -81,10 +82,10 @@ export class Guild extends BaseGuild {
options, options,
); );
return new Emoji(this.session, emoji); return new GuildEmoji(this.session, emoji, this.id);
} }
async deleteEmoji(id: Snowflake, { reason }: { reason?: string } = {}) { async deleteEmoji(id: Snowflake, { reason }: { reason?: string } = {}): Promise<void> {
await this.session.rest.runMethod<undefined>( await this.session.rest.runMethod<undefined>(
this.session.rest, this.session.rest,
"DELETE", "DELETE",
@ -93,7 +94,7 @@ export class Guild extends BaseGuild {
); );
} }
async editEmoji(id: Snowflake, options: ModifyGuildEmoji) { async editEmoji(id: Snowflake, options: ModifyGuildEmoji): Promise<GuildEmoji> {
const emoji = await this.session.rest.runMethod<DiscordEmoji>( const emoji = await this.session.rest.runMethod<DiscordEmoji>(
this.session.rest, this.session.rest,
"PATCH", "PATCH",
@ -104,7 +105,7 @@ export class Guild extends BaseGuild {
return new GuildEmoji(this.session, emoji, this.id); return new GuildEmoji(this.session, emoji, this.id);
} }
async createRole(options: CreateRole) { async createRole(options: CreateRole): Promise<Role> {
let icon: string | undefined; let icon: string | undefined;
if (options.iconHash) { if (options.iconHash) {
@ -135,6 +136,28 @@ export class Guild extends BaseGuild {
async deleteRole(roleId: Snowflake): Promise<void> { async deleteRole(roleId: Snowflake): Promise<void> {
await this.session.rest.runMethod<undefined>(this.session.rest, "DELETE", Routes.GUILD_ROLE(this.id, roleId)); await this.session.rest.runMethod<undefined>(this.session.rest, "DELETE", Routes.GUILD_ROLE(this.id, roleId));
} }
// TODO: edit role
async deleteInvite(inviteCode: string): Promise<void> {
await this.session.rest.runMethod<undefined>(
this.session.rest,
"DELETE",
Routes.INVITE(inviteCode),
{}
);
}
async fetchInvite(inviteCode: string, options: GetInvite): Promise<Invite> {
const inviteMetadata = await this.session.rest.runMethod<DiscordInviteMetadata>(
this.session.rest,
"GET",
Routes.INVITE(inviteCode, options),
);
return new Invite(this.session, inviteMetadata);
}
} }
export default Guild; export default Guild;

View File

@ -117,3 +117,21 @@ export function GUILD_EMOJIS(guildId: Snowflake) {
export function GUILD_EMOJI(guildId: Snowflake, emojiId: Snowflake) { export function GUILD_EMOJI(guildId: Snowflake, emojiId: Snowflake) {
return `/guilds/${guildId}/emojis/${emojiId}`; return `/guilds/${guildId}/emojis/${emojiId}`;
} }
export interface GetInvite {
withCounts?: boolean;
withExpiration?: boolean;
scheduledEventId?: Snowflake;
}
export function INVITE(inviteCode: string, options?: GetInvite) {
let url = `/invites/${inviteCode}?`;
if (options) {
if (options.withCounts) url += `with_counts=${options.withCounts}`;
if (options.withExpiration) url += `&with_expiration=${options.withExpiration}`;
if (options.scheduledEventId) url += `&guild_scheduled_event_id=${options.scheduledEventId}`;
}
return url;
}