Skip to content
This repository was archived by the owner on Jun 28, 2022. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 45 additions & 9 deletions api/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,17 @@ const express = require("express"),
cors = require("cors"),
app = express();

app.use(cors());
const { Client, Intents } = require('discord.js');

app.use(cors());

/// OAuth2
const fetch = require("node-fetch")
const randomstring = require("randomstring");

require("dotenv").config()
const PORT = process.env.PORT || '80';
const CLIENT_SECRET = process.env.port || 'WmrM3betfCuAIfAP2uFkivIhDn8soUfk';

// api things

Expand All @@ -19,7 +24,8 @@ var corsOptions = {
}

const Discord = require("discord.js"),
client = new Discord.Client();
client = new Discord.Client({ intents: [Intents.FLAGS.GUILD_MEMBERS] })
/// Intent: { intents: [Intents.FLAGS.GUILD_MEMBERS, Intents.FLAGS.GUILD] }

const name = require("../package.json").name,
description = require("../package.json").description,
Expand All @@ -33,42 +39,72 @@ app.get("/", cors(corsOptions), (req, res) => {
return res.send(mainpage)
});

app.get("/callback", cors(corsOptions), (req, res) => {
const fragment = new URLSearchParams();
const [accessToken, tokenType] = [fragment.get('code'), fragment.get('token_type')];

if (!accessToken) {
const callback = (`Hello! Here is your api token: ${fragment.get('code')}`);
return res.send(callback)
}
fetch('https://discord.com/api/users/@me', {
headers: {
authorization: `${tokenType} ${accessToken}`,
},
})
.then(result => result.json())
.then(response => {
return
})
.catch(console.error);
console.log(accessToken)
const callback = (`Hello! Here is your api token: ${fragment.get('code')}`);
return res.send(callback)
});

app.get("/v1", cors(corsOptions), (req, res) => {
const v1page = (`This is the v1 page from ${name}`);
const v1page = (`Oops! The v1 route is only for the v1 version! https://invalidlenni.gitbook.io/disweb/ for Documentation`);
return res.send(v1page)
});

// GET USER INFORMATION
app.get("/v1/user/:userID", cors(corsOptions), (req, res) => {
client.users.fetch(req.params.userID).then((user) => {
const results = ({ username: `${user.username}`, bot: user.bot, discriminator: `${user.discriminator}`, avatar_url: `${user.displayAvatarURL({ format: "png", size: 4096, dynamic: true })}`, creation_date: `${user.createdAt}`, creation_timestamp: user.createdTimestamp});
const results = ({ username: `${user.username}`, is_bot: user.bot, discriminator: `${user.discriminator}`, avatar_url: `${user.displayAvatarURL({ format: "png", size: 4096, dynamic: true })}`, banner_url: `${user.bannerURL({ format: "png", dynamic: true })}`, creation_date: `${user.createdAt}`, creation_timestamp: user.createdTimestamp});
return res.send(results);
});
});

// THE BOT MUST BE ON THE GUILD FOR FETCH THE GUILD INFORMATIONS!
app.get("/v1/guild/:guildID", cors(corsOptions), (req, res) => {
client.guilds.fetch(req.params.guildID).then((guild) => {
const results = ({ guildID: `${guild.id}`, guildname: `${guild.name}`, guildicon_url: `${guild.iconURL({ size: 4096, dynamic: true })}`, guildroles_count: `${guild.roles.cache.size}`, guildusers_count: `${guild.members.cache.size}`, guildemojis_count: `${guild.emojis.cache.size}`, guildownerID: `${guild.ownerID}`, guildcreation_date: `${guild.createdAt}`, guildcreation_timestamp: guild.createdTimestamp });
const results = ({ guildID: `${guild.id}`, guildname: `${guild.name}`, guildicon_url: `${guild.iconURL({ size: 4096, dynamic: true })}`, guildroles_count: `${guild.roles.cache.size}`, guildusers_count: `${guild.members.cache.size}`, guildemojis_count: `${guild.emojis.cache.size}`, guildownerID: `${guild.ownerID}`, guildcreation_date: `${guild.createdAt}`, guildcreation_timestamp: guild.createdTimestamp});
return res.send(results);
});
});

app.get("/v1/invites/:INVITEURL", cors(corsOptions), (req, res) => {
client.invite.fetch(req.params.INVITEURL).then((invite) => {
const results = ({ guildID: `${invite.guild.id}`, guildname: `${invite.guild.name}`, guildicon_url: `${invite.guild.iconURL({ size: 4096, dynamic: true })}`, guildroles_count: `${invite.guild.roles.cache.size}`, guildusers_count: `${invite.guild.members.cache.size}`, guildemojis_count: `${invite.guild.emojis.cache.size}`, guildownerID: `${invite.guild.ownerID}`, guildcreation_date: `${invite.guild.createdAt}`, guildcreation_timestamp: invite.guild.createdTimestamp});
return res.send(results);
});
});

app.use(function (req, res, next) {
res.status(404).send("Sorry, can't find that! The route is [/vX/user/:USERID] or [/vX/guild/:GUILDID]")
res.status(404).json({ message: '404: Not found', code: 404})
});

app.use(function (req, res, next) {
res.status(201).send("Missing parm")
res.status(201).send({ message: '201: Missing parameters', code: 201})
});


app.use(function (req, res, next) {
res.status(403).send("Missing access")
res.status(403).send({ message: '403: Missing access', code: 403})
});

app.use(function (req, res, next) {
res.status(500).send("Internal Server Error")
res.status(500).send({ message: '500: Internal Server Error', code: 500})
});

// API START
Expand Down
147 changes: 147 additions & 0 deletions app.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
// Definitions
const express = require("express"),
cors = require("cors"),
app = express();

const { Client, Intents } = require('discord.js');

app.use(cors());

/// OAuth2
const fetch = require("node-fetch")
const randomstring = require("randomstring");

require("dotenv").config()
const PORT = process.env.PORT || '80';
const CLIENT_SECRET = process.env.port || 'WmrM3betfCuAIfAP2uFkivIhDn8soUfk';

// api things


var corsOptions = {
origin: '*',
optionsSuccessStatus: 200
}

const Discord = require("discord.js"),
client = new Discord.Client({ intents: [Intents.FLAGS.GUILD_MEMBERS] })
/// Intent: { intents: [Intents.FLAGS.GUILD_MEMBERS, Intents.FLAGS.GUILD] }

const name = require("../package.json").name,
description = require("../package.json").description,
version = require("../package.json").version,
author = require("../package.json").author,
url = require("../package.json").repository.url;

/* const apiLimiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 minutes
max: 100, // Limit each IP to 100 requests per `window` (here, per 15 minutes)
standardHeaders: true, // Return rate limit info in the `RateLimit-*` headers
legacyHeaders: false, // Disable the `X-RateLimit-*` headers
})*/

// Ratelimits
const userLimiter = rateLimit({
windowMs: 60 * 60 * 5, // 5 minutes
max: 5, // Limit each IP to 5 user requests per `window` (here, per minute)
message:
'You are being ratelimited! Try again later.',
standardHeaders: true, // Return rate limit info in the `RateLimit-*` headers
legacyHeaders: false, // Disable the `X-RateLimit-*` headers
})

const guildLimiter = rateLimit({
windowMs: 60 * 60 * 5, // 5 minutes
max: 5, // Limit each IP to 5 user requests per `window` (here, per minute)
message:
'You are being ratelimited! Try again later.',
standardHeaders: true, // Return rate limit info in the `RateLimit-*` headers
legacyHeaders: false, // Disable the `X-RateLimit-*` headers
})


// ROUTES
app.get("/", cors(corsOptions), (req, res) => {
const mainpage = ({"API": `${name}`, "\description": `${description}`, "Made by": `${author}`, "API Version is": `${version}`, "The Github Rep": `${url}` });
return res.send(mainpage)
});

app.get("/callback", cors(corsOptions), (req, res) => {
const fragment = new URLSearchParams();
const [accessToken, tokenType] = [fragment.get('code'), fragment.get('token_type')];

if (!accessToken) {
const callback = (`Hello! Here is your api token: ${fragment.get('code')}`);
return res.send(callback)
}
fetch('https://discord.com/api/users/@me', {
headers: {
authorization: `${tokenType} ${accessToken}`,
},
})
.then(result => result.json())
.then(response => {
return
})
.catch(console.error);
console.log(accessToken)
const callback = (`Hello! Here is your api token: ${fragment.get('code')}`);
return res.send(callback)
});

