GPTcord/src/index.ts

67 lines
2.1 KiB
TypeScript
Raw Normal View History

2023-03-14 21:16:54 +01:00
import DiscordApi from "discord.js";
import { Configuration as OpenAIApiConfiguration, OpenAIApi } from "openai";
import { PrismaClient } from "@prisma/client";
import Typescript from "typescript";
import fs from "node:fs";
2023-03-14 21:16:54 +01:00
import { queueRequest } from "./execution";
import InteractionManager from "./interactionManager";
import newConfig, { IConfig, IConfigRequired } from "./configDefault";
2023-03-14 21:16:54 +01:00
const discord = new DiscordApi.Client({
intents: [
DiscordApi.GatewayIntentBits.Guilds,
DiscordApi.GatewayIntentBits.GuildMessages,
DiscordApi.GatewayIntentBits.MessageContent,
]
});
function getConfig() {
let fileConfig: IConfig | undefined = undefined;
try {
fs.statSync("./config.ts");
const program = Typescript.createProgram(
["./config.ts"],
{outDir: "./dist"}
);
program.getSourceFiles()
.filter(e => {
if (!e.fileName.match(`^${process.cwd()}`)) return true;
if (e.fileName.match(`${process.cwd()}/node_modules`)) return false;
if (e.fileName.match(`${process.cwd()}/src/`)) return false;
return true;
})
.forEach(e => program.emit(e));
// eslint-disable-next-line @typescript-eslint/no-var-requires, @typescript-eslint/no-unsafe-member-access
fileConfig = require("../config").default as IConfig;
} catch (e) {
//FIXME: make errors more descriptive to the enduser
console.log(e);
}
return fileConfig !== undefined ? newConfig(fileConfig) : newConfig();
}
export const config: IConfigRequired = getConfig();
export const openai = new OpenAIApi(new OpenAIApiConfiguration({
2023-03-14 21:16:54 +01:00
apiKey: config.tokens.OpenAI
}));
export const database = new PrismaClient();
const interactionManager = new InteractionManager();
interactionManager.bindClient(discord);
discord.on("ready", event => {
2023-03-14 21:16:54 +01:00
console.log(`Connected to Discord as ${event.user.tag} (${event.user.id})`);
});
discord.on("messageCreate", message => {
2023-03-14 21:16:54 +01:00
if (message.author.bot) return;
if (!message.mentions.has(message.client.user)) return;
return queueRequest(message);
});
if (require.main === module) void discord.login(config.tokens.Discord);