Add timeouts to many projectlounge requests, fixed command bug

This commit is contained in:
Essem 2021-08-18 08:07:55 -05:00
parent 4684db06e8
commit 516570efe4
No known key found for this signature in database
GPG Key ID: 7D497397CC3A2A8C
6 changed files with 60 additions and 22 deletions

View File

@ -4,15 +4,26 @@ const Command = require("../../classes/command.js");
class AncientCommand extends Command {
async run() {
this.client.sendChannelTyping(this.message.channel.id);
const data = await fetch("https://projectlounge.pw/meme/", { redirect: "manual" });
return {
embed: {
color: 16711680,
image: {
url: data.headers.get("location")
const controller = new AbortController(); // eslint-disable-line no-undef
const timeout = setTimeout(() => {
controller.abort();
}, 15000);
try {
const data = await fetch("https://projectlounge.pw/meme/", { redirect: "manual", signal: controller.signal });
clearTimeout(timeout);
return {
embed: {
color: 16711680,
image: {
url: data.headers.get("location")
}
}
};
} catch (e) {
if (e.name === "AbortError") {
return "I couldn't get a meme in time. Maybe try again?";
}
};
}
}
static description = "Gets a random ancient meme";

View File

@ -4,16 +4,27 @@ const Command = require("../../classes/command.js");
class CatCommand extends Command {
async run() {
this.client.sendChannelTyping(this.message.channel.id);
const data = await fetch("https://projectlounge.pw/cta/", { redirect: "manual" });
return {
embed: {
color: 16711680,
description: "Cat images are sourced from a subset of the [dm4catbot](https://twitter.com/dm4catbot) database.",
image: {
url: data.headers.get("location")
const controller = new AbortController(); // eslint-disable-line no-undef
const timeout = setTimeout(() => {
controller.abort();
}, 15000);
try {
const data = await fetch("https://projectlounge.pw/cta/", { redirect: "manual", signal: controller.signal });
clearTimeout(timeout);
return {
embed: {
color: 16711680,
description: "Cat images are sourced from a subset of the [dm4catbot](https://twitter.com/dm4catbot) database.",
image: {
url: data.headers.get("location")
}
}
};
} catch (e) {
if (e.name === "AbortError") {
return "I couldn't get a cat image in time. Maybe try again?";
}
};
}
}
static description = "Gets a random cat picture";

View File

@ -15,6 +15,7 @@ class CommandCommand extends Command {
if (this.args[0].toLowerCase() === "disable") {
if (!collections.commands.has(this.args[1].toLowerCase()) && !collections.aliases.has(this.args[1].toLowerCase())) return "That isn't a command!";
const command = collections.aliases.has(this.args[1].toLowerCase()) ? collections.aliases.get(this.args[1].toLowerCase()) : this.args[1].toLowerCase();
if (command === "command") return "You can't disable that command!";
if (disabled && disabled.includes(command)) return "That command is already disabled!";
await db.disableCommand(this.message.channel.guild.id, command);

View File

@ -3,13 +3,23 @@ const Command = require("../../classes/command.js");
class DonateCommand extends Command {
async run() {
this.client.sendChannelTyping(this.message.channel.id);
let prefix = "";
const patrons = await fetch("https://projectlounge.pw/patrons").then(data => data.json());
prefix = "Thanks to the following patrons for their support:\n";
for (const patron of patrons) {
prefix += `**- ${patron}**\n`;
const controller = new AbortController(); // eslint-disable-line no-undef
const timeout = setTimeout(() => {
controller.abort();
}, 5000);
try {
const patrons = await fetch("https://projectlounge.pw/patrons", { signal: controller.signal }).then(data => data.json());
clearTimeout(timeout);
prefix = "Thanks to the following patrons for their support:\n";
for (const patron of patrons) {
prefix += `**- ${patron}**\n`;
}
prefix += "\n";
} catch (e) {
// no-op
}
prefix += "\n";
return `${prefix}Like esmBot? Consider supporting the developer on Patreon to help keep it running! https://patreon.com/TheEssem`;
}

View File

@ -23,7 +23,7 @@ class InfoCommand extends Command {
},
{
"name": "💬 Total Servers:",
"value": stats.guilds ? stats.guilds : `${this.client.guilds.size} (for this cluster only)`
"value": stats && stats.guilds ? stats.guilds : `${this.client.guilds.size} (for this cluster only)`
},
{
"name": "✅ Official Server:",

View File

@ -118,8 +118,13 @@ module.exports = async (client, cluster, worker, ipc, message) => {
const filename = `${Math.random().toString(36).substring(2, 15)}.${result.name.split(".")[1]}`;
await fs.promises.writeFile(`${process.env.TEMPDIR}/${filename}`, result.file);
const imageURL = `${process.env.TMP_DOMAIN == "" ? "https://tmp.projectlounge.pw" : process.env.TMP_DOMAIN}/${filename}`;
const controller = new AbortController(); // eslint-disable-line no-undef
const timeout = setTimeout(() => {
controller.abort();
}, 5000);
try {
await fetch(imageURL);
await fetch(imageURL, { signal: controller.signal });
clearTimeout(timeout);
} catch {
// this is here to make sure the image is properly cached by discord
}