Add map schedules tweet

This commit is contained in:
Matt Isenhower
2022-09-12 18:29:01 -07:00
parent b7e46f1fc4
commit 2cc7efec72
4 changed files with 80 additions and 5 deletions

View File

@@ -25,9 +25,7 @@ export default class TwitterManager
continue;
}
let tweet = await generator.getTweet(this.screenshotHelper);
await this.client.send(tweet);
await generator.sendTweet(this.screenshotHelper, this.client);
}
await this.screenshotHelper.close();

View File

@@ -0,0 +1,59 @@
import TweetGenerator from "./TweetGenerator.mjs";
import Media from "../Media.mjs";
import { useAnarchyOpenSchedulesStore, useAnarchySeriesSchedulesStore, useRegularSchedulesStore } from "../../../src/stores/schedules.mjs";
import ValueCache from "../../common/ValueCache.mjs";
export default class SchedulesTweet extends TweetGenerator
{
name = 'Schedules';
constructor() {
super();
this.tweetCache = new ValueCache('twitter.schedules');
}
async getStages() {
await this.preparePinia();
return {
regular: useRegularSchedulesStore().activeSchedule,
anarchySeries: useAnarchySeriesSchedulesStore().activeSchedule,
anarchyOpen: useAnarchyOpenSchedulesStore().activeSchedule,
}
}
async getScheduleTime() {
let schedule = (await this.getStages()).regular;
return Date.parse(schedule.startTime);
}
async shouldTweet() {
let currentTime = await this.getScheduleTime();
let cachedTime = await this.tweetCache.getData();
return !cachedTime || (currentTime > cachedTime);
}
async sendTweet(screenshotHelper, twitterClient) {
await super.sendTweet(screenshotHelper, twitterClient);
let currentTime = await this.getScheduleTime();
await this.tweetCache.setData(currentTime);
}
async _getStatus() {
let stages = await this.getStages();
return `Splatoon 3 map rotation: Anarchy (Series) game mode: ${stages.anarchySeries.settings.vsRule.name}, Anarchy (Open) game mode: ${stages.anarchyOpen.settings.vsRule.name} #maprotation`;
}
/** @param {ScreenshotHelper} screenshotHelper */
async _getMedia(screenshotHelper) {
let media = new Media;
media.file = await screenshotHelper.capture('schedules');
return media;
}
}

View File

@@ -3,6 +3,8 @@ import { createPinia, setActivePinia } from 'pinia';
import { useGearStore, useSchedulesStore } from '../../../src/stores/data.mjs';
import prefixedConsole from '../../common/prefixedConsole.mjs';
import Tweet from '../Tweet.mjs';
import TwitterClient from '../TwitterClient.mjs';
import ScreenshotHelper from '../../screenshots/ScreenshotHelper.mjs';
export default class TweetGenerator
{
@@ -16,16 +18,32 @@ export default class TweetGenerator
}
async preparePinia() {
if (this._piniaInitialized) {
return;
}
setActivePinia(createPinia());
useSchedulesStore().setData(JSON.parse(await fs.readFile('dist/data/schedules.json')));
useGearStore().setData(JSON.parse(await fs.readFile('dist/data/gear.json')));
this._piniaInitialized = true;
}
async shouldTweet() {
return true;
}
/**
* @param {ScreenshotHelper} screenshotHelper
* @param {TwitterClient} twitterClient
*/
async sendTweet(screenshotHelper, twitterClient) {
let tweet = await this.getTweet(screenshotHelper);
await twitterClient.send(tweet);
}
/** @param {ScreenshotHelper} screenshotHelper */
async getTweet(screenshotHelper) {
const tweet = new Tweet;

View File

@@ -1,9 +1,9 @@
import CountdownTweet from "./generators/CountdownTweet.mjs";
import SchedulesTweet from "./generators/SchedulesTweet.mjs";
import TwitterManager from "./TwitterManager.mjs"
export function defaultTwitterManager() {
return new TwitterManager([
new CountdownTweet,
new SchedulesTweet,
]);
}