summaryrefslogtreecommitdiff
path: root/dist/models/commands/Subreddit.js
blob: 055b7185676b38d69304e93c61bf72c9dbec21fd (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const Command_js_1 = __importDefault(require("../Command.js"));
const node_superfetch_1 = __importDefault(require("node-superfetch"));
const emoji_random_1 = __importDefault(require("emoji-random"));
module.exports = class SubredditCommand extends Command_js_1.default {
    constructor(client, info) {
        super(client, info);
        this.subreddit = info.subreddit;
        this.postType = info.postType ? Array.isArray(info.postType) ? info.postType : [info.postType] : null;
        this.getIcon = info.getIcon || false;
        this.credit.push({
            name: 'Reddit',
            url: 'https://www.reddit.com/',
            reason: 'API',
            reasonURL: 'https://www.reddit.com/dev/api/'
        });
    }
    run(msg, { subreddit }, fromPattern) {
        return __awaiter(this, void 0, void 0, function* () {
            if (fromPattern)
                subreddit = msg.patternMatches[1];
            if (!subreddit)
                subreddit = typeof this.subreddit === 'function' ? this.subreddit() : this.subreddit;
            try {
                const post = yield this.random(subreddit, msg.channel.nsfw);
                if (!post)
                    return msg.reply('Could not find any results. ' + emoji_random_1.default.random());
                return msg.say(this.generateText(post.post, post.origin, post.icon));
            }
            catch (err) {
                if (err.status === 403)
                    return msg.reply('This subreddit is private. ' + emoji_random_1.default.random());
                if (err.status === 404)
                    return msg.reply('Could not find any results. ' + emoji_random_1.default.random());
                return msg.reply(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
            }
        });
    }
    generateText() {
        throw new Error('The generateText method is required.');
    }
    random(subreddit, nsfw) {
        return __awaiter(this, void 0, void 0, function* () {
            let icon = null;
            const { body } = yield node_superfetch_1.default
                .get(`https://www.reddit.com/r/${subreddit}/hot.json`)
                .query({ limit: 100 });
            if (!body.data.children.length)
                return null;
            const posts = body.data.children.filter(post => {
                if (!post.data)
                    return false;
                if (!nsfw && post.data.over_18)
                    return false;
                return (this.postType ? this.postType.includes(post.data.post_hint) : true) && post.data.url && post.data.title;
            });
            if (!posts.length)
                return null;
            if (this.getIcon)
                icon = yield this.fetchIcon(subreddit);
            return {
                origin: subreddit,
                post: posts[Math.floor(Math.random() * posts.length)].data,
                icon
            };
        });
    }
    fetchIcon(subreddit) {
        return __awaiter(this, void 0, void 0, function* () {
            const { body } = yield node_superfetch_1.default.get(`https://www.reddit.com/r/${subreddit}/about.json`);
            if (!body.data.icon_img && !body.data.community_icon)
                return 'https://i.imgur.com/DSBOK0P.png';
            return body.data.icon_img || body.data.community_icon;
        });
    }
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3VicmVkZGl0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21vZGVscy9jb21tYW5kcy9TdWJyZWRkaXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFDQSwrREFBbUM7QUFDbkMsc0VBQXFDO0FBQ3JDLGdFQUFnQztBQUVoQyxNQUFNLENBQUMsT0FBTyxHQUFHLE1BQU0sZ0JBQWlCLFNBQVEsb0JBQU87SUFDbkQsWUFBWSxNQUFNLEVBQUUsSUFBSTtRQUNwQixLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRXBCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNoQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3RHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUM7UUFDckMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDYixJQUFJLEVBQUUsUUFBUTtZQUNkLEdBQUcsRUFBRSx5QkFBeUI7WUFDOUIsTUFBTSxFQUFFLEtBQUs7WUFDYixTQUFTLEVBQUUsaUNBQWlDO1NBQy9DLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFSyxHQUFHLENBQUMsR0FBb0IsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLFdBQVc7O1lBQ3RELElBQUksV0FBVztnQkFBRSxTQUFTLEdBQUcsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuRCxJQUFJLENBQUMsU0FBUztnQkFBRSxTQUFTLEdBQUcsT0FBTyxJ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