From 2cc7efec7243813c91466c69ac24b8086afdbece Mon Sep 17 00:00:00 2001 From: Matt Isenhower Date: Mon, 12 Sep 2022 18:29:01 -0700 Subject: [PATCH] Add map schedules tweet --- app/twitter/TwitterManager.mjs | 4 +- app/twitter/generators/SchedulesTweet.mjs | 59 +++++++++++++++++++++++ app/twitter/generators/TweetGenerator.mjs | 18 +++++++ app/twitter/index.mjs | 4 +- 4 files changed, 80 insertions(+), 5 deletions(-) create mode 100644 app/twitter/generators/SchedulesTweet.mjs diff --git a/app/twitter/TwitterManager.mjs b/app/twitter/TwitterManager.mjs index c61f909..e84bbf4 100644 --- a/app/twitter/TwitterManager.mjs +++ b/app/twitter/TwitterManager.mjs @@ -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(); diff --git a/app/twitter/generators/SchedulesTweet.mjs b/app/twitter/generators/SchedulesTweet.mjs new file mode 100644 index 0000000..6d36163 --- /dev/null +++ b/app/twitter/generators/SchedulesTweet.mjs @@ -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; + } +} diff --git a/app/twitter/generators/TweetGenerator.mjs b/app/twitter/generators/TweetGenerator.mjs index a02b008..56ea161 100644 --- a/app/twitter/generators/TweetGenerator.mjs +++ b/app/twitter/generators/TweetGenerator.mjs @@ -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; diff --git a/app/twitter/index.mjs b/app/twitter/index.mjs index 74d20bf..1029a06 100644 --- a/app/twitter/index.mjs +++ b/app/twitter/index.mjs @@ -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, ]); }