100 lines
2.5 KiB
TypeScript
100 lines
2.5 KiB
TypeScript
import "dotenv/config";
|
|
import Fosscord from "fosscord-gopnik";
|
|
import Discord from "discord.js";
|
|
import mysql from "mysql2";
|
|
import fetch from "node-fetch";
|
|
|
|
const dbConn = mysql.createConnection(process.env.DATABASE as string);
|
|
const executePromise = (sql: string, args: any[]) =>
|
|
new Promise((resolve, reject) =>
|
|
dbConn.execute(sql, args, (err, res) => {
|
|
if (err) reject(err);
|
|
else resolve(res);
|
|
}),
|
|
);
|
|
const savePerf = async (time: number, name: string, error?: string | Error) => {
|
|
if (error && typeof error != "string") error = error.message;
|
|
try {
|
|
await executePromise(
|
|
"INSERT INTO performance (value, endpoint, timestamp, error) VALUES (?, ?, ?, ?)",
|
|
[time ?? 0, name, new Date(), error ?? null],
|
|
);
|
|
// await executePromise("DELETE FROM performance WHERE DATE(timestamp) < now() - interval ? DAY", [process.env.RETENTION_DAYS]);
|
|
} catch (e) {
|
|
console.error(e);
|
|
}
|
|
};
|
|
|
|
var timestamp: number | undefined;
|
|
|
|
const doMeasurements = async (channel: Discord.TextChannel) => {
|
|
timestamp = Date.now();
|
|
await channel.send("hello this is a special message kthxbye");
|
|
|
|
setTimeout(
|
|
doMeasurements,
|
|
parseInt(process.env.MEASURE_INTERVAL as string),
|
|
channel,
|
|
);
|
|
};
|
|
|
|
const instance = {
|
|
app: process.env.INSTANCE_WEB_APP as string,
|
|
api: process.env.INSTANCE_API as string,
|
|
cdn: process.env.INSTANCE_CDN as string,
|
|
token: process.env.INSTANCE_TOKEN as string,
|
|
};
|
|
|
|
const client = new Fosscord.Client({
|
|
intents: [],
|
|
http: {
|
|
api: instance.api,
|
|
cdn: instance.cdn,
|
|
},
|
|
});
|
|
|
|
client.on("ready", async () => {
|
|
console.log(`Ready on gateway as ${client.user!.tag}`);
|
|
|
|
const channel = await client.channels.fetch("1019955729054267764");
|
|
if (!channel) return;
|
|
|
|
doMeasurements(channel as Discord.TextChannel);
|
|
});
|
|
|
|
client.on("messageCreate", async (msg: Discord.Message) => {
|
|
if (!timestamp) return;
|
|
if (
|
|
msg.author.id != "992745947417141682" ||
|
|
msg.channel.id != "1019955729054267764" ||
|
|
msg.content != "hello this is a special message kthxbye"
|
|
)
|
|
return;
|
|
await savePerf(Date.now() - timestamp, "messageCreate", undefined);
|
|
timestamp = undefined;
|
|
|
|
await fetch(
|
|
`${instance.api}/channels/1019955729054267764/messages/${msg.id}`,
|
|
{
|
|
method: "DELETE",
|
|
headers: {
|
|
authorization: instance.token,
|
|
},
|
|
},
|
|
);
|
|
});
|
|
|
|
client.on("error", (error: any) => {
|
|
console.log(`Gateway error`, error);
|
|
});
|
|
|
|
client.on("warn", (msg: any) => {
|
|
console.log(`Gateway warning:`, msg);
|
|
});
|
|
|
|
(async () => {
|
|
await new Promise((resolve) => dbConn.connect(resolve));
|
|
console.log("Connected to db");
|
|
await client.login(instance.token);
|
|
})();
|