Integrate meme-poster into Xiao

This commit is contained in:
Dragon Fire
2019-11-03 00:08:44 -04:00
parent e688d5c838
commit 61ba69e6ae
6 changed files with 43 additions and 2 deletions
+3
View File
@@ -6,6 +6,9 @@ XIAO_PREFIX=
INVITE= INVITE=
XIAO_WEBHOOK_ID= XIAO_WEBHOOK_ID=
XIAO_WEBHOOK_TOKEN= XIAO_WEBHOOK_TOKEN=
POSTER_ID=
POSTER_TOKEN=
POSTER_TIME=
# Emoji IDs # Emoji IDs
GOLD_FISH_EMOJI_ID= GOLD_FISH_EMOJI_ID=
-1
View File
@@ -55,7 +55,6 @@ Xiao is a Discord bot coded in JavaScript with
* [Rando Cardrissian](https://github.com/dragonfire535/rando-cardrissian) is a Cards Against Humanity bot, whose features were originally built into Xiao. * [Rando Cardrissian](https://github.com/dragonfire535/rando-cardrissian) is a Cards Against Humanity bot, whose features were originally built into Xiao.
* [Storyteller](https://github.com/dragonfire535/storyteller) is a Mafia bot made for Discord's 2019 Hack Week, whose features were originally built into Xiao. * [Storyteller](https://github.com/dragonfire535/storyteller) is a Mafia bot made for Discord's 2019 Hack Week, whose features were originally built into Xiao.
* [Meme Poster](https://github.com/dragonfire535/meme-poster) is a meme-posting webhook, inspired by an idea that started as part of Xiao.
## Commands (348) ## Commands (348)
### Utility: ### Utility:
+1
View File
@@ -46,6 +46,7 @@ client.on('ready', () => {
const activity = activities[Math.floor(Math.random() * activities.length)]; const activity = activities[Math.floor(Math.random() * activities.length)];
client.user.setActivity(activity.text, { type: activity.type }); client.user.setActivity(activity.text, { type: activity.type });
}, 60000); }, 60000);
client.setInterval(() => client.memePoster.post(), client.memePoster.time);
}); });
client.on('guildMemberRemove', async member => { client.on('guildMemberRemove', async member => {
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "xiao", "name": "xiao",
"version": "107.7.5", "version": "107.8.0",
"description": "Your personal server companion.", "description": "Your personal server companion.",
"main": "Xiao.js", "main": "Xiao.js",
"scripts": { "scripts": {
+2
View File
@@ -2,6 +2,7 @@ const { CommandoClient } = require('discord.js-commando');
const { WebhookClient } = require('discord.js'); const { WebhookClient } = require('discord.js');
const winston = require('winston'); const winston = require('winston');
const PokemonStore = require('./pokemon/PokemonStore'); const PokemonStore = require('./pokemon/PokemonStore');
const MemePoster = require('./MemePoster');
const { XIAO_WEBHOOK_ID, XIAO_WEBHOOK_TOKEN } = process.env; const { XIAO_WEBHOOK_ID, XIAO_WEBHOOK_TOKEN } = process.env;
module.exports = class XiaoClient extends CommandoClient { module.exports = class XiaoClient extends CommandoClient {
@@ -17,6 +18,7 @@ module.exports = class XiaoClient extends CommandoClient {
}); });
this.webhook = new WebhookClient(XIAO_WEBHOOK_ID, XIAO_WEBHOOK_TOKEN, { disableEveryone: true }); this.webhook = new WebhookClient(XIAO_WEBHOOK_ID, XIAO_WEBHOOK_TOKEN, { disableEveryone: true });
this.pokemon = new PokemonStore(); this.pokemon = new PokemonStore();
this.memePoster = new MemePoster(this);
this.games = new Map(); this.games = new Map();
} }
}; };
+36
View File
@@ -0,0 +1,36 @@
const { POSTER_ID, POSTER_TOKEN, POSTER_TIME } = process.env;
const request = require('node-superfetch');
const subreddits = require('../assets/json/meme');
const types = ['image', 'rich:video'];
module.exports = class MemePoster {
constructor(client) {
Object.defineProperty(this, 'client', { value: client });
this.id = POSTER_ID;
this.token = POSTER_TOKEN;
this.time = Number.parseFloat(POSTER_TIME) || 3.6e+6;
}
async post() {
try {
const subreddit = subreddits[Math.floor(Math.random() * subreddits.length)];
const { body } = await request
.get(`https://www.reddit.com/r/${subreddit}/hot.json`)
.query({ limit: 100 });
const posts = body.data.children.filter(post => {
if (!post.data) return false;
return types.includes(post.data.post_hint) && post.data.url && post.data.title && !post.data.over_18;
});
if (!posts.length) return;
const post = posts[Math.floor(Math.random() * posts.length)].data;
await request
.post(`https://discordapp.com/api/webhooks/${this.id}/${this.token}`)
.send({
content: `**r/${subreddit}** [${post.title}](<https://www.reddit.com${post.permalink}>)\n${post.url}`
});
} catch (err) {
this.client.logger.error(err);
}
}
};