-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathmain.js
More file actions
126 lines (99 loc) · 3.67 KB
/
Copy pathmain.js
File metadata and controls
126 lines (99 loc) · 3.67 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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
// <reference path="./types/global.d.ts" />
require("./utils/logger");
require("dotenv").config();
// IMPORTS
const { fetchData } = require("./src/utils/got-wrapper");
const { loadCommands } = require("./src/commands/commandsList");
const { loadReminders } = require("./src/handlers/listener/reminder");
// GLOBAL FB OBJECT SETUP
// Initialize fb object first, before any other modules
// This makes fb available globally (fb.*) and also as global.fb.*
global.fb = global.fb || {};
const fb = global.fb;
// Ensure fb is available globally for all modules
global.fb = fb;
// Add custom got function to fb
fb.got = fetchData;
// FB PROPERTIES INITIALIZATION
// Add initialization status tracking
fb.isReady = false;
fb.startTime = Math.floor(Date.now() / 1000);
fb.readyCallbacks = [];
// Initialize all fb properties upfront so they're available globally from the start
fb.utils = null;
fb.emotes = null;
fb.db = null;
fb.log = null;
fb.api = {};
fb.twitch = null;
fb.discord = null;
fb.clickhouse = null;
fb.notifiedUsers = new Set(); // Cache to track users who have been notified about reminders
fb.commandsList = null;
// FB UTILITY FUNCTIONS
// Function to mark fb as ready
fb.markReady = () => {
fb.isReady = true;
fb.readyCallbacks.forEach((callback) => callback());
fb.readyCallbacks = [];
};
// MAIN INITIALIZATION FUNCTION
async function initializeApp() {
try {
console.info("* Starting application initialization...");
// Initialize all utility instances first
const { utils, emotes, db, log } =
await require("./src/utils/init").initializeUtilities();
fb.utils = utils;
fb.emotes = emotes;
fb.db = db;
fb.log = log;
console.info("* Utilities initialized");
// await fb.emotes.getGlobalEmotes();
// console.info("* Global emotes initialized");
// Initialize Auth Provider
fb.authProvider =
await require("./src/utils/init").initializeAuthProvider();
console.info("* Twurple Auth provider initialized");
// Initialize APIs
fb.api = await require("./src/utils/init").initializeAPIs();
console.info("* APIs initialized");
// Initialize API Client
fb.api.twurple = await require("./src/utils/init").initializeApiClient();
console.info("* Twurple API client initialized");
// Initialize clients
fb.discord = await require("./src/utils/init").initializeDiscord();
console.info("* Discord client initialized");
fb.twitch = await require("./src/utils/init").initializeTwitch();
console.info("* Twitch client initialized");
fb.twitch.eventSub =
await require("./src/utils/init").initializeEventSubListener();
console.info("* EventSub listener initialized");
fb.clickhouse = await require("./src/utils/init").initializeClickHouse();
console.info("* ClickHouse client initialized");
// Load commands
fb.commandsList = loadCommands();
console.info("* Commands loaded");
// Load and process reminders (handle missed and schedule future ones)
await loadReminders();
console.info("* Reminders loaded");
// Mark fb as ready
fb.markReady = true;
console.info("* fb object is now ready");
// Start recurring tasks
const { startAllTasks } = require("./src/tasks/index");
startAllTasks();
// Start api server
const apiServer = require("./src/utils/api-server");
fb.apiServer = new apiServer();
fb.apiServer.start();
fb.totalCommandsUsed = await fb.db.count("commandlog", {}, true);
fb.discord.log("* Application initialization complete!");
} catch (error) {
console.error("Failed to initialize application:", error);
process.exit(1);
}
}
// Start the initialization process
initializeApp();
module.exports = { fb };