bot stuff idk

This commit is contained in:
Madeline 2022-07-09 13:48:22 +10:00
parent bcf4cdd326
commit cd01465d69
10 changed files with 24813 additions and 18 deletions

22681
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,14 +1,20 @@
{ {
"configurations": [ "configurations": [
{ {
"name": "Launch Program", "name": "ts-node",
"program": "${workspaceFolder}/build/index.js",
"request": "launch",
"skipFiles": [
"<node_internals>/**"
],
"type": "node", "type": "node",
"preLaunchTask": "tsc: build - tsconfig.json" "request": "launch",
"args": [
"${relativeFile}"
],
"runtimeArgs": [
"-r",
"ts-node/register"
],
"cwd": "${workspaceRoot}",
"protocol": "inspector",
"internalConsoleOptions": "openOnSessionStart"
} }
] ]
} }

View File

@ -12,5 +12,6 @@
"dependencies": { "dependencies": {
"fosscord-gopnik": "^1.0.0", "fosscord-gopnik": "^1.0.0",
"typescript": "^4.7.4" "typescript": "^4.7.4"
} },
"type": "module"
} }

View File

@ -1,14 +1,19 @@
import { Message } from "discord.js"; import { Message } from "discord.js";
import { Client } from "fosscord-gopnik/build/lib"; // huh? oh well. some bugs in my lib Ig 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 { export default class Bot {
client: Client; client: Client;
commands: { [key: string]: Command; } = {};
constructor(client: Client) { constructor(client: Client) {
this.client = client; this.client = client;
} }
onReady = () => { onReady = async () => {
this.commands = await getCommands();
console.log(`Logged in as ${this.client.user!.tag}`); console.log(`Logged in as ${this.client.user!.tag}`);
this.client.user!.setPresence({ this.client.user!.setPresence({
@ -16,10 +21,29 @@ export default class Bot {
name: "EVERYTHING", name: "EVERYTHING",
type: "WATCHING", type: "WATCHING",
}] }]
}) });
}; };
onMessageCreate = (msg: Message) => { 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,
});
}; };
} }

View File

@ -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<Command[]> => {
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;
};

View File

@ -0,0 +1,8 @@
import { Command } from "./index.js";
export default {
name: "instance",
exec: ({ message }) => {
message.reply("Test");
}
} as Command;

View File

@ -1,6 +1,6 @@
import "dotenv/config"; import "dotenv/config";
import Fosscord from "fosscord-gopnik"; import Fosscord from "fosscord-gopnik";
import Bot from "./Bot"; import Bot from "./Bot.js"; // huh?
const client = new Fosscord.Client({ const client = new Fosscord.Client({
intents: ["GUILD_MESSAGES"], intents: ["GUILD_MESSAGES"],
@ -15,7 +15,6 @@ const client = new Fosscord.Client({
const bot = new Bot(client); const bot = new Bot(client);
client.on("ready", bot.onReady); client.on("ready", bot.onReady);
client.on("messageCreate", bot.onMessageCreate); client.on("messageCreate", bot.onMessageCreate);
client.login(process.env.TOKEN); client.login(process.env.TOKEN);

View File

@ -11,7 +11,7 @@
// "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
/* Language and Environment */ /* 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. */ // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
// "jsx": "preserve", /* Specify what JSX code is generated. */ // "jsx": "preserve", /* Specify what JSX code is generated. */
// "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */
@ -24,9 +24,9 @@
// "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
/* Modules */ /* 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. */ // "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. */ // "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. */ // "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. */ // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */

File diff suppressed because it is too large Load Diff

View File

@ -22,7 +22,8 @@
"cookie-parser": "^1.4.6", "cookie-parser": "^1.4.6",
"dotenv": "^16.0.1", "dotenv": "^16.0.1",
"express": "^4.18.1", "express": "^4.18.1",
"node-fetch": "^3.2.6" "node-fetch": "^3.2.6",
"sqlite3": "^5.0.8"
}, },
"devDependencies": { "devDependencies": {
"@types/cookie-parser": "^1.4.3", "@types/cookie-parser": "^1.4.3",