Discord 消息提醒机器人

之前一直在用Discord的GinaBot消息提醒机器人,但是可惜分家后,GinaBot跑去HIVE链上去了

后来STEEM这边的开发者也开发了2款Discord消息提醒机器人,他们分别是MimeeBot 和RUPA机器人

这两款我都试过,体验都挺一般的。两款都不能设置接受哪种消息提醒,所以都是一窝蜂的把所有记录推送给你。如果你的帖子被几百个账号点赞,那消息提醒可把手机折腾要死。没用的提醒一大堆,有用的提醒又掩盖在一堆没用的消息提醒里面。

而我只想要回复,转账,关注,踩,mention这类的消息,所以就打算自己写个Discord 消息提醒机器人

Discord机器人比我想象的简单,尤其使用了一个叫eris的库,省下了很多时间来美化消息提醒

机器人代码:

const Eris = require("eris");
const steem = require('steem');
const bot = new Eris("TOKEN");
const channelId = 'CHANNEL ID';
const account = 'STEEM ID';

function start() {
    steem.api.streamTransactions("head", function (err, result) {
        if (!err) {
            if (result) {
                let op = result.operations[0];
                const time = new Date();
                const type = op[0];
                const params = op[1];
                switch (type) {
                    case 'comment': {
                        const isRootPost = !params.parent_author;
                        //Find reply
                        if (!isRootPost && params.parent_author === account) {
                            let content = `@${params.parent_author}:\n@${params.author} has commented on your post`;
                            let title = `${params.permlink}`;
                            let comment = params.body.substring(0, 100);
                            let url = `https://steem.buzz/@${params.author}/${params.permlink}`;
                            createMessge(content, title, comment, url, time);
                        }

                        //Find Mention
                        if (params.body.includes(`@${account}`)) {
                            let content = '';
                            let title = '';
                            let comment = '';
                            let url = '';
                            if (isRootPost) {
                                content = `@${account}:\n"@${account}" was  mentioned by @${params.author} in a post`;
                                title = `${params.title}`;
                                comment = params.body.substring(0, 100);
                            } else {
                                content = `@${account}:\n"@${account}" was  mentioned by @${params.author} in a comment`;
                                title = `${params.permlink}`;
                                comment = params.body.substring(0, 100);
                            }
                            url = `https://steem.buzz/@${params.author}/${params.permlink}`;
                            createMessge(content, title, comment, url, time);
                        }
                        break;
                    }

                    case 'custom_json': {
                        let json = {};
                        try {
                            json = JSON.parse(params.json);

                        } catch (err) {
                            console.log('Wrong json format on custom_json', err);
                        }
                        switch (params.id) {
                            case 'follow': {
                                /** Find follow */
                                if (json[0] === 'follow' && json[1].following === account) {
                                    let content = `@${json[1].follower} now follows you`;
                                    let title = '';
                                    let comment = '';
                                    let url = '';
                                    createMessge(content, title, comment, url, time);
                                }
                            }
                        }
                        break;
                    }

                    case 'transfer': {
                        if (params.to === account) {
                            let content = `@${params.from} transferred ${params.amount} to you`;
                            let title = '';
                            let comment = params.memo;
                            let url = '';
                            createMessge(content, title, comment, url, time);
                        }
                        break;
                    }
                    case 'vote': {
                        //Find downvote
                        if (params.weight < 0 && params.author === account) {
                            let content = `@${params.voter} downvoted your post`;
                            let title = params.permlink;
                            let comment = '';
                            let url = `https://steem.buzz/@${params.author}/${params.permlink}`;
                            createMessge(content, title, comment, url, time);
                        }
                    }
                }
            }
        } else {
            sleep(2000).then(() => {
                console.error(err);
                start();
            });
        }
    });
}




const sleep = ms => new Promise(resolve => setTimeout(resolve, ms));


bot.once("ready", () => { // When the bot is ready
    console.log("Ready!"); // Log "Ready!"
    console.log(new Date());
    start();

});



function createMessge(content, title, comment, url, time) {
    bot.createMessage(channelId, {
        content: content,
        embed: {
            title: title,
            color: 0x008000,
            url: url,
            description: comment,
            footer: {
                text: `Time:${time}`
            }
        }
    })
}

bot.connect(); // Get the bot to connect to Discord

并不是很完善的代码,但是基本消息提醒都有了。



0
0
0.000
1 comments
avatar

Congratulations @stevewu! You have completed the following achievement on the Hive blockchain and have been rewarded with new badge(s) :

You received more than 1250 upvotes. Your next target is to reach 1500 upvotes.

You can view your badges on your board And compare to others on the Ranking
If you no longer want to receive notifications, reply to this comment with the word STOP

To support your work, I also upvoted your post!

Support the HiveBuzz project. Vote for our proposal!
0
0
0.000