Im dumb, gonna push this now without properly testing :)
This commit is contained in:
parent
f289a865a0
commit
34bdecae6e
|
@ -1,6 +1,8 @@
|
|||
{
|
||||
"debug": false,
|
||||
"discord": {
|
||||
"invite_guild": "",
|
||||
"invite_channel": "",
|
||||
"token": "",
|
||||
"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 Discord = require("discord.js");
|
||||
const colors = require("colors");
|
||||
const path = require("path")
|
||||
|
||||
const {
|
||||
REST,
|
||||
|
@ -25,6 +26,10 @@ const client = new Discord.Client({
|
|||
]
|
||||
});
|
||||
|
||||
const express = require('express');
|
||||
const { pathToFileURL } = require("url");
|
||||
const app = express()
|
||||
|
||||
// First time bullshit
|
||||
if (!fs.existsSync("config.json")) {
|
||||
// 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 = [];
|
||||
|
||||
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}`);
|
||||
// Get status messages and actionable servers
|
||||
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)
|
||||
let guild = member.guild
|
||||
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:
|
||||
channel.send({
|
||||
embeds: [{
|
||||
|
@ -382,11 +394,11 @@ client.on('guildMemberAdd', async (member) => { // We're just gonna always send
|
|||
fields: [
|
||||
{
|
||||
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",
|
||||
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",
|
||||
|
@ -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)
|
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",
|
||||
"dependencies": {
|
||||
"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