Compare commits

...

4 Commits

Author SHA1 Message Date
Lio Young 9139a73745 add typescript to dev deps 2021-07-12 19:04:11 +02:00
Lio Young 0176a3d1fc remove prometheus and fix help command 2021-07-12 18:58:33 +02:00
Lio Young 053dcdf236 fuck docker, I'm just running thal in the vm itself 2021-07-12 18:45:27 +02:00
Lio Young 3660503ecc fix help command 2021-07-12 18:41:27 +02:00
12 changed files with 115 additions and 94 deletions

26
package-lock.json generated
View File

@ -1,11 +1,11 @@
{ {
"name": "thaldrin", "name": "thaldrin",
"version": "4.0-dev", "version": "4",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"version": "4.0-dev", "version": "4",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@supabase/supabase-js": "^1.7.7", "@supabase/supabase-js": "^1.7.7",
@ -27,7 +27,8 @@
"@types/js-yaml": "^4.0.2", "@types/js-yaml": "^4.0.2",
"@types/node": "^14.14.37", "@types/node": "^14.14.37",
"@types/roll": "^1.2.0", "@types/roll": "^1.2.0",
"@types/ws": "^7.4.1" "@types/ws": "^7.4.1",
"typescript": "^4.3.5"
} }
}, },
"node_modules/@dabh/diagnostics": { "node_modules/@dabh/diagnostics": {
@ -1138,6 +1139,19 @@
"is-typedarray": "^1.0.0" "is-typedarray": "^1.0.0"
} }
}, },
"node_modules/typescript": {
"version": "4.3.5",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz",
"integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==",
"dev": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
},
"engines": {
"node": ">=4.2.0"
}
},
"node_modules/uri-js": { "node_modules/uri-js": {
"version": "4.4.1", "version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
@ -2248,6 +2262,12 @@
"is-typedarray": "^1.0.0" "is-typedarray": "^1.0.0"
} }
}, },
"typescript": {
"version": "4.3.5",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz",
"integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==",
"dev": true
},
"uri-js": { "uri-js": {
"version": "4.4.1", "version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",

View File

@ -1,6 +1,6 @@
{ {
"name": "thaldrin", "name": "thaldrin",
"version": "4.0-dev", "version": "4",
"description": "", "description": "",
"main": "build/shard.js", "main": "build/shard.js",
"scripts": { "scripts": {
@ -45,6 +45,7 @@
"@types/js-yaml": "^4.0.2", "@types/js-yaml": "^4.0.2",
"@types/node": "^14.14.37", "@types/node": "^14.14.37",
"@types/roll": "^1.2.0", "@types/roll": "^1.2.0",
"@types/ws": "^7.4.1" "@types/ws": "^7.4.1",
"typescript": "^4.3.5"
} }
} }

View File

@ -1,13 +1,13 @@
import Logger from "../utils/logger" import Logger from "../utils/logger"
import config from "../../config" import config from "../../config"
import { Guild } from "discord.js" import { Guild } from "discord.js"
import Prom from "../utils/init.prometheus"; // import Prom from "../utils/init.prometheus";
export = { export = {
name: "guildCreate", name: "guildCreate",
// @ts-ignore // @ts-ignore
run: async (client, guild: Guild) => { run: async (client, guild: Guild) => {
Prom.guildCount.inc() // Prom.guildCount.inc()
Prom.totalGuilds.set(client.guilds.cache.size) // Prom.totalGuilds.set(client.guilds.cache.size)
Logger.info({ Logger.info({
type: "event:guildCreate", type: "event:guildCreate",
message: `New Guild: ${guild.name} [${guild.id}]` message: `New Guild: ${guild.name} [${guild.id}]`

View File

@ -8,13 +8,13 @@ import { Commands, Shortlink, SourceFinder } from "../utils/wrapper.features";
import language from "../utils/language"; import language from "../utils/language";
import replace from "../utils/replace"; import replace from "../utils/replace";
import chalk from "chalk"; import chalk from "chalk";
import Prom from "../utils/init.prometheus"; // import Prom from "../utils/init.prometheus";
//
export = { export = {
name: "message", name: "message",
run: async (client: Client, message: Message) => { run: async (client: Client, message: Message) => {
Prom.messagesSeen.inc() // Prom.messagesSeen.inc()
if (message.author.bot) return if (message.author.bot) return
if (message.channel.type === "dm") return if (message.channel.type === "dm") return
@ -124,7 +124,7 @@ export = {
} }
Prom.commandsExecuted.inc() // Prom.commandsExecuted.inc()
let { data: command_usage_data, command_usage_error } = await supabase.from<Usage>('usage').update({ amount: (usage_check_data[0] || { amount: 0 }).amount + 1 }).select().eq("name", cmd.name) let { data: command_usage_data, command_usage_error } = await supabase.from<Usage>('usage').update({ amount: (usage_check_data[0] || { amount: 0 }).amount + 1 }).select().eq("name", cmd.name)
Logger.info({ Logger.info({
type: "command:executed", type: "command:executed",

View File

@ -1,11 +1,11 @@
import Logger from "../utils/logger" import Logger from "../utils/logger"
import config from "../../config" import config from "../../config"
import prom from "../utils/init.prometheus" // import prom from "../utils/init.prometheus"
export = { export = {
name: "ready", name: "ready",
// @ts-ignore // @ts-ignore
run: async (client: any) => { run: async (client: any) => {
prom.totalGuilds.set(client.guilds.cache.size) // prom.totalGuilds.set(client.guilds.cache.size)
Logger.info({ Logger.info({
type: "event:ready", type: "event:ready",
message: `${config.variables.name} has started` message: `${config.variables.name} has started`

View File

@ -1,12 +1,12 @@
import Logger from "../utils/logger" import Logger from "../utils/logger"
import { Guild } from "discord.js" import { Guild } from "discord.js"
import Prom from "../utils/init.prometheus"; // import Prom from "../utils/init.prometheus";
export = { export = {
name: "guildDelete", name: "guildDelete",
// @ts-ignore // @ts-ignore
run: async (client, guild: Guild) => { run: async (client, guild: Guild) => {
Prom.guildCount.dec() // Prom.guildCount.dec()
Prom.totalGuilds.set(client.guilds.cache.size) // Prom.totalGuilds.set(client.guilds.cache.size)
Logger.info({ Logger.info({
type: "event:guildDelete", type: "event:guildDelete",
message: `Left Guild: ${guild.name} [${guild.id}]` message: `Left Guild: ${guild.name} [${guild.id}]`

View File

@ -3,7 +3,7 @@ import { readdirSync as read } from "fs";
import path from "path"; import path from "path";
import { Command } from "../../utils/types"; import { Command } from "../../utils/types";
import Logger from "../../utils/logger"; import Logger from "../../utils/logger";
import { Prom } from "../../utils/prometheus"; // import { Prom } from "../../utils/prometheus";
// const server = require('../../website/server'); // const server = require('../../website/server');
export default class Thaldrin extends Client { export default class Thaldrin extends Client {
@ -26,9 +26,9 @@ export default class Thaldrin extends Client {
this.lastEval = null; this.lastEval = null;
// @ts-ignore // @ts-ignore
this.on("raw", packet => { // this.on("raw", packet => {
Prom.events.labels(packet.t).inc() // Prom.events.labels(packet.t).inc()
}) // })
this.login(config.token); this.login(config.token);
this.load(); this.load();

View File

@ -7,7 +7,7 @@ import language from '../../utils/language';
function enabled(a: boolean, lang: string) { function enabled(a: boolean, lang: string) {
// @ts-ignore // @ts-ignore
return a ? language.get(lang).misc.enabled : language.get(lang).misc.disabled; return a ? language.get(lang).misc.enabled : language.get(lang).misc.disabled; w
} }
export = class Settings extends Command { export = class Settings extends Command {

View File

@ -1,6 +1,6 @@
import Command from '../../handler/structures/Command'; import Command from '../../handler/structures/Command';
import { Context, Usage } from '../../utils/types'; import { Context, Usage } from '../../utils/types';
import lingua from '../../utils/lingua'; // import lingua from '../../utils/lingua';
import { MessageEmbed } from 'discord.js'; import { MessageEmbed } from 'discord.js';
import CommandUsage from '../../utils/command.usage'; import CommandUsage from '../../utils/command.usage';
import { commitHash } from "../../utils/git" import { commitHash } from "../../utils/git"
@ -42,8 +42,8 @@ export = class Stats extends Command {
let embed = new MessageEmbed().setColor(ctx.config.variables.color).setFooter(`${ctx.config.variables.name} v${ctx.config.pkg.version} [${commitHash}]`, ctx.config.variables.avatar) let embed = new MessageEmbed().setColor(ctx.config.variables.color).setFooter(`${ctx.config.variables.name} v${ctx.config.pkg.version} [${commitHash}]`, ctx.config.variables.avatar)
.setTitle(`Statistics`) .setTitle(`Statistics`)
.setDescription(`Visit [our System Dashboard](https://system.thaldr.in) for more in-depth stats`) .setDescription(MiscValues.map((value) => `${value}`))
.addField(`Misc`, MiscValues.map((value) => `${value}`)) // .addField(`Misc`, )
ctx.channel.send(embed) ctx.channel.send(embed)

View File

@ -30,13 +30,13 @@ export = class Help extends Command {
} }
let arg = ctx.args[0] let arg = ctx.args[0]
if (await (await Folders()).includes(arg)) { if (await (await Folders()).includes(arg)) {
if (arg === 'developer') return if (arg === 'developer' && !ctx.isDeveloper) return
let commands = await (await Commands(arg, ctx.client)).map(command => `\`${command.name}\` - ${command.description}`) let commands = await (await Commands(arg, ctx.client)).map(command => `\`${command.name}\` - ${command.description}`)
embed.addField("Commands", commands.join("\n")) embed.addField("Commands", commands.join("\n"))
// @ts-ignore // @ts-ignore
embed.setTitle(`${language.get(ctx.settings.locale).categories[folder.toLowerCase()].name || arg}`) embed.setTitle(`${language.get(ctx.settings.locale).categories[arg].name || arg}`)
// @ts-ignore // @ts-ignore
embed.setDescription(`${language.get(ctx.settings.locale).categories[folder.toLowerCase()].desc || ""}\n\nTotal Commands: **${commands.length}**`) embed.setDescription(`${language.get(ctx.settings.locale).categories[arg].desc || ""}\n\nTotal Commands: **${commands.length}**`)
return ctx.channel.send(embed) return ctx.channel.send(embed)
} }
// @ts-ignore // @ts-ignore
@ -46,7 +46,7 @@ export = class Help extends Command {
embed.setTitle("Command Help") embed.setTitle("Command Help")
if (command.aliases?.length !== 0) embed.addField("Aliases", `\`${command.aliases?.join("`\n⇒`")}\``, true) if (command.aliases?.length !== 0) embed.addField("Aliases", `\`${command.aliases?.join("`\n⇒`")}\``, true)
// @ts-ignore // @ts-ignore
embed.setDescription(`**Cooldown:** ${command.cooldown}s\n**Module:** ${language.get(ctx.settings.locale).categories[folder.toLowerCase()].name || command.module}\n**NSFW:** ${command.nsfw}`) embed.setDescription(`**Cooldown:** ${command.cooldown}s\n**Module:** ${language.get(ctx.settings.locale).categories[command?.module.toLowerCase()].name || command.module}\n**NSFW:** ${command.nsfw}`)
embed.addField("Usage", `\`thal ${command.name}\` ${command.usage}`, true) embed.addField("Usage", `\`thal ${command.name}\` ${command.usage}`, true)
ctx.channel.send(embed) ctx.channel.send(embed)
} }

View File

@ -1,5 +1,5 @@
import { Prom } from "./prometheus"; // import { Prom } from "./prometheus";
Prom.load() // Prom.load()
export default Prom // export default Prom

View File

@ -1,67 +1,67 @@
//! Code taken from NinoDiscord/Nino // //! Code taken from NinoDiscord/Nino
import prom from "prom-client" // import prom from "prom-client"
import { createServer, IncomingMessage, ServerResponse } from 'http' // import { createServer, IncomingMessage, ServerResponse } from 'http'
import vars from "../../variables" // import vars from "../../variables"
import Logger from "./logger" // import Logger from "./logger"
export default class Prometheus { // export default class Prometheus {
public commandsExecuted!: prom.Counter<string> // public commandsExecuted!: prom.Counter<string>
public messagesSeen!: prom.Counter<string> // public messagesSeen!: prom.Counter<string>
public guildCount!: prom.Gauge<string> // public guildCount!: prom.Gauge<string>
public totalGuilds!: prom.Gauge<string> // public totalGuilds!: prom.Gauge<string>
public uptime!: prom.Gauge<string> // public uptime!: prom.Gauge<string>
public events!: prom.Counter<string> // public events!: prom.Counter<string>
#server!: ReturnType<typeof createServer> // #server!: ReturnType<typeof createServer>
load() { // load() {
prom.collectDefaultMetrics() // prom.collectDefaultMetrics()
this.commandsExecuted = new prom.Counter({ // this.commandsExecuted = new prom.Counter({
labelNames: ['command'], // labelNames: ['command'],
name: "thaldrin_commands_executed", // name: "thaldrin_commands_executed",
help: "How many commands Thaldrin has executed successfully" // help: "How many commands Thaldrin has executed successfully"
}) // })
this.messagesSeen = new prom.Counter({ // this.messagesSeen = new prom.Counter({
name: "thaldrin_messages_seen", // name: "thaldrin_messages_seen",
help: "How many Messages Thaldrin has seen throughout the process lifespan" // help: "How many Messages Thaldrin has seen throughout the process lifespan"
}) // })
this.guildCount = new prom.Gauge({ // this.guildCount = new prom.Gauge({
name: "thaldrin_guild_count", // name: "thaldrin_guild_count",
help: "Number of Guilds Thaldrin joined this Lifecycle" // help: "Number of Guilds Thaldrin joined this Lifecycle"
}) // })
this.totalGuilds = new prom.Gauge({ // this.totalGuilds = new prom.Gauge({
name: "thaldrin_guilds_total", // name: "thaldrin_guilds_total",
help: "Total Number of Guilds Thaldrin is in" // help: "Total Number of Guilds Thaldrin is in"
}) // })
this.events = new prom.Counter({ // this.events = new prom.Counter({
labelNames: ['event'], // labelNames: ['event'],
name: "thaldrin_discord_events", // name: "thaldrin_discord_events",
help: "Received WebSocket events from Discord" // help: "Received WebSocket events from Discord"
}) // })
this.uptime = new prom.Gauge({ // this.uptime = new prom.Gauge({
name: "thaldrin_uptime", // name: "thaldrin_uptime",
help: "Thaldrin's Uptime" // help: "Thaldrin's Uptime"
}) // })
this.#server = createServer(this.onRequest.bind(this)); // this.#server = createServer(this.onRequest.bind(this));
this.#server.once('listening', () => Logger.info({ type: 'event:prometheusStart', message: `Prometheus: Listening at http://localhost:${vars.prometheus.port}` })); // this.#server.once('listening', () => Logger.info({ type: 'event:prometheusStart', message: `Prometheus: Listening at http://localhost:${vars.prometheus.port}` }));
this.#server.on('error', error => console.error(error)); // this.#server.on('error', error => console.error(error));
this.#server.listen(vars.prometheus.port); // this.#server.listen(vars.prometheus.port);
} // }
private async onRequest(req: IncomingMessage, res: ServerResponse) { // private async onRequest(req: IncomingMessage, res: ServerResponse) {
this.uptime.set(process.uptime()) // this.uptime.set(process.uptime())
if (req.url! === '/metrics') { // if (req.url! === '/metrics') {
res.writeHead(200, { 'Content-Type': prom.register.contentType }); // res.writeHead(200, { 'Content-Type': prom.register.contentType });
res.write(await prom.register.metrics()); // res.write(await prom.register.metrics());
} else if (req.url! === '/favicon.ico') { // } else if (req.url! === '/favicon.ico') {
res.writeHead(404, { 'Content-Type': 'application/json' }); // res.writeHead(404, { 'Content-Type': 'application/json' });
res.write('{"fuck":"you uwu"}'); // res.write('{"fuck":"you uwu"}');
} else { // } else {
res.writeHead(400, { 'Content-Type': 'application/json' }); // res.writeHead(400, { 'Content-Type': 'application/json' });
res.write('{"uwu":"owo"}'); // res.write('{"uwu":"owo"}');
} // }
res.end(); // res.end();
} // }
} // }
export const Prom = new Prometheus() // export const Prom = new Prometheus()