app.get("/v1", cors(corsOptions), (req, res) => {
const v1page = (`Oops! The v1 route is only for the v1 version! https://invalidlenni.gitbook.io/disweb/ for Documentation`);
return res.send(v1page)
});

// GET USER INFORMATION
app.get("/v1/user/:userID", userLimiter, cors(corsOptions), (req, res) => {
client.users.fetch(req.params.userID).then((user) => {
const results = ({ username: `${user.username}`, is_bot: user.bot, discriminator: `${user.discriminator}`, avatar_url: `${user.displayAvatarURL({ format: "png", size: 4096, dynamic: true })}`, banner_url: `${user.bannerURL({ format: "png", dynamic: true })}`, creation_date: `${user.createdAt}`, creation_timestamp: user.createdTimestamp});
return res.send(results);
});
});

// THE BOT MUST BE ON THE GUILD FOR FETCH THE GUILD INFORMATIONS!
app.get("/v1/guild/:guildID", guildLimiter, cors(corsOptions), (req, res) => {
client.guilds.fetch(req.params.guildID).then((guild) => {
const results = ({ guildID: `${guild.id}`, guildname: `${guild.name}`, guildicon_url: `${guild.iconURL({ size: 4096, dynamic: true })}`, guildroles_count: `${guild.roles.cache.size}`, guildusers_count: `${guild.members.cache.size}`, guildemojis_count: `${guild.emojis.cache.size}`, guildownerID: `${guild.ownerID}`, guildcreation_date: `${guild.createdAt}`, guildcreation_timestamp: guild.createdTimestamp});
return res.send(results);
});
});

app.get("/v1/invites/:INVITEURL", guildLimiter, cors(corsOptions), (req, res) => {
client.invite.fetch(req.params.INVITEURL).then((invite) => {
const results = ({ guildID: `${invite.guild.id}`, guildname: `${invite.guild.name}`, guildicon_url: `${invite.guild.iconURL({ size: 4096, dynamic: true })}`, guildroles_count: `${invite.guild.roles.cache.size}`, guildusers_count: `${invite.guild.members.cache.size}`, guildemojis_count: `${invite.guild.emojis.cache.size}`, guildownerID: `${invite.guild.ownerID}`, guildcreation_date: `${invite.guild.createdAt}`, guildcreation_timestamp: invite.guild.createdTimestamp});
return res.send(results);
});
});


// Error
app.use(function (req, res, next) {
res.status(404).json({ message: '404: Not found', code: 404})
});

app.use(function (req, res, next) {
res.status(201).send({ message: '201: Missing parameters', code: 201})
});


app.use(function (req, res, next) {
res.status(403).send({ message: '403: Missing access', code: 403})
});

app.use(function (req, res, next) {
res.status(500).send({ message: '500: Internal Server Error', code: 500})
});


// API START
client.on("ready", () => {
console.log(`The API is now online! Bot: ${client.user.username}`)
});

app.listen(PORT, console.log(`disweb is listing to`, PORT));

client.login(process.env.TOKEN);
15 changes: 10 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,27 +1,32 @@
{
"name": "disweb",
"version": "1.0.1",
"version": "1.1.0",
"description": "A simple & easy2use API for obtaining information about a discord user, discord bot or discord guild and their use for some purpose on websites!",
"main": "./api/app.js",
"scripts": {
"start": "nodemon"
},
"repository": {
"type": "git",
"url": "https://github.com/diswebsite/disweb"
"url": "https://github.com/diswebsite/disweb/.git"
},
"bugs":{
"type": "github",
"url": "https://github.com/diswebsite/disweb/issues/new"
},
"keywords": [
"discord-web-api",
"discord-user-api",
"discord-website-api"
],
"author": "InvalidLenni",
"author": "Diswebsite",
"license": "MIT",
"dependencies": {
"cors": "^2.8.5",
"discord.js": "^12.5.1",
"discord.js": "^13.4.0",
"dotenv": "^8.2.0",
"express": "^4.17.1",
"nodemon": "^2.0.15"
"nodemon": "^2.0.15",
"randomstring": "^1.2.1"
}
}