From a9333677e2dc68be6b2ac29c7b9f8f9025c84e47 Mon Sep 17 00:00:00 2001 From: Fillerino Date: Thu, 15 Jun 2017 10:12:32 +0200 Subject: [PATCH] Revert "Revert "Fallback solution as proposed in pull #7"" --- bots/claimbot.js | 50 +++++++++++++++++++++++++++++++++++++----------- package.json | 3 ++- 2 files changed, 41 insertions(+), 12 deletions(-) diff --git a/bots/claimbot.js b/bots/claimbot.js index 1cad5f0..2bbc265 100644 --- a/bots/claimbot.js +++ b/bots/claimbot.js @@ -5,7 +5,8 @@ var mongo; var slackbot; var channel; var moment = require('moment'); -const request = require("request"); +var request = require('request'); +var sleep = require('sleep'); module.exports = { init: init, @@ -90,6 +91,7 @@ function announceNewClaims() { function announceClaimsLoop(block, lastBlock, currentHeight) { // console.log('Doing block ' + block) + let claimsFound = 0; return lbryCall('getblockhash', block) .then(function (blockHash) { return lbryCall('getblock', blockHash); @@ -102,7 +104,12 @@ function announceClaimsLoop(block, lastBlock, currentHeight) { return !!c; }); console.log('Found ' + claims.length + ' claims in ' + block); + claimsFound = claims.length; return Promise.all(claims.map(function (claim) { + //slack has a rate limit. to avoid hitting it we must have a small delay between each message + //if claims were found in this block, then we wait, otherwise we don't + if (claimsFound > 0) + sleep.msleep(300); return announceClaim(claim, block, currentHeight); })); }) @@ -128,27 +135,45 @@ function announceClaim(claim, claimBlockHeight, currentHeight) { request(options, function (error, response, body) { if (error) throw new Error(error); - body = JSON.parse(body); try { - let claimData = body.value.stream.metadata; - let channelName = (body.hasOwnProperty('channel_name') ? body['channel_name'] : null); - //claimData = JSON.parse(body).stream.metadata; - //console.log(JSON.stringify(claimData)); + console.log(body); + + let claimData = null; + let channelName = null; + try { + body = JSON.parse(body); + if (body.hasOwnProperty('value') && body.value.hasOwnProperty('stream') && body.value.stream.hasOwnProperty('metadata')) { + claimData = body.value.stream.metadata; + channelName = (body.hasOwnProperty('channel_name') ? body['channel_name'] : null); + } + } + catch (e) { + console.error(e); + } + return Promise.all([ lbryCall('getvalueforname', claim['name']), lbryCall('getclaimsforname', claim['name']), ]) .then(function ([currentWinningClaim, claimsForName]) { //console.log(JSON.stringify(claimData)); - let value = claimData; + let value = null; + if (claimData !== null) + value = claimData; + else { + try { + value = JSON.parse(claim['value']); + } catch (e) { } + } const text = []; if (value) { - if (channelName) { + /*if (channelName) { text.push("Channel: lbry://" + channelName); } - else if (value['author']) { + else*/ + if (value['author']) { text.push("author: " + value['author']); } if (value['description']) { @@ -161,12 +186,15 @@ function announceClaim(claim, claimBlockHeight, currentHeight) { if (value['nsfw']) { text.push("*Warning: Adult Content*"); } + + //"fee":{"currency":"LBC","amount":186,"version":"_0_0_1","address":"bTGoFCakvQXvBrJg1b7FJzombFUu6iRJsk"} if (value['fee']) { const fees = []; - for (var key in value['fee']) { + text.push("Price: " + value['fee'].amount + " *" + value['fee'].currency + '*'); + /*for (var key in value['fee']) { fees.push(value['fee'][key]['amount'] + ' ' + key); } - text.push(fees.join(', ')); + text.push(fees.join(', '));*/ } } diff --git a/package.json b/package.json index 5a8582d..a9a2be2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "hashbot", - "version": "1.0.1", + "version": "1.0.2", "description": "A bot for slack wich displays lbrys current hashrate via the open api.", "main": "app.js", "dependencies": { @@ -11,6 +11,7 @@ "needle": "^1.0.0", "request": "^2.81.0", "slackbots": "^0.5.1", + "sleep": "^5.1.1", "xmlhttprequest": "1.8.0" }, "devDependencies": {},