mirror of
https://github.com/danbulant/redditConnector
synced 2026-05-19 03:58:37 +00:00
Make server more customizable via config
This commit is contained in:
parent
fa088f5a16
commit
a337683337
1 changed files with 49 additions and 21 deletions
70
index.js
70
index.js
|
|
@ -3,7 +3,19 @@ const cookieParser = require('cookie-parser')
|
||||||
const discord = require("discord.js");
|
const discord = require("discord.js");
|
||||||
const Auth = require("discord-oauth2");
|
const Auth = require("discord-oauth2");
|
||||||
const crypto = require('crypto');
|
const crypto = require('crypto');
|
||||||
const config = require("./config.json");
|
|
||||||
|
const {
|
||||||
|
CLIENT_ID,
|
||||||
|
CLIENT_SECRET,
|
||||||
|
TOKEN,
|
||||||
|
GUILD_ID,
|
||||||
|
|
||||||
|
PROTOCOL,
|
||||||
|
HOSTNAME,
|
||||||
|
LOGIN_PATH,
|
||||||
|
CALLBACK_PATH,
|
||||||
|
PORT
|
||||||
|
} = require("./config.json");
|
||||||
|
|
||||||
const client = new discord.Client({
|
const client = new discord.Client({
|
||||||
ws: {
|
ws: {
|
||||||
|
|
@ -14,61 +26,77 @@ const client = new discord.Client({
|
||||||
});
|
});
|
||||||
const app = express();
|
const app = express();
|
||||||
const auth = new Auth({
|
const auth = new Auth({
|
||||||
clientId: config.cid,
|
clientId: CLIENT_ID,
|
||||||
clientSecret: config.secret
|
clientSecret: CLIENT_SECRET
|
||||||
});
|
});
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Make sure to add a this URL to your Discord Application like show on this page:
|
||||||
|
* https://discordjs.guide/oauth2/#getting-an-oauth2-url
|
||||||
|
*/
|
||||||
|
const redirectUri = `${PROTOCOL}://${HOSTNAME}:${PORT}${CALLBACK_PATH}`;
|
||||||
|
|
||||||
app.use(cookieParser());
|
app.use(cookieParser());
|
||||||
|
|
||||||
app.get("/login", (req, res) => {
|
app.get(LOGIN_PATH, (req, res) => {
|
||||||
var state = crypto.randomBytes(64).toString('hex');
|
const state = crypto.randomBytes(64).toString('hex');
|
||||||
res.cookie("state", state);
|
res.cookie("state", state);
|
||||||
res.redirect(auth.generateAuthUrl({
|
res.redirect(auth.generateAuthUrl({
|
||||||
scope: ["connections", "identify"],
|
scope: ["connections", "identify"],
|
||||||
state,
|
state,
|
||||||
redirectUri: "http://localhost:8080/callback"
|
redirectUri
|
||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
|
|
||||||
app.get("/callback", async (req, res) => {
|
app.get(CALLBACK_PATH, async (req, res) => {
|
||||||
const { code, state } = req.query;
|
const { code, state } = req.query;
|
||||||
|
// Alternatively, use res.redirect() to use a fancier error page. Same thing goes for all the other error handlers.
|
||||||
if(state !== req.cookies.state) return res.status(400).send("Wrong state");
|
if(state !== req.cookies.state) return res.status(400).send("Wrong state");
|
||||||
try {
|
try {
|
||||||
var token = await auth.tokenRequest({
|
var token = await auth.tokenRequest({
|
||||||
code,
|
code,
|
||||||
scope: [ "connections", "identify" ],
|
scope: [ "connections", "identify" ],
|
||||||
grantType: "authorization_code",
|
grantType: "authorization_code",
|
||||||
redirectUri: "http://localhost:8080/callback"
|
redirectUri
|
||||||
});
|
});
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
return res.status(403).send("Invalid code");
|
return res.status(403).send("Invalid code");
|
||||||
}
|
}
|
||||||
var connections = await auth.getUserConnections(token.access_token);
|
const connections = await auth.getUserConnections(token.access_token);
|
||||||
var reddit = connections.filter(val => val.type === "reddit");
|
|
||||||
if(!reddit) return res.send("No reddit connection");
|
let reddit = connections.filter(val => val.type === "reddit");
|
||||||
|
if(!reddit[0]) return res.send("No reddit connection found");
|
||||||
reddit = reddit[0];
|
reddit = reddit[0];
|
||||||
var user = await auth.getUser(token.access_token);
|
const user = await auth.getUser(token.access_token);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var guild = await client.guilds.fetch(config.guild);
|
var guild = await client.guilds.fetch(GUILD_ID);
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
return res.status(500).send("Guild not found");
|
return res.status(500).send("Discord guild not found");
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
var member = await guild.members.fetch(user.id);
|
var member = await guild.members.fetch(user.id);
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
return res.status(403).send("Member not found");
|
return res.status(403).send("Discord member not found");
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
|
/*
|
||||||
|
Add whatever discord logic you want here. You could for example add a "Verfied" role:
|
||||||
|
await member.roles.add("roleId")
|
||||||
|
or DM the user: (make sure to do error handling if bot can't DM user)
|
||||||
|
await member.send("Succesfully verified you as reddit user u/" + reddit.name + " in guild " + guild.name)
|
||||||
|
|
||||||
|
If you're gonna change the user's nickname like this, remember to limit their "Change nickname" perms - otherwise they can just change it back.
|
||||||
|
*/
|
||||||
await member.setNickname("u/" + reddit.name);
|
await member.setNickname("u/" + reddit.name);
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
return res.status(500).send("Missing nickname permission");
|
return res.status(500).send("Couldn't change nickname.");
|
||||||
}
|
}
|
||||||
res.send("Done");
|
res.send("Success!");
|
||||||
});
|
});
|
||||||
|
|
||||||
client.login(config.token);
|
client.login(TOKEN);
|
||||||
|
|
||||||
app.listen(8080, () => {
|
app.listen(PORT, () => {
|
||||||
console.log("http://localhost:8080/login");
|
console.log("Listening on port", PORT);
|
||||||
})
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue