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
JavaScript
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 };