forked from Galactic/modmail
dockerfile, comments n stuff
This commit is contained in:
parent
c8a512f418
commit
26216e23d1
10
.dockerignore
Normal file
10
.dockerignore
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
.eslintrc.js
|
||||||
|
old.eslintrc.js
|
||||||
|
.gitignore
|
||||||
|
|
||||||
|
node_modules
|
||||||
|
|
||||||
|
canned_replies.json
|
||||||
|
persistent_cache.json
|
||||||
|
config.js
|
||||||
|
logs/*
|
6
Dockerfile
Normal file
6
Dockerfile
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
FROM node:lts-alpine3.12
|
||||||
|
WORKDIR /modmail
|
||||||
|
COPY . .
|
||||||
|
RUN yarn install --production
|
||||||
|
VOLUME [ "/modmail/modmail_cache" ]
|
||||||
|
CMD ["node", "index.js"]
|
@ -15,7 +15,7 @@
|
|||||||
"nodemon": "^2.0.7"
|
"nodemon": "^2.0.7"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"chalk": "^4.1.1",
|
"chalk": "^5.0.0",
|
||||||
"diagnostics": "^2.0.2",
|
"diagnostics": "^2.0.2",
|
||||||
"discord.js": "^12.5.3",
|
"discord.js": "^12.5.3",
|
||||||
"moment": "^2.29.1",
|
"moment": "^2.29.1",
|
||||||
|
@ -113,27 +113,27 @@ class Modmail {
|
|||||||
const now = Math.floor(Date.now() / 1000);
|
const now = Math.floor(Date.now() / 1000);
|
||||||
const { cache } = this;
|
const { cache } = this;
|
||||||
|
|
||||||
// Anti spam
|
// Anti spam -- never seen user
|
||||||
if (!this.spammers[author.id]) this.spammers[author.id] = { start: now, count: 1, timeout: false, warned: false };
|
if (!this.spammers[author.id]) this.spammers[author.id] = {
|
||||||
else if (this.spammers[author.id].timeout) {
|
start: now, // when counting started
|
||||||
|
count: 1, // # messages
|
||||||
|
timeout: false, // timed out?
|
||||||
|
warned: false // warned?
|
||||||
|
};
|
||||||
|
else if (this.spammers[author.id].timeout) { // User was timed out, check if 5 minutes have passsed, if so, reset their timeout else ignore them
|
||||||
if (now - this.spammers[author.id].start > 5 * 60) this.spammers[author.id] = { start: now, count: 1, timeout: false, warned: false };
|
if (now - this.spammers[author.id].start > 5 * 60) this.spammers[author.id] = { start: now, count: 1, timeout: false, warned: false };
|
||||||
else return;
|
else return;
|
||||||
} else if (this.spammers[author.id].count > 5 && now - this.spammers[author.id].start < 15) {
|
} else if (this.spammers[author.id].count > 5 && now - this.spammers[author.id].start < 15) {
|
||||||
|
// Has sent more than 5 messages in less than 15 seconds at this point, time them out
|
||||||
this.spammers[author.id].timeout = true;
|
this.spammers[author.id].timeout = true;
|
||||||
if (!this.spammers[author.id].warned) {
|
if (!this.spammers[author.id].warned) { // Let them know they've been timed out, toggle the warned property so it doesn't send the warning every time
|
||||||
this.spammers[author.id].warned = true;
|
this.spammers[author.id].warned = true;
|
||||||
await author.send(`I've blocked you for spamming, please try again in 5 minutes`);
|
await author.send(`I've blocked you for spamming, please try again in 5 minutes`);
|
||||||
if (cache._channels[author.id]) await cache._channels[author.id].send(`I've blocked ${author.tag} from DMing me as they were spamming.`);
|
if (cache._channels[author.id]) await cache._channels[author.id].send(`I've blocked ${author.tag} from DMing me as they were spamming.`);
|
||||||
}
|
}
|
||||||
} else if (now - this.spammers[author.id].start > 15) this.spammers[author.id] = { start: now, count: 1, timeout: false, warned: false };
|
} else if (now - this.spammers[author.id].start > 15) this.spammers[author.id] = { start: now, count: 1, timeout: false, warned: false }; // Enough time has passed, reset the object
|
||||||
else this.spammers[author.id].count++;
|
else this.spammers[author.id].count++;
|
||||||
|
|
||||||
const lastActivity = this.cache.lastActivity[author.id];
|
|
||||||
if (!lastActivity || now - lastActivity > 30 * 60) {
|
|
||||||
await author.send(`Thank you for your message, we'll get back to you soon!`);
|
|
||||||
}
|
|
||||||
this.cache.lastActivity[author.id] = now;
|
|
||||||
|
|
||||||
if (this.disabled) {
|
if (this.disabled) {
|
||||||
let reason = `Modmail has been disabled for the time being`;
|
let reason = `Modmail has been disabled for the time being`;
|
||||||
if (this.disabledReason) reason += ` for the following reason:\n\n${this.disabledReason}`;
|
if (this.disabledReason) reason += ` for the following reason:\n\n${this.disabledReason}`;
|
||||||
@ -141,6 +141,12 @@ class Modmail {
|
|||||||
return author.send(reason);
|
return author.send(reason);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const lastActivity = this.cache.lastActivity[author.id];
|
||||||
|
if (!lastActivity || now - lastActivity > 30 * 60) { // No point in sending this for *every* message
|
||||||
|
await author.send(`Thank you for your message, we'll get back to you soon!`);
|
||||||
|
}
|
||||||
|
this.cache.lastActivity[author.id] = now;
|
||||||
|
|
||||||
const pastModmail = await this.cache.loadModmailHistory(author.id)
|
const pastModmail = await this.cache.loadModmailHistory(author.id)
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
this.client.logger.error(`Error during loading of past mail:\n${err.stack}`);
|
this.client.logger.error(`Error during loading of past mail:\n${err.stack}`);
|
||||||
|
@ -34,7 +34,7 @@ class Registry {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const command = new commandClass(this.client);
|
const command = new commandClass(this.client);
|
||||||
if (this.commands.has(command.name)) this.client.logger(`Command by name ${command.name} already exists, skipping duplicate at path ${commandPath}`);
|
if (this.commands.has(command.name)) this.client.logger.warn(`Command by name ${command.name} already exists, skipping duplicate at path ${commandPath}`);
|
||||||
else this.commands.set(command.name, command);
|
else this.commands.set(command.name, command);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -261,7 +261,7 @@ chalk@^2.0.0:
|
|||||||
escape-string-regexp "^1.0.5"
|
escape-string-regexp "^1.0.5"
|
||||||
supports-color "^5.3.0"
|
supports-color "^5.3.0"
|
||||||
|
|
||||||
chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1:
|
chalk@^4.0.0, chalk@^4.1.0:
|
||||||
version "4.1.2"
|
version "4.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
|
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
|
||||||
integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
|
integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
|
||||||
@ -269,6 +269,11 @@ chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1:
|
|||||||
ansi-styles "^4.1.0"
|
ansi-styles "^4.1.0"
|
||||||
supports-color "^7.1.0"
|
supports-color "^7.1.0"
|
||||||
|
|
||||||
|
chalk@^5.0.0:
|
||||||
|
version "5.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.0.0.tgz#bd96c6bb8e02b96e08c0c3ee2a9d90e050c7b832"
|
||||||
|
integrity sha512-/duVOqst+luxCQRKEo4bNxinsOQtMP80ZYm7mMqzuh5PociNL0PvmHFvREJ9ueYL2TxlHjBcmLCdmocx9Vg+IQ==
|
||||||
|
|
||||||
chokidar@^3.2.2:
|
chokidar@^3.2.2:
|
||||||
version "3.5.2"
|
version "3.5.2"
|
||||||
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75"
|
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75"
|
||||||
|
Loading…
Reference in New Issue
Block a user