You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

41 lines
1.7 KiB

import {MastodonHandler} from "./mastodonHandler.js";
import {MemeHandler} from "./memeHandler.js";
import {getStat} from "./JSONdataStore.js";
export class mastodonMemeBot {
constructor(config) {
this.allowedMedia = config.allowedMedia;
this.memeHandler = new MemeHandler(config.memeAPI, config.subreddits, config.allowedMedia);
this.client = new MastodonHandler({
api_url: `${config.baseUrl}/api/v1/`,
access_token: config.accessToken,
});
}
postRandomMeme(callback = () => {}) {
this.memeHandler.getRandomMeme(sub => {
let status = `"${sub.title}"\n${sub.text}\nby ${sub.author}`;
if (!this.allowedMedia.find(type => type === sub.url.split(/[.]+/).pop())) {
console.log("no valid media, fetching new sub");
this.postRandomMeme(callback);
return;
}
let filepath = `./media/${sub.url.split(/[/]+/).pop()}`;
if (getStat(filepath)) {
console.log("post already exists, fetching new sub");
this.postRandomMeme(callback);
return;
}
this.memeHandler.downloadMedia(sub.url, filepath, () => {
this.client.postMedia(status, filepath, 5, () => this.postRandomMeme(), callback);
})
})
}
setFullInterval(minutes) {
let currentTime = new Date();
let firstTime = (minutes - currentTime.getMinutes() % minutes)*60 - currentTime.getSeconds();
setTimeout( () => {
this.postRandomMeme();
setInterval(() => this.postRandomMeme(), minutes * 60*1000);
}, firstTime * 1000);
}
}