forked from Miczu/Noita-Twitch-Integration
-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
130 lines (120 loc) · 5.71 KB
/
index.js
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
127
128
129
130
const fs = require("fs")
const path = require("path")
//check if workaround exists
const workaroundPath = path.join(__dirname, "../twitch-helper")
if (!fs.existsSync(workaroundPath)) {
fs.mkdirSync(workaroundPath)
const XML = `
<Mod
name="Twitch-helper"
description="Temporal workaround for twitch integration, preferably always leave enabled."
request_no_api_restrictions="1"
>
</Mod>`
fs.writeFileSync(path.join(workaroundPath, "mod.xml"), XML)
fs.writeFileSync(path.join(workaroundPath, "init.lua"), "function OnModPreInit() end")
}
// Update
async function updateSelf() {
delete require.cache[require.resolve('./update')];
const Updater = require('./update');
let error = false;
const updater = new Updater(branch);
updater.on('run_start', () => { console.log(`[update] Self-update started (Branch: ${updater.branch})`); });
updater.on('check_start', (serverIndex) => { if (updatelog) console.log(`[update] Update check started (Server: ${serverIndex})`); });
updater.on('check_success', (serverIndex, operations) => { if (updatelog) console.log(`[update] Update check finished (Server: ${serverIndex}), ${operations.length} operations required`); });
updater.on('check_fail', (serverIndex, error) => { console.log(`[update] Update check failed (Server: ${serverIndex}): ${error}`); });
updater.on('check_fail_all', () => { error = true; console.log(`[update] Update check failed`); });
updater.on('prepare_start', () => { if (updatelog) console.log(`[update] Update download and preparation started`); });
updater.on('download_start', (serverIndex, relpath) => { if (updatelog) console.log(`[update] - Download: ${relpath} (Server: ${serverIndex})`); });
updater.on('download_error', (relpath, expected_hash, downloaded_hash) => {
error = true;
console.log(`[update] - Error downloading ${relpath}: file hash mismatch (expected: ${expected_hash}, found: ${downloaded_hash})!`);
});
//updater.on('download_finish', (serverIndex, relpath) => { if (updatelog) console.log(`[update] - Download done: ${relpath} (Server: ${serverIndex})`); });
updater.on('prepare_finish', () => { if (updatelog) console.log(`[update] Update download and preparation finished`); });
updater.on('execute_start', () => { if (updatelog) console.log(`[update] Update installation started`); });
updater.on('install_start', (relpath) => { if (updatelog) console.log(`[update] - Install: ${relpath}`); });
//updater.on('install_finish', (relpath) => { if (updatelog) console.log(`[update] - Install done: ${relpath}`); });
updater.on('install_error', (relpath, e) => {
error = true;
console.log(`[update] - Error installing ${relpath}: ${e}`);
if (relpath.startsWith('node_modules/tera-client-interface/scanner/')) {
console.log('[update] - Your anti-virus software most likely falsely detected it to be a virus.');
console.log('[update] - Please whitelist TERA Toolbox in your anti-virus!');
console.log(`[update] - For further information, check the #toolbox-faq channel in ${DiscordURL}!`);
} else if (relpath === 'node_modules/tera-client-interface/tera-client-interface.dll') {
console.log('[update] - This is most likely caused by an instance of the game that is still running.');
console.log('[update] - Close all game clients or restart your computer, then try again!');
}
});
updater.on('execute_finish', () => { if (updatelog) console.log(`[update] Update installation finished`); });
updater.on('run_finish', (success) => { console.log(`[update] Self-update ${success ? 'finished' : 'failed'}`); });
const filesChanged = await updater.run();
if (error)
return false;
if (filesChanged)
return await updateSelf();
return true;
}
function run() {
const Settings = require("./lib/settings")
const Twitch = require("./lib/twitch")
const Noita = require("./lib/noita")
const WebUI = require("./lib/webui")
class Main {
constructor() {
this.initSubmodules()
}
initSubmodules() {
this.settings = new Settings()
this.twitch = new Twitch(this)
this.noita = new Noita(this)
this.webui = new WebUI(this)
}
}
const bot = new Main()
}
function main() {
if (noselfupdate) {
console.warn("Auto update disabled.");
run();
} else {
updateSelf().then(success => {
if (success) {
run();
} else {
console.error('[update] ERROR: Unable to perform self-update!');
}
}).catch(e => {
console.error('[update] ERROR: Unable to perform self-update!');
console.error('[update] ERROR: The full error message is:');
console.error('-----------------------------------------------');
console.error(e);
console.error('-----------------------------------------------');
});
}
}
// -------------------------------------------------------------------
// Prevent CLI from immediately closing in case of an error
process.stdin.resume();
process.on('uncaughtException', (e) => {
console.log(e);
});
// Safely load configuration
let branch = 'master';
let updatelog = true;
let noselfupdate = false;
try {
const config = require('./config.json');
if (config) {
if (config.branch)
branch = config.branch.toLowerCase();
updatelog = !!config.updatelog;
noselfupdate = !!config.noselfupdate;
}
} catch (_) {
console.warn('[update] WARNING: An error occurred while trying to read the config file! Falling back to default values.');
}
//Boot
main();