117 lines
4.7 KiB
JavaScript
117 lines
4.7 KiB
JavaScript
const Discord = require("discord.js");
|
|
const fs = require('fs');
|
|
const request = require('request');
|
|
const rp = require('request-promise-native');
|
|
|
|
class Lewd {
|
|
|
|
constructor() {
|
|
this.matches = [ "tits", "ass", "booty", "thicc", "2d", "furry", "sexy", "reddimg", "dick", "cock", "penis", "milf", "fuck", "sex", "degenerate", "milkers", "goth", "btgg" ];
|
|
}
|
|
|
|
async loadSubreddit(name, desired_entries=400) {
|
|
let entries = 0;
|
|
let entryData = [];
|
|
let subredditData = await rp(`https://www.reddit.com/r/${name}/new/.json?limit=100`);
|
|
|
|
// access if cached
|
|
try {
|
|
let stats = fs.statSync(`cache/${name}.txt`);
|
|
let time_diff = (new Date().getTime() - new Date(stats.mtime).getTime()) / 1000;
|
|
if (time_diff > 21600) { throw new Error('Need to update cache!'); }
|
|
let entryText = fs.readFileSync(`cache/${name}.txt`);
|
|
entryData = JSON.parse(entryText);
|
|
console.log(`Loading cached data for ${name}`);
|
|
return entryData;
|
|
} catch (e) {
|
|
console.log(`${name} not cached...`);
|
|
}
|
|
|
|
try {
|
|
let sJson = JSON.parse(subredditData);
|
|
entryData = entryData.concat(sJson.data.children);
|
|
entries += sJson.data.children.length;
|
|
while (entries <= desired_entries) {
|
|
let after_tag = sJson.data.after;
|
|
subredditData = await rp(`https://www.reddit.com/r/${name}/new/.json?limit=100&after=${after_tag}`);
|
|
sJson = JSON.parse(subredditData);
|
|
entryData = entryData.concat(sJson.data.children);
|
|
entries += sJson.data.children.length;
|
|
}
|
|
console.log(`Writing ${name} data to cache...`);
|
|
fs.writeFileSync(`cache/${name}.txt`, JSON.stringify(entryData));
|
|
return entryData;
|
|
} catch (e) {
|
|
console.log("Invalid JSON!");
|
|
return "";
|
|
}
|
|
}
|
|
|
|
async getRandomEntry(subreddit) {
|
|
let srData = await this.loadSubreddit(subreddit);
|
|
let count = srData.length;
|
|
console.log(`Got ${count} items`);
|
|
|
|
for(let i = 0; i < 10; i++) {
|
|
let selection = Math.floor(Math.random() * count);
|
|
let url = srData[selection].data.url;
|
|
if(url.endsWith('.jpg') || url.endsWith('.gif') || url.endsWith('.png') || url.endsWith('.jpeg') || url.includes('gfycat.com') ) {
|
|
return url.toString();
|
|
}
|
|
}
|
|
|
|
return -1;
|
|
}
|
|
|
|
async getRandomRedditImg(sub) {
|
|
let rEmbed = new Discord.RichEmbed();
|
|
let img = await this.getRandomEntry(sub);
|
|
console.log(img);
|
|
if(img.includes('gfycat.com')) {
|
|
return img;
|
|
} else {
|
|
rEmbed.setImage(img);
|
|
}
|
|
return rEmbed;
|
|
|
|
}
|
|
|
|
async action(msg) {
|
|
let chan = msg.channel;
|
|
if(msg.content.startsWith('!tits')) {
|
|
chan.send(await this.getRandomRedditImg('homegrowntits+BigBoobsGW+Boobies+hugehangers+biggerthanyouthought+udders+tittydrop'));
|
|
} else if (msg.content.startsWith('!booty') || msg.content.startsWith('!ass')) {
|
|
chan.send(await this.getRandomRedditImg('bigasses+pawg+slightcellulite'));
|
|
} else if (msg.content.startsWith('!thicc')) {
|
|
chan.send(await this.getRandomRedditImg('thickthighs+voluptuous+breedingmaterial+thickchixx+plumper+gonewildplus+thickchixxx+bbw_chubby'));
|
|
} else if (msg.content.startsWith('!2d')) {
|
|
chan.send(await this.getRandomRedditImg('hentai+rule34'));
|
|
} else if (msg.content.startsWith('!furry')) {
|
|
chan.send(await this.getRandomRedditImg('furry+yiff'));
|
|
} else if (msg.content.startsWith('!sexy')) {
|
|
chan.send(await this.getRandomRedditImg('lingerie+gonemild'));
|
|
} else if (msg.content.startsWith('!reddimg')) {
|
|
let contentArr = msg.content.split(" ");
|
|
if(contentArr.length < 2) return;
|
|
chan.send(await this.getRandomRedditImg(contentArr[1]));
|
|
} else if (msg.content.startsWith('!dick') || msg.content.startsWith('!cock') || msg.content.startsWith('!penis')) {
|
|
chan.send(await this.getRandomRedditImg('penis+massivecock+ratemycock+sizecomparison+averagepenis+naturalpenis+smallpenis'));
|
|
} else if (msg.content.startsWith('!milf')) {
|
|
chan.send(await this.getRandomRedditImg('milf+wifesharing+gonewild30plus+milfie'));
|
|
} else if (msg.content.startsWith('!fuck') || msg.content.startsWith('!sex')) {
|
|
chan.send(await this.getRandomRedditImg('gonewildcouples+nsfw_gif+besthqporngifs+60fpsporn+girlsfinishingthejob+lipsthatgrip+amateurgirlsbigcocks+shelikesitrough'));
|
|
} else if (msg.content.startsWith('!degenerate')) {
|
|
chan.send(await this.getRandomRedditImg('yiff+cuckold+hotwife+bondage+bdsm+bdsmgw+forcedorgasms+rule34+furry+dominated+teenbdsm+bondageblowjobs+fetish+cumsluts+vore'));
|
|
} else if (msg.content.startsWith('!milkers')) {
|
|
chan.send(await this.getRandomRedditImg('udders+hugehangers+bigboobsgw+hugeboobs+hugetits+hugeboobgifs'));
|
|
} else if (msg.content.startsWith('!goth')) {
|
|
chan.send(await this.getRandomRedditImg('gothsluts+bigtiddygothgf+snowwhites+altgonewild'));
|
|
} else if (msg.content.startsWith('!btgg')) {
|
|
chan.send(await this.getRandomRedditImg('bigtiddygothgf'));
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
module.exports = Lewd;
|