mirror of
https://github.com/ReVanced/revanced-bots.git
synced 2026-01-11 13:56:15 +00:00
refactor(server): don't use global variables
This commit is contained in:
@@ -1,25 +1,22 @@
|
||||
import { readFileSync, writeFileSync } from 'node:fs';
|
||||
import { join } from 'node:path';
|
||||
|
||||
export default function addTrainData(eventData) {
|
||||
export default function addTrainData(eventData, __dirname, config) {
|
||||
const file = readFileSync(
|
||||
join(global.__dirname, global.config.fasttext.trainFile),
|
||||
join(__dirname, config.fasttext.trainFile),
|
||||
'utf-8'
|
||||
);
|
||||
const { label, text } = eventData;
|
||||
|
||||
if (file.includes(text)) return;
|
||||
|
||||
|
||||
const data = file.split('\n');
|
||||
|
||||
const labelIndex = data.findIndex((data) => data.startsWith(label));
|
||||
|
||||
data.splice(labelIndex === -1 ? 0 : labelIndex, 0, `${label} ${text}`);
|
||||
|
||||
writeFileSync(
|
||||
join(global.__dirname, global.config.fasttext.trainFile),
|
||||
data.join('\n')
|
||||
);
|
||||
writeFileSync(join(__dirname, config.fasttext.trainFile), data.join('\n'));
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
import { serialize } from 'bson';
|
||||
|
||||
export default async function runAI(client, data) {
|
||||
const predictions = await global.ft.predict(data.text);
|
||||
const jsonData = {
|
||||
op: 2,
|
||||
id: data.id,
|
||||
predictions
|
||||
};
|
||||
export default async function runAI(client, data, ft) {
|
||||
const predictions = await ft.predict(data.text);
|
||||
|
||||
const bsonData = serialize(jsonData);
|
||||
client.write(bsonData);
|
||||
client.write(
|
||||
serialize({
|
||||
op: 2,
|
||||
id: data.id,
|
||||
predictions
|
||||
})
|
||||
);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1,23 +1,22 @@
|
||||
import { recognize } from 'node-tesseract-ocr';
|
||||
import { serialize } from 'bson';
|
||||
|
||||
export default async function runOCR(client, eventData) {
|
||||
const config = {
|
||||
lang: 'eng',
|
||||
oem: 3,
|
||||
psm: 3
|
||||
};
|
||||
const config = {
|
||||
lang: 'eng',
|
||||
oem: 3,
|
||||
psm: 3
|
||||
};
|
||||
|
||||
export default async function runOCR(client, eventData) {
|
||||
const ocrText = await recognize(eventData.url, config);
|
||||
|
||||
const jsonData = {
|
||||
op: 6,
|
||||
id: eventData.id,
|
||||
ocrText
|
||||
};
|
||||
|
||||
const bsonData = serialize(jsonData);
|
||||
client.write(bsonData);
|
||||
client.write(
|
||||
serialize({
|
||||
op: 6,
|
||||
id: eventData.id,
|
||||
ocrText
|
||||
})
|
||||
);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import FastText from 'fasttext.js';
|
||||
import { join } from 'node:path';
|
||||
|
||||
export default async function trainAI() {
|
||||
export default async function trainAI(ftext, __dirname, config) {
|
||||
const ft = new FastText({
|
||||
train: {
|
||||
// number of concurrent threads
|
||||
@@ -39,19 +39,16 @@ export default async function trainAI() {
|
||||
// load pre trained word vectors from unsupervised model
|
||||
pretrainedVectors: ''
|
||||
},
|
||||
serializeTo: join(
|
||||
global.__dirname,
|
||||
global.config.fasttext.loadModel
|
||||
).replace('.bin', ''),
|
||||
trainFile: join(global.__dirname, global.config.fasttext.trainFile),
|
||||
bin: join(global.__dirname, global.config.fasttext.bin)
|
||||
serializeTo: join(__dirname, config.fasttext.loadModel).replace('.bin', ''),
|
||||
trainFile: join(__dirname, config.fasttext.trainFile),
|
||||
bin: join(__dirname, config.fasttext.bin)
|
||||
});
|
||||
|
||||
global.ft.unload();
|
||||
ftext.unload();
|
||||
|
||||
await ft.train();
|
||||
|
||||
global.ft.load();
|
||||
ftext.load();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -4,23 +4,19 @@ import { fileURLToPath } from 'node:url';
|
||||
import { dirname } from 'node:path';
|
||||
|
||||
const __filename = fileURLToPath(import.meta.url);
|
||||
global.__dirname = dirname(__filename);
|
||||
const __dirname = dirname(__filename);
|
||||
|
||||
const config = JSON.parse(readFileSync('./config.json', 'utf-8'));
|
||||
|
||||
const configJSON = readFileSync('./config.json', 'utf-8');
|
||||
const config = JSON.parse(configJSON);
|
||||
global.config = config;
|
||||
import { createServer } from 'node:net';
|
||||
import { deserialize } from 'bson';
|
||||
import FastText from 'fasttext.js';
|
||||
import { runAI, trainAI, runOCR, addTrainData } from './events/index.js';
|
||||
|
||||
const ft = new FastText(global.config.fasttext);
|
||||
const ft = new FastText(config.fasttext);
|
||||
|
||||
ft.load();
|
||||
|
||||
// I'm sorry. This is probably the only solution.
|
||||
global.ft = ft;
|
||||
|
||||
const server = createServer(async (client) => {
|
||||
client.on('data', async (data) => {
|
||||
const eventData = deserialize(data, {
|
||||
@@ -29,17 +25,17 @@ const server = createServer(async (client) => {
|
||||
|
||||
switch (eventData.op) {
|
||||
case 1: {
|
||||
runAI(client, eventData);
|
||||
runAI(client, eventData, ft);
|
||||
break;
|
||||
}
|
||||
|
||||
case 3: {
|
||||
addTrainData(eventData);
|
||||
addTrainData(eventData, __dirname, config);
|
||||
break;
|
||||
}
|
||||
|
||||
case 4: {
|
||||
trainAI();
|
||||
trainAI(ft, __dirname, config);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -51,4 +47,4 @@ const server = createServer(async (client) => {
|
||||
});
|
||||
});
|
||||
|
||||
server.listen(global.config.server.port || 3000);
|
||||
server.listen(config.server.port || 3000);
|
||||
|
||||
Reference in New Issue
Block a user