added support for custom commands
This commit is contained in:
parent
30a6f78103
commit
1875e289ed
4
package-lock.json
generated
4
package-lock.json
generated
@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "denim_3001",
|
"name": "denim_3001",
|
||||||
"version": "3001.36.1",
|
"version": "3001.37.0",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "denim_3001",
|
"name": "denim_3001",
|
||||||
"version": "3001.36.1",
|
"version": "3001.37.0",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@discordjs/opus": "github:discordjs/opus",
|
"@discordjs/opus": "github:discordjs/opus",
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "denim_3001",
|
"name": "denim_3001",
|
||||||
"version": "3001.36.1",
|
"version": "3001.37.0",
|
||||||
"description": "Toto je velmi kvalitní bot.",
|
"description": "Toto je velmi kvalitní bot.",
|
||||||
"repository": {
|
"repository": {
|
||||||
"url": "https://github.com/Histmy/Denim-Bot/"
|
"url": "https://github.com/Histmy/Denim-Bot/"
|
||||||
|
|||||||
1
res/komandi.json
Normal file
1
res/komandi.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{}
|
||||||
24
src/app.ts
24
src/app.ts
@ -1,10 +1,12 @@
|
|||||||
import { Client, Collection, Intents, Message, MessageActionRow, MessageButton } from "discord.js";
|
import { Client, Collection, Intents, MessageActionRow, MessageButton } from "discord.js";
|
||||||
import { readdirSync } from "fs";
|
import { readdirSync } from "fs";
|
||||||
import { CUser, EventSOn, KoamndNaExport, Komand, ListenerFunkce, Modul, RunFunkce, SRecord, SuperListenerFunkce } from "./utils/types";
|
import { CUser, EventSOn, KomandNaExport, Komand, ListenerFunkce, Modul, RunFunkce, SRecord, SuperListenerFunkce, CustomKomandy } from "./utils/types";
|
||||||
import { adminLog, formatCas, loadEnv, oddiakritikovat } from "./utils/utils.js";
|
import { adminLog, formatCas, loadEnv, oddiakritikovat } from "./utils/utils.js";
|
||||||
import levenshtein from "js-levenshtein";
|
import levenshtein from "js-levenshtein";
|
||||||
import { emouty } from "./utils/emotes";
|
import { emouty } from "./utils/emotes";
|
||||||
|
|
||||||
|
const custom: CustomKomandy = require("./utils/customCommands");
|
||||||
|
|
||||||
loadEnv();
|
loadEnv();
|
||||||
|
|
||||||
const ints = Intents.FLAGS;
|
const ints = Intents.FLAGS;
|
||||||
@ -16,7 +18,10 @@ const superEventy: SRecord<SuperListenerFunkce[]> = {};
|
|||||||
const komandy: SRecord<Komand> = {};
|
const komandy: SRecord<Komand> = {};
|
||||||
const aliasy: SRecord<string> = {};
|
const aliasy: SRecord<string> = {};
|
||||||
const kuldan_log: SRecord<SRecord<number>> = {};
|
const kuldan_log: SRecord<SRecord<number>> = {};
|
||||||
const komandyNaPoslani: KoamndNaExport[] = [];
|
const komandyNaPoslani: KomandNaExport[] = [];
|
||||||
|
let customKomandy: SRecord<Komand> = custom.cKomandy;
|
||||||
|
|
||||||
|
custom.emitter.on("komandi", komandi => customKomandy = komandi);
|
||||||
|
|
||||||
const runEvent = (name: string, args: any[]) => {
|
const runEvent = (name: string, args: any[]) => {
|
||||||
for (const listener of superEventy[name] || []) {
|
for (const listener of superEventy[name] || []) {
|
||||||
@ -76,7 +81,7 @@ readdirSync(modulFolder).forEach(soubor => {
|
|||||||
const n = modul[name]!;
|
const n = modul[name]!;
|
||||||
Object.keys(n).forEach(cmdName => {
|
Object.keys(n).forEach(cmdName => {
|
||||||
const value = n[cmdName];
|
const value = n[cmdName];
|
||||||
const toCoExportuju: KoamndNaExport = { name: cmdName };
|
const toCoExportuju: KomandNaExport = { name: cmdName };
|
||||||
let hide = false;
|
let hide = false;
|
||||||
if (typeof value !== "object") {
|
if (typeof value !== "object") {
|
||||||
komandy[cmdName] = { run: value };
|
komandy[cmdName] = { run: value };
|
||||||
@ -93,6 +98,11 @@ readdirSync(modulFolder).forEach(soubor => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
custom.realKomandy = komandy;
|
||||||
|
komandy["naucse"] = { run: custom.naucse };
|
||||||
|
komandy["zapomen"] = { run: custom.zapomen };
|
||||||
|
komandyNaPoslani.push(...custom.naSend);
|
||||||
|
|
||||||
require("./utils/helpServer").cmds = komandyNaPoslani;
|
require("./utils/helpServer").cmds = komandyNaPoslani;
|
||||||
|
|
||||||
const maKuldan = (id: string, komand: string, kuldan_komandu: number) => {
|
const maKuldan = (id: string, komand: string, kuldan_komandu: number) => {
|
||||||
@ -137,11 +147,11 @@ client.on("messageCreate", async mes => {
|
|||||||
|
|
||||||
const cmdName = aliasy[komand] ?? komand;
|
const cmdName = aliasy[komand] ?? komand;
|
||||||
if (runEvent("message", [mes, cmdName])) return;
|
if (runEvent("message", [mes, cmdName])) return;
|
||||||
const cmd = komandy[cmdName];
|
const cmd = komandy[cmdName] ?? customKomandy[cmdName];
|
||||||
|
|
||||||
if (!cmd) {
|
if (!cmd) {
|
||||||
const slova: string[] = [];
|
const slova: string[] = [];
|
||||||
[...Object.keys(komandy), ...Object.keys(aliasy)].forEach(cmnd => {
|
[...Object.keys(komandy), ...Object.keys(customKomandy), ...Object.keys(aliasy)].forEach(cmnd => {
|
||||||
const distance = levenshtein(cmnd, cmdName);
|
const distance = levenshtein(cmnd, cmdName);
|
||||||
if (distance <= Math.ceil(cmdName.length * 0.3)) slova.push(cmnd);
|
if (distance <= Math.ceil(cmdName.length * 0.3)) slova.push(cmnd);
|
||||||
});
|
});
|
||||||
@ -160,7 +170,7 @@ client.on("messageCreate", async mes => {
|
|||||||
if (isNaN(lookupId)) return void mes.channel.send("neco nefunguje idk");
|
if (isNaN(lookupId)) return void mes.channel.send("neco nefunguje idk");
|
||||||
const komand = nabidka[lookupId];
|
const komand = nabidka[lookupId];
|
||||||
const cmdName = aliasy[komand] ?? komand;
|
const cmdName = aliasy[komand] ?? komand;
|
||||||
const cmd = komandy[cmdName];
|
const cmd = komandy[cmdName] ?? customKomandy[cmdName];
|
||||||
radek.components.forEach(btn => btn.setDisabled());
|
radek.components.forEach(btn => btn.setDisabled());
|
||||||
i.update({ content: `ok vole ${emouty.d3k}`, components: [radek] });
|
i.update({ content: `ok vole ${emouty.d3k}`, components: [radek] });
|
||||||
runKomand(cmd, cmdName);
|
runKomand(cmd, cmdName);
|
||||||
|
|||||||
48
src/utils/customCommands.ts
Normal file
48
src/utils/customCommands.ts
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
import { EventEmitter } from "events";
|
||||||
|
import { KomandNaExport, Komand, RunFunkce, SRecord } from "./types";
|
||||||
|
import { readFileSync, writeFileSync } from "fs";
|
||||||
|
import { join } from "path";
|
||||||
|
|
||||||
|
const cesta = join(__dirname, "../../res/komandi.json");
|
||||||
|
const komandi: SRecord<{ text: string; owner: string; }> = JSON.parse(readFileSync(cesta).toString());
|
||||||
|
export let cKomandy = save(true);
|
||||||
|
export const emitter = new EventEmitter();
|
||||||
|
|
||||||
|
function save(): void;
|
||||||
|
function save(nesend: true): SRecord<Komand>;
|
||||||
|
function save(nesend?: true) {
|
||||||
|
const cKomandi: SRecord<Komand> = {};
|
||||||
|
Object.keys(komandi).forEach(c => {
|
||||||
|
cKomandi[c] = { run: komandi[c].text };
|
||||||
|
});
|
||||||
|
if (nesend) return cKomandi;
|
||||||
|
cKomandy = cKomandi;
|
||||||
|
emitter.emit("komandi", cKomandy);
|
||||||
|
writeFileSync(cesta, JSON.stringify(komandi));
|
||||||
|
}
|
||||||
|
|
||||||
|
export const naucse: RunFunkce = (mes, arg) => {
|
||||||
|
const args = arg.split(" ");
|
||||||
|
if (module.exports.realKomandy[args[0]] || komandi[args[0]]) return "tuten komand uz ale egzistuje";
|
||||||
|
if (!args.length) return "a co se mam jako naucit";
|
||||||
|
if (arg.length == 1) return "a co bich nato mnel rict????";
|
||||||
|
komandi[args[0].toLowerCase()] = { text: args.splice(1).join(" "), owner: mes.author.id };
|
||||||
|
save();
|
||||||
|
return "jo";
|
||||||
|
};
|
||||||
|
|
||||||
|
export const zapomen: RunFunkce = (mes, arg) => {
|
||||||
|
const com = arg.toLowerCase();
|
||||||
|
if (module.exports.realKomandy[com]) return "tuten komand se neda smazat ti smazko";
|
||||||
|
const cmd = komandi[com];
|
||||||
|
if (!cmd) return `komand "${arg}" neznam`;
|
||||||
|
if (cmd.owner != mes.author.id) return "tuto ael neni tvuj komand toxikale zkurvenej";
|
||||||
|
delete komandi[com];
|
||||||
|
save();
|
||||||
|
return "jo";
|
||||||
|
};
|
||||||
|
|
||||||
|
export const naSend: KomandNaExport[] = [
|
||||||
|
{ name: "naucse", arg: "<jméno nového komandu> <obsah nového komandu>" },
|
||||||
|
{ name: "zapomen", arg: "název komandu" }
|
||||||
|
];
|
||||||
@ -1,8 +1,8 @@
|
|||||||
import { createServer } from "http";
|
import { createServer } from "http";
|
||||||
import { KoamndNaExport } from "./types";
|
import { KomandNaExport } from "./types";
|
||||||
|
|
||||||
createServer((_, res) => {
|
createServer((_, res) => {
|
||||||
const komandi: KoamndNaExport[] = module.exports.cmds;
|
const komandi: KomandNaExport[] = module.exports.cmds;
|
||||||
const odpoved = JSON.stringify({ komandy: komandi });
|
const odpoved = JSON.stringify({ komandy: komandi });
|
||||||
res.setHeader("Content-Type", "application/json");
|
res.setHeader("Content-Type", "application/json");
|
||||||
res.end(odpoved);
|
res.end(odpoved);
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
import { VoiceConnection } from "@discordjs/voice";
|
import { VoiceConnection } from "@discordjs/voice";
|
||||||
import { Client, ClientEvents, ClientPresenceStatusData, Message, MessageOptions, User } from "discord.js";
|
import { Client, ClientEvents, ClientPresenceStatusData, Message, MessageOptions, User } from "discord.js";
|
||||||
|
import { EventEmitter } from "events";
|
||||||
|
|
||||||
type OutputRunFunkce = string | MessageOptions | void;
|
type OutputRunFunkce = string | MessageOptions | void;
|
||||||
|
|
||||||
@ -71,7 +72,7 @@ export interface MuzikaFace {
|
|||||||
volume: number;
|
volume: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
export type KoamndNaExport = {
|
export type KomandNaExport = {
|
||||||
name: string;
|
name: string;
|
||||||
} & BaseKomandProps;
|
} & BaseKomandProps;
|
||||||
|
|
||||||
@ -83,3 +84,12 @@ export interface JoinHovna {
|
|||||||
export interface CUser extends User {
|
export interface CUser extends User {
|
||||||
presence?: ClientPresenceStatusData;
|
presence?: ClientPresenceStatusData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface CustomKomandy {
|
||||||
|
cKomandy: SRecord<Komand>;
|
||||||
|
emitter: EventEmitter;
|
||||||
|
naucse: RunFunkce;
|
||||||
|
zapomen: RunFunkce;
|
||||||
|
naSend: KomandNaExport[];
|
||||||
|
realKomandy: SRecord<Komand>;
|
||||||
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user