Added lobby auto creation
Docker image / build-and-push (push) Successful in 57s

This commit is contained in:
Aleksandr Bogomiakov
2026-08-06 20:33:27 +01:00
parent 33e01a4a8f
commit c239669932
22 changed files with 3533 additions and 55 deletions
+44
View File
@@ -0,0 +1,44 @@
'use strict';
const fs = require('fs');
const os = require('os');
const path = require('path');
function parseWorkshopPublishData(text) {
const sourceFolder = String(text).match(/"source_folder"\s+"([^"]+)"/)?.[1]?.trim() || '';
const publishTime = String(text).match(/"publish_time"\s+"(\d+)"/)?.[1] || '';
if (!sourceFolder) return null;
return { sourceFolder, publishTime };
}
function defaultWorkshopRoots() {
const home = os.homedir();
return [
process.env.DOTA_WORKSHOP_DIR,
path.join(home, '.local', 'share', 'Steam', 'steamapps', 'workshop', 'content', '570'),
path.join(home, '.steam', 'steam', 'steamapps', 'workshop', 'content', '570'),
].filter(Boolean);
}
function resolveLocalWorkshopMetadata(customGameId, roots = defaultWorkshopRoots()) {
const id = String(customGameId || '').trim();
if (!/^\d+$/.test(id)) return null;
for (const root of [...new Set(roots)]) {
const file = path.join(root, id, 'publish_data.txt');
try {
const metadata = parseWorkshopPublishData(fs.readFileSync(file, 'utf8'));
if (metadata) return { ...metadata, file };
} catch (err) {
if (err.code !== 'ENOENT' && err.code !== 'ENOTDIR') {
console.warn(`warn: could not read Workshop metadata ${file}: ${err.message}`);
}
}
}
return null;
}
module.exports = {
parseWorkshopPublishData,
resolveLocalWorkshopMetadata,
};