diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..6bfe9d85 Binary files /dev/null and b/package-lock.json differ diff --git a/slowcord/.vscode/launch.json b/slowcord/.vscode/launch.json index 0467baec..6b41b246 100644 --- a/slowcord/.vscode/launch.json +++ b/slowcord/.vscode/launch.json @@ -1,14 +1,20 @@ { "configurations": [ { - "name": "Launch Program", - "program": "${workspaceFolder}/build/index.js", - "request": "launch", - "skipFiles": [ - "/**" - ], + "name": "ts-node", "type": "node", - "preLaunchTask": "tsc: build - tsconfig.json" + "request": "launch", + "args": [ + "${relativeFile}" + ], + "runtimeArgs": [ + "-r", + "ts-node/register" + ], + "cwd": "${workspaceRoot}", + "protocol": "inspector", + "internalConsoleOptions": "openOnSessionStart" } + ] } \ No newline at end of file diff --git a/slowcord/bot/package.json b/slowcord/bot/package.json index 99355a0f..00f674d5 100644 --- a/slowcord/bot/package.json +++ b/slowcord/bot/package.json @@ -12,5 +12,6 @@ "dependencies": { "fosscord-gopnik": "^1.0.0", "typescript": "^4.7.4" - } + }, + "type": "module" } \ No newline at end of file diff --git a/slowcord/bot/src/Bot.ts b/slowcord/bot/src/Bot.ts index 6e0d8360..a89102e6 100644 --- a/slowcord/bot/src/Bot.ts +++ b/slowcord/bot/src/Bot.ts @@ -1,14 +1,19 @@ import { Message } from "discord.js"; import { Client } from "fosscord-gopnik/build/lib"; // huh? oh well. some bugs in my lib Ig +import { Command, getCommands } from "./commands/index.js"; + export default class Bot { client: Client; + commands: { [key: string]: Command; } = {}; constructor(client: Client) { this.client = client; } - onReady = () => { + onReady = async () => { + this.commands = await getCommands(); + console.log(`Logged in as ${this.client.user!.tag}`); this.client.user!.setPresence({ @@ -16,10 +21,29 @@ export default class Bot { name: "EVERYTHING", type: "WATCHING", }] - }) + }); + }; onMessageCreate = (msg: Message) => { - + const prefix = process.env.PREFIX as string; + if (msg.content.indexOf(prefix) === -1) return; + if (msg.author.bot) return; + + const content = msg.content.slice(prefix.length).split(" "); + const cmd = content.shift(); + if (!cmd) return; + const args = content; + + const command = this.commands[cmd]; + if (!command) return; + + command.exec({ + user: msg.author, + member: msg.member, + guild: msg.guild, + message: msg, + args: args, + }); }; } \ No newline at end of file diff --git a/slowcord/bot/src/commands/index.ts b/slowcord/bot/src/commands/index.ts new file mode 100644 index 00000000..ef2d2a22 --- /dev/null +++ b/slowcord/bot/src/commands/index.ts @@ -0,0 +1,33 @@ +import { Message, GuildMember, Guild, User } from "discord.js"; +import fs from "fs"; + +export type CommandContext = { + user: User, + guild: Guild | null, + member: GuildMember | null, + message: Message, + args: string[], +}; + +export type Command = { + name: string; + exec: (ctx: CommandContext) => any; +}; + +const walk = async (path: string): Promise => { + const files = fs.readdirSync(path); + const out: Command[] = []; + for (var file of files) { + if (file.indexOf("index") !== -1) continue; + + var imported = await import(`${path}/${file}`); + } + + return out; +}; + +export const getCommands = async () => { + const map: { [key: string]: Command; } = {}; + (await walk("./build/commands")).forEach((val) => map[val.name] = val); + return map; +}; \ No newline at end of file diff --git a/slowcord/bot/src/commands/instance.ts b/slowcord/bot/src/commands/instance.ts new file mode 100644 index 00000000..7fcfaef4 --- /dev/null +++ b/slowcord/bot/src/commands/instance.ts @@ -0,0 +1,8 @@ +import { Command } from "./index.js"; + +export default { + name: "instance", + exec: ({ message }) => { + message.reply("Test"); + } +} as Command; \ No newline at end of file diff --git a/slowcord/bot/src/index.ts b/slowcord/bot/src/index.ts index 07a6aa7c..2113b3a8 100644 --- a/slowcord/bot/src/index.ts +++ b/slowcord/bot/src/index.ts @@ -1,6 +1,6 @@ import "dotenv/config"; import Fosscord from "fosscord-gopnik"; -import Bot from "./Bot"; +import Bot from "./Bot.js"; // huh? const client = new Fosscord.Client({ intents: ["GUILD_MESSAGES"], @@ -15,7 +15,6 @@ const client = new Fosscord.Client({ const bot = new Bot(client); client.on("ready", bot.onReady); - client.on("messageCreate", bot.onMessageCreate); client.login(process.env.TOKEN); \ No newline at end of file diff --git a/slowcord/bot/tsconfig.json b/slowcord/bot/tsconfig.json index bb7a5a33..08c1fe6a 100644 --- a/slowcord/bot/tsconfig.json +++ b/slowcord/bot/tsconfig.json @@ -11,7 +11,7 @@ // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ /* Language and Environment */ - "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + "target": "ES2022", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ // "jsx": "preserve", /* Specify what JSX code is generated. */ // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ @@ -24,9 +24,9 @@ // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ /* Modules */ - "module": "commonjs", /* Specify what module code is generated. */ + "module": "ES2022", /* Specify what module code is generated. */ // "rootDir": "./", /* Specify the root folder within your source files. */ - // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ + "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ diff --git a/slowcord/login/package-lock.json b/slowcord/login/package-lock.json index ce35de56..60f36fa5 100644 Binary files a/slowcord/login/package-lock.json and b/slowcord/login/package-lock.json differ diff --git a/slowcord/login/package.json b/slowcord/login/package.json index 344903e4..9ee62b2c 100644 --- a/slowcord/login/package.json +++ b/slowcord/login/package.json @@ -22,7 +22,8 @@ "cookie-parser": "^1.4.6", "dotenv": "^16.0.1", "express": "^4.18.1", - "node-fetch": "^3.2.6" + "node-fetch": "^3.2.6", + "sqlite3": "^5.0.8" }, "devDependencies": { "@types/cookie-parser": "^1.4.3",