UNPKG

@confis/discordapiwrapper

Version:

A fast and lightweight discord api wrapper.

313 lines (301 loc) 11.7 kB
/****************************************************************************** Copyright (c) Microsoft Corporation. Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ***************************************************************************** */ /* global Reflect, Promise, SuppressedError, Symbol, Iterator */ function __classPrivateFieldGet(receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); } function __classPrivateFieldSet(receiver, state, value, kind, f) { if (kind === "m") throw new TypeError("Private method is not writable"); if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; } typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) { var e = new Error(message); return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e; }; /** * A bitfield of all available permissions. */ const PermissionsBitField = { CREATE_INSTANT_INVITE: 0x1, KICK_MEMBERS: 0x2, BAN_MEMBERS: 0x4, ADMINISTRATOR: 0x8, MANAGE_CHANNELS: 0x10, MANAGE_GUILD: 0x20, ADD_REACTIONS: 0x40, VIEW_AUDIT_LOG: 0x80, PRIORITY_SPEAKER: 0x100, STREAM: 0x200, VIEW_CHANNEL: 0x400, SEND_MESSAGES: 0x800, SEND_TTS_MESSAGES: 0x1000, MANAGE_MESSAGES: 0x2000, EMBED_LINKS: 0x4000, ATTACH_FILES: 0x8000, READ_MESSAGE_HISTORY: 0x10000, MENTION_EVERYONE: 0x20000, USE_EXTERNAL_EMOJIS: 0x40000, VIEW_GUILD_INSIGHTS: 0x80000, CONNECT: 0x100000, SPEAK: 0x200000, MUTE_MEMBERS: 0x400000, DEAFEN_MEMBERS: 0x800000, MOVE_MEMBERS: 0x1000000, USE_VAD: 0x2000000, CHANGE_NICKNAME: 0x4000000, MANAGE_NICKNAMES: 0x8000000, MANAGE_ROLES: 0x10000000, MANAGE_WEBHOOKS: 0x20000000, MANAGE_EMOJIS_AND_STICKERS: 0x40000000, USE_APPLICATION_COMMANDS: 0x800000000, REQUEST_TO_SPEAK: 0x100000000, MANAGE_EVENTS: 0x200000000, MANAGE_THREADS: 0x400000000, CREATE_PUBLIC_THREADS: 0x800000000, CREATE_PRIVATE_THREADS: 0x1000000000, USE_EXTERNAL_STICKERS: 0x2000000000, SEND_MESSAGES_IN_THREADS: 0x4000000000, START_EMBEDDED_ACTIVITIES: 0x8000000000, MODERATE_MEMBERS: 0x10000000000, }; /** * Base class for all API objects. */ class Base { constructor(client) { Object.defineProperty(this, "_client", { value: client, configurable: false, enumerable: false, }); } /** * Returns the client */ get client() { return this._client; } _clone() { return Object.assign(Object.create(this), this); } /** * Returns a JSON representation of the object. */ toJson() { const dict = {}; for (const [k, v] of Object.entries(this)) { if (k !== "client") Reflect.set(dict, k, v?.id ?? v?.toJSON?.() ?? v); } return dict; } _patch(data) { } } var _a, _Routes_baseURL; class Routes { static Message(channelID, messageID) { return `${__classPrivateFieldGet(this, _a, "f", _Routes_baseURL)}/channels/${channelID}/messages/${messageID}`; } static ChannelTyping(channelID) { return `${__classPrivateFieldGet(this, _a, "f", _Routes_baseURL)}/channels/${channelID}/typing`; } static SendChannelMessage(channelID) { return `${__classPrivateFieldGet(this, _a, "f", _Routes_baseURL)}/channels/${channelID}/messages`; } static EditChannelMessage(channelID, messageID) { return `${__classPrivateFieldGet(this, _a, "f", _Routes_baseURL)}/channels/${channelID}/messages/${messageID}`; } static InteractionCallback(id, token) { return `${__classPrivateFieldGet(this, _a, "f", _Routes_baseURL)}/interactions/${id}/${token}/callback`; } static OriginalMessage(botID, token) { return `${__classPrivateFieldGet(this, _a, "f", _Routes_baseURL)}/webhooks/${botID}/${token}/messages/@original`; } static InteractionFollowUp(botID, token) { return `${__classPrivateFieldGet(this, _a, "f", _Routes_baseURL)}/webhooks/${botID}/${token}`; } static DMChannel() { return `${__classPrivateFieldGet(this, _a, "f", _Routes_baseURL)}/users/@me/channels`; } static GuildRoute(guildID) { return `${__classPrivateFieldGet(this, _a, "f", _Routes_baseURL)}/users/@me/guilds/${guildID}`; } static GuildBan(guildID, memberID) { return `${__classPrivateFieldGet(this, _a, "f", _Routes_baseURL)}/guilds/${guildID}/bans/${memberID}`; } static GuildKick(guildID, memberID) { return `${__classPrivateFieldGet(this, _a, "f", _Routes_baseURL)}/guilds/${guildID}/members/${memberID}`; } static GuildMember(guildID, memberID) { return `${__classPrivateFieldGet(this, _a, "f", _Routes_baseURL)}/guilds/${guildID}/members/${memberID}`; } static ChannelWebhooks(channelID) { return `${__classPrivateFieldGet(this, _a, "f", _Routes_baseURL)}/channels/${channelID}/webhooks`; } static ChannelWebhookSendMessage(webhookID, webhookToken) { return `${__classPrivateFieldGet(this, _a, "f", _Routes_baseURL)}webhooks/${webhookID}/${webhookToken}?wait=true`; } static Reaction(channelID, messageID, emoji) { return `${__classPrivateFieldGet(this, _a, "f", _Routes_baseURL)}channels/${channelID}/messages/${messageID}/reactions/${encodeURIComponent(emoji)}/@me`; } static GetReaction(channelID, messageID, emoji) { return `${__classPrivateFieldGet(this, _a, "f", _Routes_baseURL)}channels/${channelID}/messages/${messageID}/reactions/${encodeURIComponent(emoji)}`; } static UserReaction(channelID, messageID, emoji, userID) { return `${__classPrivateFieldGet(this, _a, "f", _Routes_baseURL)}channels/${channelID}/messages/${messageID}/reactions/${encodeURIComponent(emoji)}/${userID}`; } } _a = Routes; _Routes_baseURL = { value: "https://discord.com/api/v10/" }; var _Member_guildID, _Member_rolesIDs; /** Member object */ class Member extends Base { constructor(data, client) { super(client); _Member_guildID.set(this, void 0); _Member_rolesIDs.set(this, []); this.joinedAt = new Date(data.joined_at); this.id = data.user.id; this.nick = data.nick; __classPrivateFieldSet(this, _Member_guildID, data.guild_id, "f"); __classPrivateFieldSet(this, _Member_rolesIDs, data.roles, "f"); } toString() { return this.user.toString(); } /** * Get the guild of the member * * @returns A guild object */ get guild() { return this.client.guilds.get(__classPrivateFieldGet(this, _Member_guildID, "f")); } /** * Get the display name of the member * * @returns The display name of the member */ get displayName() { return this.nick || this.user.displayName; } /** * Get the roles of the member * * @returns An array of roles */ get roles() { const roles = []; for (let i = 0; i < __classPrivateFieldGet(this, _Member_rolesIDs, "f").length; i++) { const role = __classPrivateFieldGet(this, _Member_rolesIDs, "f")[i]; const roleObject = this.client.roles.get(role); if (roleObject) { roles.push(roleObject); } } return roles; } /** * Get the user object for the member * * @returns A user object */ get user() { return this.client.users.get(this.id); } /** * Get the permissions of the member * * @returns An array of permissions */ get permissions() { let perms = []; if (this.id === this.guild.ownerID) { for (const key in PermissionsBitField) { perms.push(key); } } else { for (let i = 0; i < this.roles.length; i++) { const permissions = this.roles[i].getPermissions(); for (let i = 0; i < permissions.length; i++) { const permission = permissions[i]; if (!perms.find((a) => a === permission)) { perms.push(permission); } } } } return perms; } /** * Update the member * * @param data New member data */ _patch(data) { Object.defineProperty(this, "roleIDs", { writable: true, configurable: true, }); __classPrivateFieldSet(this, _Member_rolesIDs, [], "f"); for (let i = 0; i < data.roles.length; i++) { const role = data.roles[i]; __classPrivateFieldGet(this, _Member_rolesIDs, "f").push(role.id); } } /** * Bans the member from the guild. * * @param [delete_message_seconds=0] Number of seconds to delete messages for. */ async ban(delete_message_seconds = 0) { await this.client.rest.put(Routes.GuildBan(__classPrivateFieldGet(this, _Member_guildID, "f"), this.id), { delete_message_seconds, }); } /** * Kicks the member from the guild. * * @param [delete_message_seconds=0] Number of seconds to delete messages for. */ async kick() { await this.client.rest.delete(Routes.GuildBan(__classPrivateFieldGet(this, _Member_guildID, "f"), this.id)); } /** * Sets the nickname of the member. * * @param nickname The new nickname for the member. */ async setNick(nickname) { await this.client.rest.patch(Routes.GuildMember(__classPrivateFieldGet(this, _Member_guildID, "f"), this.id === this.client.user.id ? "@me" : this.id), { nick: nickname, }); } /** * Timeout the member. * * @param communicationDisabledUntil The date until which the member's communication is re-enabled. */ async setCommunicationDisabled(communicationDisabledUntil) { await this.client.rest.patch(Routes.GuildMember(__classPrivateFieldGet(this, _Member_guildID, "f"), this.id === this.client.user.id ? "@me" : this.id), { communication_disabled_until: communicationDisabledUntil.toISOString(), }); } } _Member_guildID = new WeakMap(), _Member_rolesIDs = new WeakMap(); exports.Member = Member;