-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathask.mjs
More file actions
executable file
·56 lines (50 loc) · 1.58 KB
/
ask.mjs
File metadata and controls
executable file
·56 lines (50 loc) · 1.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#!/usr/bin/env node
import 'dotenv/config';
import { createDb } from '@eliware/mysql';
import { createDiscord } from '@eliware/discord';
import { log, fs, path, registerHandlers, registerSignals } from '@eliware/common';
import { createOpenAI } from '@eliware/openai';
registerHandlers({ log });
registerSignals({ log });
const packageJson = JSON.parse(fs.readFileSync(path(import.meta, 'package.json')), 'utf8');
const version = packageJson.version;
const presence = { activities: [{ name: `ask v${version}`, type: 4 }], status: 'online' };
// Initialize OpenAI client and include it in the shared context for handlers
let openai;
try {
openai = await createOpenAI();
log.info('OpenAI client initialized');
} catch (err) {
log.error('Failed to initialize OpenAI client', { error: err?.message || err });
throw err;
}
// Initialize database connection pool and include in context
let db;
try {
db = await createDb({ log });
log.info('Database pool initialized');
} catch (err) {
log.error('Failed to initialize database pool', { error: err?.message || err });
throw err;
}
registerSignals({ shutdownHook: () => db.end() });
const client = await createDiscord({
log,
rootDir: path(import.meta),
context: {
db,
presence,
version,
openai,
},
intents: {
Guilds: true,
GuildMessages: true,
MessageContent: true,
DirectMessages: true,
GuildMembers: false,
GuildPresences: false,
GuildVoiceStates: false,
}
});
registerSignals({ shutdownHook: () => client.destroy() });