@nicat.dcw/discord-roles
Version:
🧃 Light Weight Discord Linked Roles Module with Discord API Interaction
66 lines (64 loc) • 2.19 kB
JavaScript
const fetch = require("node-fetch")
const post = require("./utils/post")
const update = require("./utils/updateMetaData")
const push = require("./utils/pushMetaData")
const storage = require("./utils/storage")
const {blue, bgGreen} = require("colorette")
module.exports = class Client {
constructor({CLIENT_TOKEN,secret, CLIENT_ID}){
if(!CLIENT_TOKEN) throw TypeError("[ERROR] Client Token missing in constructor ")
if(!CLIENT_ID) throw TypeError("[ERROR] Client ID missing in constructor ")
this.token = CLIENT_TOKEN;
this.id = CLIENT_ID;
const url = `https://discord.com/api/v10/applications/${this.id}/role-connections/metadata`;
this.endpoint = url;
console.log(bgGreen(blue(`• Client`) + ` has Connected!.`))
}
add(options = {}){
post({
key: options.key,
token: this.token,
body: options.body,
id: this.id,
url: this.endpoint
})
this.body = options.body;
}
generateCallBack(options = {}){
const state = `OMGOMGOMGOMG`;
if(!options.callback) throw TypeError("[ERROR] Callback url is required for this method.")
const url = new URL('https://discord.com/api/oauth2/authorize');
url.searchParams.set('client_id', this.id);
url.searchParams.set('redirect_uri', options.callback);
url.searchParams.set('response_type', 'code');
url.searchParams.set('state', state);
url.searchParams.set('scope', 'role_connections.write identify');
url.searchParams.set('prompt', 'consent');
return { state, url: url.toString() }
}
updateMetaData(userId){
if(!userId) throw TypeError("[ERROR] User Id is required for this method.")
update(userId)
}
pushMetaData(userId,body,tokens,id, accessToken){
push({
userId: userId,
body: body,
id: id,
token: tokens,
accessToken: accessToken
})
}
getData(){
return {
token: this.token,
url: this.endpoint,
id: this.id,
metadata: this.body,
Date: Date.now()
}
}
storeDiscordTokens(userId, tokens){
storage(userId,tokens)
}
}