UNPKG

jalter

Version:

<a href="https://scathach.dev"><img align="right" src="https://cdn.discordapp.com/attachments/711217607876804629/932506038865911848/alter.png" width=28%></a>

327 lines (285 loc) 10 kB
const fetch = require('node-fetch'); const apiPrefix = 'https://discord.com/api/v9' require('dotenv').config(); const delay = ms => new Promise(res => setTimeout(res, ms)) const qs = obj => Object.entries(obj).map(([k, v]) => `${k}=${v}`).join('&') /** * @param {*} apiPath The path to the API endpoint * @param {*} body The body of the request * @param {string} [method='GET'] The method of the request * @returns {*} The response from the v9 API */ const apiCall = (apiPath, body, method = 'GET') => { if (!process.env.TOKEN) throw new Error("The authorization token is missing.") return fetch(`${apiPrefix}${apiPath}`, { body: body ? JSON.stringify(body) : undefined, method, headers: { Accept: '*/*', 'Accept-Language': 'en-US', Authorization: process.env.TOKEN, 'Content-Type': 'application/json', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) discord/1.0.9002 Chrome/83.0.4103.122 Electron/9.3.5 Safari/537.36' } }) .then(res => res.json().catch(() => { })) .catch(console.error) } /** * @type {*} */ var rest = { /** * Get messages from a channel * @param {number} channelID The channel ID * @param {any} params The parameters of the request * @returns {Promise<Message>} */ getMessages: (channelId, params = {}) => apiCall(`/channels/${channelId}/messages?limit=100&${qs(params)}`), /** * Send message to a channel * @param {number} channelID The channel ID * @param {any} content The message content * @param {any} options The message options * @returns {Promise<Message>} */ sendMessage: (channelId, message, tts, body = {}) => apiCall(`/channels/${channelId}/messages`, { content: message, tts: !!tts, ...body }, 'POST'), /** * Edit a message * @param {number} channelID The channel ID * @param {number} messageID The message ID * @param {any} content The message content * @param {any} options The message options * @returns {Promise<Message>} */ editMessage: (channelId, messageId, newMessage, body = {}) => apiCall(`/channels/${channelId}/messages/${messageId}`, { content: newMessage, ...body }, 'PATCH'), /** * Delete a message * @param {number} channelID The channel ID * @param {number} messageID The message ID * @returns {Promise<Message>} */ deleteMessage: (channelId, messageId) => apiCall(`/channels/${channelId}/messages/${messageId}`, null, 'DELETE'), /** * Send embed to a channel * @param {number} channelID The channel ID * @param {any} embed The embed object * @returns {Promise<Message>} */ sendEmbed: (channelId, embed = { title: 'Title', description: 'Description' }) => apiCall(`/channels/${channelId}/messages`, { embed }, 'POST'), /** * Audit logs for a channel * @param {number} guildID The guild ID * @returns {Promise<Message>} */ auditLog: guildId => apiCall(`/guilds/${guildId}/audit-logs`), /** * Get list roles * @param {number} guildID The guild ID * @returns {Promise<Message>} */ getRoles: guildId => apiCall(`/guilds/${guildId}/roles`), /** * Create a role * @param {number} guildID The guild ID * @param {any} options The role options * @returns {Promise<Message>} */ createRole: (guildId, name) => apiCall(`/guilds/${guildId}/roles`, { name }, 'POST'), /** * Delete a role * @param {number} guildID The guild ID * @param {number} roleID The role ID * @returns {Promise<Message>} */ deleteRole: (guildId, roleId) => apiCall(`/guilds/${guildId}/roles/${roleId}`, null, 'DELETE'), /** * Get ban list * @param {number} guildID The guild ID * @returns {Promise<Message>} */ getBans: guildId => apiCall(`/guilds/${guildId}/bans`), /** * Ban an users * @param {number} guildID The guild ID * @param {number} userID The user ID * @param {any} reason The options * @returns {Promise<Message>} */ banUser: (guildId, userId, reason) => apiCall(`/guilds/${guildId}/bans/${userId}`, { delete_message_days: '7', reason }, 'PUT'), /** * Unban users * @param {number} guildID The guild ID * @param {number} userID The user ID * @returns {Promise<Message>} */ unbanUser: (guildId, userId) => apiCall(`/guilds/${guildId}/bans/${userId}`, null, 'DELETE'), /** * Kick users * @param {number} guildID The guild ID * @param {number} userID The user ID * @returns {Promise<Message>} */ kickUser: (guildId, userId) => apiCall(`/guilds/${guildId}/members/${userId}`, null, 'DELETE'), /** * Add a role * @param {number} guildID The guild ID * @param {number} userID The user ID * @param {number} roleID The role ID * @returns {Promise<Message>} */ addRole: (guildId, userId, roleId) => apiCall(`/guilds/${guildId}/members/${userId}/roles/${roleId}`, null, 'PUT'), /** * Remove role * @param {number} guildID The guild ID * @param {number} userID The user ID * @param {number} roleID The role ID * @returns {Promise<Message>} */ removeRole: (guildId, userId, roleId) => apiCall(`/guilds/${guildId}/members/${userId}/roles/${roleId}`, null, 'DELETE'), /** * Get channel list * @param {number} guildID The guild ID * @returns {Promise<Message>} */ getChannels: guildId => apiCall(`/guilds/${guildId}/channels`), /** * Create a new channels * @param {number} guildID The guild ID * @param {any} options The channel options * @param {any} options The channel options * @returns {Promise<Message>} */ createChannel: (guildId, name, type) => apiCall(`/guilds/${guildId}/channels`, { name, type }, 'POST'), /** * Pinned msg check * @param {number} channelID The guild ID * @returns {Promise<Message>} */ pinnedMessages: channelId => apiCall(`/channels/${channelId}/pins`), /** * Add new pin * @param {number} channelID The channel ID * @param {number} messageID The message ID * @returns {Promise<Message>} */ addPin: (channelId, messageId) => apiCall(`/channels/${channelId}/pins/${messageId}`, null, 'PUT'), /** * Delete pin message * @param {number} channelID The channel ID * @param {number} messageID The message ID * @returns {Promise<Message>} */ deletePin: (channelId, messageId) => apiCall(`/channels/${channelId}/pins/${messageId}`, null, 'DELETE'), /** * Get emoji list * @param {number} guildID The guild ID * @returns {Promise<Message>} */ listEmojis: guildId => apiCall(`/guilds/${guildId}/emojis`), /** * Get specific emoji * @param {number} guildID The guild ID * @param {number} emojiID The emoji ID * @returns {Promise<Message>} */ getEmoji: (guildId, emojiId) => apiCall(`/guilds/${guildId}/emojis/${emojiId}`), /** * Create a new emoji * @param {number} guildID The guild ID * @param {string} name The emoji name * @param {string} image The emoji image * @param {any} roles The emoji roles * @returns {Promise<Message>} */ createEmoji: (guildId, name, image, roles) => apiCall(`/guilds/${guildId}`, { name, image, roles }, 'POST'), /** * Edit emoji * @param {number} guildID The guild ID * @param {number} emojiID The emoji ID * @param {string} name The emoji name * @param {any} roles The emoji roles * @returns {Promise<Message>} */ editEmoji: (guildId, emojiId, name, roles) => apiCall(`/guilds/${guildId}/${emojiId}`, { name, roles }, 'PATCH'), /** * Delete emoji * @param {number} guildID The guild ID * @param {number} emojiID The emoji ID * @returns {Promise<Message>} */ deleteEmoji: (guildId, emojiId) => apiCall(`/guilds/${guildId}/${emojiId}`, null, 'DELETE'), /** * Change nickname * @param {number} guildID The guild ID * @param {any} nick The nickname * @returns {Promise<Message>} */ changeNick: (guildId, nick) => apiCall(`/guilds/${guildId}/members/@me/nick`, { nick }, 'PATCH'), /** * Left server * @param {number} guildID The guild ID * @returns {Promise<Message>} */ leaveServer: guildId => apiCall(`/users/@me/guilds/${guildId}`, null, 'DELETE'), /** * Get DMs * @returns {Promise<Message>} */ getDMs: () => apiCall(`/users/@me/channels`), /** * Get user * @param {number} userID The user ID * @returns {Promise<Message>} */ getUser: userId => apiCall(`/users/${userId}`), /** * Get current user * @returns {Promise<Message>} */ getCurrentUser: () => apiCall('/users/@me'), /** * Edit current user * @param {any} options The user options * @param {any} options The user options * @returns {Promise<Message>} */ editCurrentUser: (username, avatar) => apiCall('/users/@me', { username, avatar }, 'PATCH'), /** * Get current user guilds * @returns {Promise<Message>} */ listCurrentUserGuilds: () => apiCall('/users/@me/guilds'), /** * Get list reactions * @param {number} channelID The channel ID * @param {number} messageID The message ID * @param {string} emojiUrl The emoji URL * @returns {Promise<Message>} */ listReactions: (channelId, messageId, emojiUrl) => apiCall(`/channels/${channelId}/messages/${messageId}/reactions/${emojiUrl}/@me`), /** * Add reaction * @param {number} channelID The channel ID * @param {number} messageID The message ID * @param {string} emojiUrl The emoji URL * @returns {Promise<Message>} */ addReaction: (channelId, messageId, emojiUrl) => apiCall(`/channels/${channelId}/messages/${messageId}/reactions/${emojiUrl}/@me`, null, 'PUT'), /** * Delete reactions * @param {number} channelID The channel ID * @param {number} messageID The message ID * @param {string} emojiUrl The emoji URL * @returns {Promise<Message>} */ deleteReaction: (channelId, messageId, emojiUrl) => apiCall(`/channels/${channelId}/messages/${messageId}/reactions/${emojiUrl}/@me`, null, 'DELETE'), /** * Typing * @param {number} channelID The channel ID * @returns {Promise<Message>} */ typing: channelId => apiCall(`/channels/${channelId}/typing`, null, 'POST'), delay, apiCall } module.exports = { rest, delay, apiCall };