Im dumb, gonna push this now without properly testing :)
This commit is contained in:
parent
f289a865a0
commit
34bdecae6e
|
@ -1,6 +1,8 @@
|
||||||
{
|
{
|
||||||
"debug": false,
|
"debug": false,
|
||||||
"discord": {
|
"discord": {
|
||||||
|
"invite_guild": "",
|
||||||
|
"invite_channel": "",
|
||||||
"token": "",
|
"token": "",
|
||||||
"status_messages": [
|
"status_messages": [
|
||||||
{
|
{
|
||||||
|
|
63
html/lockdown.ejs
Normal file
63
html/lockdown.ejs
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title>The Stash</title>
|
||||||
|
<!-- Bootstrap CSS -->
|
||||||
|
<link href="https://stackpath.bootstrapcdn.com/bootstrap/latest/css/bootstrap.min.css" rel="stylesheet">
|
||||||
|
|
||||||
|
<!-- Bootswatch Darkly theme -->
|
||||||
|
<link href="https://stackpath.bootstrapcdn.com/bootswatch/latest/darkly/bootstrap.min.css" rel="stylesheet">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||||
|
|
||||||
|
<!-- Custom CSS to center main div both vertically and horizontally-->
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
height: 100vh;
|
||||||
|
/* 100% of the viewport height */
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.centered-div {
|
||||||
|
/* Additional styling if needed */
|
||||||
|
max-width: 400px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
position: relative;
|
||||||
|
/* Adjust this value based on your footer height */
|
||||||
|
}
|
||||||
|
|
||||||
|
footer {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
text-align: center;
|
||||||
|
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="card border-danger mb-3 centered-div">
|
||||||
|
<div class="card-header">Invite Disabled</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<p class="card-text">For security reasons, server invites have been disabled! </br>
|
||||||
|
Please try again later!
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script src="https://stackpath.bootstrapcdn.com/bootstrap/latest/js/bootstrap.min.js"></script>
|
||||||
|
<footer>
|
||||||
|
<p>© <%= new Date().getFullYear() %> The Stash</p>
|
||||||
|
</footer>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
|
||||||
|
</html>
|
55
index.js
55
index.js
|
@ -2,6 +2,7 @@ const config = require("./config");
|
||||||
const fs = require("fs");
|
const fs = require("fs");
|
||||||
const Discord = require("discord.js");
|
const Discord = require("discord.js");
|
||||||
const colors = require("colors");
|
const colors = require("colors");
|
||||||
|
const path = require("path")
|
||||||
|
|
||||||
const {
|
const {
|
||||||
REST,
|
REST,
|
||||||
|
@ -25,6 +26,10 @@ const client = new Discord.Client({
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const express = require('express');
|
||||||
|
const { pathToFileURL } = require("url");
|
||||||
|
const app = express()
|
||||||
|
|
||||||
// First time bullshit
|
// First time bullshit
|
||||||
if (!fs.existsSync("config.json")) {
|
if (!fs.existsSync("config.json")) {
|
||||||
// Copy config.json.default, then process.exit(1) after telling the user to fill it out
|
// Copy config.json.default, then process.exit(1) after telling the user to fill it out
|
||||||
|
@ -181,6 +186,12 @@ let slowmode_channels = [];
|
||||||
let slowmode_categories = [];
|
let slowmode_categories = [];
|
||||||
|
|
||||||
client.on("ready", async () => {
|
client.on("ready", async () => {
|
||||||
|
// Get port for webserver from environment over config file (for running on pterodactyl/other panels)
|
||||||
|
var port = process.env.PORT || config.port;
|
||||||
|
// Start webserver
|
||||||
|
if (port) app.listen(port, () => {
|
||||||
|
console.log(`${colors.cyan("[INFO]")} Webserver started on port ${port}`)
|
||||||
|
})
|
||||||
console.log(`${colors.cyan("[INFO]")} Logged in as ${client.user.tag}`);
|
console.log(`${colors.cyan("[INFO]")} Logged in as ${client.user.tag}`);
|
||||||
// Get status messages and actionable servers
|
// Get status messages and actionable servers
|
||||||
config.discord.status_messages.forEach((msg) => {
|
config.discord.status_messages.forEach((msg) => {
|
||||||
|
@ -373,7 +384,8 @@ client.on('guildMemberAdd', async (member) => { // We're just gonna always send
|
||||||
const channel = client.channels.cache.get(config.discord.invitelog)
|
const channel = client.channels.cache.get(config.discord.invitelog)
|
||||||
let guild = member.guild
|
let guild = member.guild
|
||||||
member.guild.invites.fetch().then(guildInvites => { //get all guild invites
|
member.guild.invites.fetch().then(guildInvites => { //get all guild invites
|
||||||
guildInvites.each(invite => { //basically a for loop over the invites
|
guildInvites.forEach(invite => { //basically a for loop over the invites
|
||||||
|
|
||||||
if (invite.uses != client.invites[invite.code]) { //if it doesn't match what we stored:
|
if (invite.uses != client.invites[invite.code]) { //if it doesn't match what we stored:
|
||||||
channel.send({
|
channel.send({
|
||||||
embeds: [{
|
embeds: [{
|
||||||
|
@ -382,11 +394,11 @@ client.on('guildMemberAdd', async (member) => { // We're just gonna always send
|
||||||
fields: [
|
fields: [
|
||||||
{
|
{
|
||||||
name: "New Member",
|
name: "New Member",
|
||||||
value: `${member}\n\`${member.id}\`\nJoined at: <t:${member.joinedTimestamp}>\nAccount Created: <t:${member.user.createdTimestamp}>`
|
value: `${member} (${member.user.displayName})\n\`${member.id}\`\nJoined at: <t:${member.joinedTimestamp}>\nAccount Created: <t:${member.user.createdTimestamp}>`
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Invite",
|
name: "Invite",
|
||||||
value: `Inviter: ${invite.inviter} (${invite.inviter.id})\nCode: ${invite.code}\nUses: ${invite.uses}`
|
value: `Inviter: ${(invite.inviter.id == client.user.id) ? "Custom Invite URL (Through Bot)" : `${invite.inviter} (${invite.inviter.displayName})`}\nCode: ${invite.code}\nUses: ${invite.uses}`
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Guild",
|
name: "Guild",
|
||||||
|
@ -395,8 +407,28 @@ client.on('guildMemberAdd', async (member) => { // We're just gonna always send
|
||||||
]
|
]
|
||||||
}]
|
}]
|
||||||
});
|
});
|
||||||
client.invites[invite.code] = invite.uses
|
return client.invites[invite.code] = invite.uses
|
||||||
}
|
}
|
||||||
|
channel.send({
|
||||||
|
embeds: [{
|
||||||
|
color: 0x00ff00,
|
||||||
|
title: "New Member",
|
||||||
|
fields: [
|
||||||
|
{
|
||||||
|
name: "New Member",
|
||||||
|
value: `${member} (${member.user.displayName})\n\`${member.id}\`\nJoined at: <t:${member.joinedTimestamp}>\nAccount Created: <t:${member.user.createdTimestamp}>`
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Invite",
|
||||||
|
value: `N/A (Used Custom Invite)`
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Guild",
|
||||||
|
value: `${guild.name}\n\`${guild.id}\``
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}]
|
||||||
|
});
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -416,4 +448,19 @@ client.on('guildMemberAdd', async (member) => { // We're just gonna always send
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
app.set('view engine', 'ejs');
|
||||||
|
// set views directory
|
||||||
|
app.set('views', path.join(__dirname, 'html'));
|
||||||
|
|
||||||
|
// Start doing express stuff
|
||||||
|
app.get("/", async (req, res) => {
|
||||||
|
// If defcon level is 3 or lower, return 403
|
||||||
|
if (defcon <= 3 || req.query.test) return res.status(403).render("lockdown.ejs")
|
||||||
|
|
||||||
|
// Otherwise, make a new invite, single use, and redirect the user to it!
|
||||||
|
client.guilds.cache.get(config.discord.invite_guild).invites.create(config.discord.invite_channel, {maxAge: 60, maxUses: 1, unique: true}).then((invite) => {
|
||||||
|
res.redirect(`https://discord.com/invite/${invite.code}`);
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
client.login(config.discord.token)
|
client.login(config.discord.token)
|
1446
package-lock.json
generated
1446
package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
@ -10,6 +10,8 @@
|
||||||
"license": "GPL-3.0-or-later",
|
"license": "GPL-3.0-or-later",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"colors": "^1.4.0",
|
"colors": "^1.4.0",
|
||||||
"discord.js": "^14.14.1"
|
"discord.js": "^14.14.1",
|
||||||
|
"ejs": "^3.1.10",
|
||||||
|
"express": "^4.19.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue