mirror of
https://github.com/misenhower/splatoon3.ink.git
synced 2026-04-24 14:56:52 -05:00
72 lines
1.9 KiB
JavaScript
72 lines
1.9 KiB
JavaScript
import prefixedConsole from "../common/prefixedConsole.mjs";
|
|
import ScreenshotHelper from "../screenshots/ScreenshotHelper.mjs";
|
|
import StatusGenerator from "./generators/StatusGenerator.mjs";
|
|
|
|
export default class StatusGeneratorManager
|
|
{
|
|
/** @type {StatusGenerator[]} */
|
|
generators;
|
|
|
|
/** @type {Client[]} */
|
|
clients;
|
|
|
|
/** @type {ScreenshotHelper} */
|
|
screenshotHelper;
|
|
|
|
console(generator = null, client = null) {
|
|
let prefixes = ['Social', generator?.name, client?.name].filter(s => s);
|
|
return prefixedConsole(...prefixes);
|
|
}
|
|
|
|
constructor(generators = [], clients = []) {
|
|
this.generators = generators;
|
|
this.clients = clients;
|
|
this.screenshotHelper = new ScreenshotHelper;
|
|
}
|
|
|
|
async sendStatuses(force = false) {
|
|
for (let generator of this.generators) {
|
|
try {
|
|
await this.#generateAndSend(generator, force);
|
|
} catch (e) {
|
|
this.console(generator).error(`Error generating status: ${e}`);
|
|
}
|
|
}
|
|
|
|
await this.screenshotHelper.close();
|
|
}
|
|
|
|
async #generateAndSend(generator, force) {
|
|
let clientsToPost = [];
|
|
|
|
for (let client of this.clients) {
|
|
if (!(await client.canSend())) {
|
|
this.console(generator, client).warn('Client cannot send (missing credentials)');
|
|
continue;
|
|
}
|
|
|
|
if (force || await generator.shouldPost(client)) {
|
|
clientsToPost.push(client);
|
|
}
|
|
}
|
|
|
|
if (clientsToPost.length === 0) {
|
|
this.console(generator).info('No status to post, skipping');
|
|
|
|
return;
|
|
}
|
|
|
|
let status = await generator.getStatus(this.screenshotHelper);
|
|
|
|
for (let client of clientsToPost) {
|
|
this.console(generator, client).info('Posting...');
|
|
try {
|
|
await client.send(status, generator);
|
|
await generator.updatelastPostCache(client);
|
|
} catch (e) {
|
|
this.console(generator, client).error(`Error posting: ${e}`);
|
|
}
|
|
}
|
|
}
|
|
}
|