41 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 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) === true) {
 | |
|                 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);
 | |
|     }
 | |
| } |