fp/services/bot/src/index.ts
CJ_Clippy 5bb2296a00
Some checks failed
ci / build (push) Has been cancelled
add file_size and recording_state to db
2024-08-02 14:12:56 -08:00

95 lines
2.8 KiB
TypeScript

import 'dotenv/config'
import { type ChatInputCommandInteraction, Client, GatewayIntentBits, Partials, Collection } from 'discord.js'
import loadCommands from './loadCommands.js'
import deployCommands from './deployCommands.js'
import discordMessageUpdate from './tasks/discordMessageUpdate.js'
import { makeWorkerUtils, type WorkerUtils, type RunnerOptions, run } from 'graphile-worker'
import loadEvents from './loadEvents.js'
export interface ExecuteArguments {
interaction: ChatInputCommandInteraction;
workerUtils: WorkerUtils
}
if (!process.env.AUTOMATION_USER_JWT) throw new Error(`AUTOMATION_USER_JWT was missing from env`);
if (!process.env.DISCORD_TOKEN) throw new Error("DISCORD_TOKEN was missing from env");
if (!process.env.DISCORD_CHANNEL_ID) throw new Error("DISCORD_CHANNEL_ID was missing from env");
if (!process.env.WORKER_CONNECTION_STRING) throw new Error("WORKER_CONNECTION_STRING was missing from env");
const preset: GraphileConfig.Preset = {
worker: {
connectionString: process.env.WORKER_CONNECTION_STRING,
concurrentJobs: 1,
fileExtensions: [".js", ".ts"]
},
};
async function setupGraphileWorker() {
const runnerOptions: RunnerOptions = {
preset,
taskList: {
'discordMessageUpdate': discordMessageUpdate
}
}
const runner = await run(runnerOptions)
if (!runner) throw new Error('failed to initialize graphile worker');
await runner.promise
}
async function setupWorkerUtils() {
const workerUtils = await makeWorkerUtils({
preset
});
await workerUtils.migrate()
return workerUtils
}
async function setupDiscordBot(commands: any[], workerUtils: WorkerUtils) {
console.log(`setup()`)
if (!commands) throw new Error('commands passed to setup() was missing');
console.log(`Create a new client instance`)
let client: any = new Client({
intents: [
GatewayIntentBits.Guilds,
GatewayIntentBits.GuildMessages,
GatewayIntentBits.GuildMessageReactions,
],
partials: [
Partials.Message,
Partials.Channel,
Partials.Reaction,
]
});
client.commands = new Collection();
commands.forEach((c) => client.commands.set(c.data.name, c))
// Log in to Discord with your client's token
client.login(process.env.DISCORD_TOKEN);
await loadEvents(client, workerUtils)
}
async function main() {
console.log(`main()`)
const commands = await loadCommands()
if (!commands) throw new Error('there were no commands available to be loaded.');
await deployCommands(commands.map((c) => c.data.toJSON()))
console.log(`${commands.length} commands deployed: ${commands.map((c) => c.data.name).join(', ')}`)
const workerUtils = await setupWorkerUtils()
setupDiscordBot(commands, workerUtils)
setupGraphileWorker()
}
main().catch((e) => {
console.error("error during main() function")
console.error(e)
process.exit(3)
})