之前一直在用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
并不是很完善的代码,但是基本消息提醒都有了。