mirror of
https://github.com/nx-bat/discordbot-ng.git
synced 2026-11-11 07:13:37 -05:00
Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
56f528c0c3 | ||
|
|
a2af916ddc | ||
|
|
22da1c5a80 |
Generated
-108
@@ -9,10 +9,8 @@
|
||||
"@redis/client": "5.1.0",
|
||||
"body-parser": "2.3.0",
|
||||
"discord.js": "14.27.0",
|
||||
"dotenv": "16.5.0",
|
||||
"express": "5.1.0",
|
||||
"express-session": "1.19.0",
|
||||
"markdown-it": "15.0.0",
|
||||
"memorystore": "1.6.7",
|
||||
"sqlite": "5.1.1",
|
||||
"sqlite3": "6.0.1"
|
||||
@@ -1894,17 +1892,6 @@
|
||||
"url": "https://github.com/discordjs/discord.js?sponsor"
|
||||
}
|
||||
},
|
||||
"node_modules/dotenv": {
|
||||
"version": "16.5.0",
|
||||
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz",
|
||||
"integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://dotenvx.com"
|
||||
}
|
||||
},
|
||||
"node_modules/dunder-proto": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
|
||||
@@ -1951,18 +1938,6 @@
|
||||
"once": "^1.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/entities": {
|
||||
"version": "8.0.0",
|
||||
"resolved": "https://registry.npmjs.org/entities/-/entities-8.0.0.tgz",
|
||||
"integrity": "sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==",
|
||||
"license": "BSD-2-Clause",
|
||||
"engines": {
|
||||
"node": ">=20.19.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/fb55/entities?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/env-paths": {
|
||||
"version": "2.2.1",
|
||||
"resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
|
||||
@@ -2919,25 +2894,6 @@
|
||||
"node": ">= 0.8.0"
|
||||
}
|
||||
},
|
||||
"node_modules/linkify-it": {
|
||||
"version": "6.1.0",
|
||||
"resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-6.1.0.tgz",
|
||||
"integrity": "sha512-wJ/TwpSDTLepCrQoYWYIExIKg5Zchex2Nn5yk2mFnB+6PtdkHtyLx742md9csRjjOnGkKIS/RrbY7l8D6gT9Vw==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/puzrin"
|
||||
},
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/markdown-it"
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"uc.micro": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/locate-path": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
|
||||
@@ -2976,49 +2932,6 @@
|
||||
"integrity": "sha512-afO2mnxW7GDTXMm5/AoN1WuOcdoKhtgXjIvHmobqTD1grNplhGdv3PFOyjCVmrnOZBIT/gD/koDKpYG+0mvHcg==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/markdown-it": {
|
||||
"version": "15.0.0",
|
||||
"resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-15.0.0.tgz",
|
||||
"integrity": "sha512-Lf8ajvVNdRpzSNB4VegxNy7gjs8gU35l4b4+ET49LrQC5PKYwLZ72u60LeJ9gv3qiaesuYjJWCyVeQmv/QWKQw==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/puzrin"
|
||||
},
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/markdown-it"
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"argparse": "^3.0.0",
|
||||
"entities": "^8.0.0",
|
||||
"linkify-it": "^6.0.0",
|
||||
"mdurl": "^2.1.0",
|
||||
"punycode.js": "^2.3.1",
|
||||
"uc.micro": "^3.0.0"
|
||||
},
|
||||
"bin": {
|
||||
"markdown-it": "bin/markdown-it.mjs"
|
||||
}
|
||||
},
|
||||
"node_modules/markdown-it/node_modules/argparse": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/argparse/-/argparse-3.0.0.tgz",
|
||||
"integrity": "sha512-BOp5NMrHqKxmq/OLr+clzzrRxgOKSLkcjmkWuChp7Irqwn4s74WjOBPIgWfA/HMcBnVkZ5XEuf9uUqzlpfCQ6A==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/puzrin"
|
||||
},
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/nodeca"
|
||||
}
|
||||
],
|
||||
"license": "Python-2.0"
|
||||
},
|
||||
"node_modules/math-intrinsics": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
|
||||
@@ -3027,12 +2940,6 @@
|
||||
"node": ">= 0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/mdurl": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.1.0.tgz",
|
||||
"integrity": "sha512-1+HBaOx0zi/dQWht8rNv9MYf9qqpqL/kxI0hXImU6Y547zM6Sni8BQibt7ifgMcYtQg41ao3Ivd6cnSM86inpg==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/media-typer": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz",
|
||||
@@ -3591,15 +3498,6 @@
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/punycode.js": {
|
||||
"version": "2.3.1",
|
||||
"resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz",
|
||||
"integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/qs": {
|
||||
"version": "6.15.2",
|
||||
"resolved": "https://registry.npmjs.org/qs/-/qs-6.15.2.tgz",
|
||||
@@ -4568,12 +4466,6 @@
|
||||
"typescript": ">=4.8.4 <5.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/uc.micro": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-3.0.0.tgz",
|
||||
"integrity": "sha512-U3PppEkleoTnIfi8BozMx3yju3qc/L6SwqWo2Sw+54PX+PX0q9I+r1Um5HCmqD7n9VDX5/v3vQH/AjA6deDdtw==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/uid-safe": {
|
||||
"version": "2.1.5",
|
||||
"resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz",
|
||||
|
||||
+4
-6
@@ -18,23 +18,21 @@
|
||||
"@redis/client": "5.1.0",
|
||||
"body-parser": "2.3.0",
|
||||
"discord.js": "14.27.0",
|
||||
"dotenv": "16.5.0",
|
||||
"express": "5.1.0",
|
||||
"express-session": "1.19.0",
|
||||
"markdown-it": "15.0.0",
|
||||
"memorystore": "1.6.7",
|
||||
"sqlite": "5.1.1",
|
||||
"sqlite3": "6.0.1"
|
||||
},
|
||||
"scripts": {
|
||||
"dev": "tsx watch --enable-source-maps src/index.ts",
|
||||
"start": "node dist/index.js",
|
||||
"dev": "tsx watch --enable-source-maps --env-file=.env src/index.ts",
|
||||
"start": "node --env-file=.env dist/index.js",
|
||||
"lint": "npx eslint .",
|
||||
"typecheck": "npx tsc --noEmit",
|
||||
"build": "npm run clean && node scripts/build.js && npm run copyfiles",
|
||||
"clean": "rimraf dist",
|
||||
"copyfiles": "copyfiles -u 1 \"./src/**/*.html\" ./dist",
|
||||
"encrypt": "node ./scripts/encrypt-data.js",
|
||||
"add-author-hash": "node ./scripts/add-author-id-hash.js"
|
||||
"encrypt": "node --env-file=.env ./scripts/encrypt-data.js",
|
||||
"add-author-hash": "node --env-file=.env ./scripts/add-author-id-hash.js"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
import crypto from 'crypto';
|
||||
import dotenv from 'dotenv';
|
||||
import { open } from 'sqlite';
|
||||
import sqlite3 from 'sqlite3';
|
||||
|
||||
dotenv.config();
|
||||
|
||||
async function main() {
|
||||
Encrypter.initialize(process.env.DATABASE_SECRET);
|
||||
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
import crypto from 'crypto';
|
||||
import dotenv from 'dotenv';
|
||||
import { open } from 'sqlite';
|
||||
import sqlite3 from 'sqlite3';
|
||||
|
||||
dotenv.config();
|
||||
|
||||
async function main() {
|
||||
Encrypter.initialize(process.env.DATABASE_SECRET);
|
||||
|
||||
|
||||
@@ -1,7 +1,3 @@
|
||||
import dotenv from 'dotenv';
|
||||
|
||||
dotenv.config();
|
||||
|
||||
const { DISCORD_TOKEN, DISCORD_CLIENT_ID, DISCORD_CLIENT_SECRET, DISCORD_GUILD_ID, RELEASE_SECRET, DATABASE_SECRET, LINK_SECRET, E621_BASE_URL, E926_BASE_URL, PRIVACY_POLICY_URL, GIT_REPO_BASE_URL, REDIS_URL, PORT, DEBUG } = process.env;
|
||||
|
||||
export const config = {
|
||||
|
||||
+10
-4
@@ -1,13 +1,13 @@
|
||||
import { Client as DiscordClient, GatewayIntentBits, MessageFlags, Partials } from 'discord.js';
|
||||
import { config } from './config';
|
||||
import events from './events';
|
||||
import { ScheduledTasks, Scheduler } from './scheduler';
|
||||
import { Database } from './shared/Database';
|
||||
import { openRedisClient } from './shared/RedisClient';
|
||||
import { Handler } from './types';
|
||||
import { initIfNecessary, loadHandlersFrom, refreshCommands } from './utils';
|
||||
import { initializeWebserver } from './webserver';
|
||||
import { Encrypter } from './shared/Encrypter';
|
||||
import tasks from './tasks';
|
||||
|
||||
|
||||
let ready = false;
|
||||
@@ -31,8 +31,6 @@ const client = new DiscordClient({
|
||||
}
|
||||
});
|
||||
|
||||
const scheduler: Scheduler = new Scheduler(client);
|
||||
|
||||
const commands: Handler[] = [];
|
||||
const contextMenus: Handler[] = [];
|
||||
const buttons: Handler[] = [];
|
||||
@@ -141,7 +139,15 @@ client.on('clientReady', async () => {
|
||||
|
||||
await initializeWebserver(client);
|
||||
|
||||
ScheduledTasks.forEach(task => scheduler.add(task));
|
||||
tasks.forEach((task) => {
|
||||
const handler = () => {
|
||||
Promise.resolve(task.handle(client))
|
||||
.catch(e => console.error(`Error in '${task.id}' task:`, e));
|
||||
};
|
||||
|
||||
if (task.firstRun) handler();
|
||||
setInterval(handler, task.interval);
|
||||
});
|
||||
|
||||
events.forEach(event =>
|
||||
client.on(event.event, (...args) =>
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
import { Client } from 'discord.js';
|
||||
import { Task } from '../types';
|
||||
import ScheduledTasks from './tasks';
|
||||
|
||||
class Scheduler {
|
||||
private tasks = new Map<Task, NodeJS.Timeout>();
|
||||
private context: Client;
|
||||
|
||||
constructor(context: Client) {
|
||||
this.context = context;
|
||||
}
|
||||
|
||||
add(task: Task) {
|
||||
const interval = setInterval(() => task.handle(this.context), task.interval);
|
||||
if (task.firstRun) interval._onTimeout();
|
||||
|
||||
this.tasks.set(task, interval);
|
||||
}
|
||||
}
|
||||
|
||||
export {
|
||||
ScheduledTasks, Scheduler
|
||||
};
|
||||
@@ -1,14 +0,0 @@
|
||||
import { Client } from 'discord.js';
|
||||
import { Task } from '../../types';
|
||||
import { checkExpiredBans } from '../../utils';
|
||||
|
||||
class CheckExpiredBansTask implements Task {
|
||||
interval: number = 300000;
|
||||
firstRun: boolean = true;
|
||||
|
||||
async handle(context: Client): Promise<void> {
|
||||
await checkExpiredBans(context);
|
||||
}
|
||||
}
|
||||
|
||||
export default new CheckExpiredBansTask();
|
||||
@@ -1,14 +0,0 @@
|
||||
import { Client } from 'discord.js';
|
||||
import { Task } from '../../types';
|
||||
import { closeOldTickets } from '../../utils';
|
||||
|
||||
class CloseStaleTicketsTask implements Task {
|
||||
interval: number = 3.6e6;
|
||||
firstRun: boolean = true;
|
||||
|
||||
async handle(context: Client): Promise<void> {
|
||||
await closeOldTickets(context);
|
||||
}
|
||||
}
|
||||
|
||||
export default new CloseStaleTicketsTask();
|
||||
@@ -1,9 +0,0 @@
|
||||
import checkExpiredBansTask from './check-expired-bans-task';
|
||||
import closeStaleTicketsTask from './close-stale-tickets-task';
|
||||
import pruneOldMessagesTask from './prune-old-messages-task';
|
||||
|
||||
export default [
|
||||
closeStaleTicketsTask,
|
||||
checkExpiredBansTask,
|
||||
pruneOldMessagesTask
|
||||
];
|
||||
@@ -1,13 +0,0 @@
|
||||
import { Task } from '../../types';
|
||||
import { Database } from '../../shared/Database';
|
||||
|
||||
class PruneOldMessagesTask implements Task {
|
||||
interval: number = 3.6e6;
|
||||
firstRun: boolean = true;
|
||||
|
||||
async handle(): Promise<void> {
|
||||
await Database.pruneOldMessages();
|
||||
}
|
||||
}
|
||||
|
||||
export default new PruneOldMessagesTask();
|
||||
@@ -0,0 +1,15 @@
|
||||
import { Client } from 'discord.js';
|
||||
import { Task } from '../types';
|
||||
import { checkExpiredBans } from '../utils';
|
||||
|
||||
const task: Task = {
|
||||
id: 'checkExpiredBans',
|
||||
interval: 300000,
|
||||
firstRun: true,
|
||||
|
||||
handle: async (context: Client) => {
|
||||
await checkExpiredBans(context);
|
||||
},
|
||||
};
|
||||
|
||||
export default task;
|
||||
@@ -0,0 +1,15 @@
|
||||
import { Client } from 'discord.js';
|
||||
import { Task } from '../types';
|
||||
import { closeOldTickets } from '../utils';
|
||||
|
||||
const task: Task = {
|
||||
id: 'closeStaleTickets',
|
||||
interval: 3.6e6,
|
||||
firstRun: true,
|
||||
|
||||
handle: async (context: Client) => {
|
||||
await closeOldTickets(context);
|
||||
},
|
||||
};
|
||||
|
||||
export default task;
|
||||
@@ -0,0 +1,9 @@
|
||||
import checkExpiredBansTask from './checkExpiredBansTask';
|
||||
import closeStaleTicketsTask from './closeStaleTicketsTask';
|
||||
import pruneOldMessagesTask from './pruneOldMessagesTask';
|
||||
|
||||
export default [
|
||||
closeStaleTicketsTask,
|
||||
checkExpiredBansTask,
|
||||
pruneOldMessagesTask
|
||||
];
|
||||
@@ -0,0 +1,15 @@
|
||||
import { Client } from 'discord.js';
|
||||
import { Database } from '../shared/Database';
|
||||
import { Task } from '../types';
|
||||
|
||||
const task: Task = {
|
||||
id: 'pruneOldMessages',
|
||||
interval: 3.6e6,
|
||||
firstRun: true,
|
||||
|
||||
handle: async (context: Client) => {
|
||||
await Database.pruneOldMessages();
|
||||
},
|
||||
};
|
||||
|
||||
export default task;
|
||||
Vendored
+1
-1
@@ -3,4 +3,4 @@ export * from './database-types.d';
|
||||
export * from './e621-types.d';
|
||||
export * from './handler.d';
|
||||
export * from './helper-types.d';
|
||||
export * from './scheduler.d';
|
||||
export * from './task.d';
|
||||
|
||||
+2
-1
@@ -1,8 +1,9 @@
|
||||
import { Client } from 'discord.js';
|
||||
|
||||
export interface Task {
|
||||
id: string;
|
||||
interval: number;
|
||||
firstRun: boolean;
|
||||
|
||||
handle(context: Client): Promise<void>;
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user