Im dumb, gonna push this now without properly testing :)

This commit is contained in:
Christopher Cookman 2024-04-15 00:22:24 -06:00
parent f289a865a0
commit 34bdecae6e
Signed by: ChrisChrome
GPG key ID: A023A26E42C33A42
5 changed files with 1564 additions and 6 deletions

View file

@ -1,6 +1,8 @@
{
"debug": false,
"discord": {
"invite_guild": "",
"invite_channel": "",
"token": "",
"status_messages": [
{

63
html/lockdown.ejs Normal file
View 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>&copy; <%= new Date().getFullYear() %> The Stash</p>
</footer>
</body>
</html>

View file

@ -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

File diff suppressed because it is too large Load diff

View file

@ -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"
}
}