djimirji

Untitled

May 2nd, 2018
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // У вас должен быть установлен nodejs
  2. // Установите зависимости для скрипта командой npm install golos-js
  3. // =====================================================================
  4. // Автор https://golos.io/@djimirji/
  5. // =====================================================================
  6. const Trans = require("./cyr-to-lat")
  7.  
  8. //Логины которые не будут учитываться
  9. const blacklistvoters = ['servobot','upit']
  10.  
  11. // Логин аккаунта у которого ищем посты
  12. const mainBot = 'djimirji'
  13.  
  14. //Теги для публикации поста
  15. const tags = ['апвот100','golos','голос','cashback','бот']
  16.  
  17. //const TitlePost = 'Cashback или мутуализм. Выпуск - '
  18. const TitlePost = 'Еженедельный рейтинг постов от djimirji'
  19.  
  20. //##################################################################
  21. // ======================= Коннект ==========================
  22. //const GOLOSNODE = "ws://localhost:9090"
  23. // Подключение JavaScript библиотеки для работы c API голоса
  24. const GOLOSNODE = "wss://ws.golos.io"
  25. //const GOLOSNODE = "wss://ws17.golos.io"; //нода @vik
  26. const golos = require('golos-js');
  27. golos.config.set('websocket', GOLOSNODE);
  28. // =====================================================================
  29. //#######################################################################
  30.  
  31. const body_start  = `![N](https://i.imgsafe.org/2f/2f7ee4a518.jpeg)
  32. Всем привет.
  33.  
  34. > Мутуали́зм (от лат. mutual «взаимный») — широко распространённая форма взаимополезного сожительства, когда присутствие партнёра становится обязательным условием существования каждого из них; один из типов симбиоза — сосуществования различных биологических видов. Но в отличие от мутуализма, симбиоз может быть и не выгоден одному из партнёров, например, в случае комменсализма.
  35.  
  36.  
  37.  
  38. `
  39.  
  40. //#######################################################################
  41. function getblogs(author) {
  42.     let d = new Date();
  43.     let dt = d.toISOString().split('.')[0];
  44.     let startPermlink = '';
  45.     let beforeDate = dt;
  46.     let limit = 50;    
  47.     return golos.api.getDiscussionsByAuthorBeforeDate(author, startPermlink, beforeDate, limit, async function(err, result) {  
  48.         if (err) { console.log(err) }  
  49.     });
  50. };
  51. //#######################################################################
  52. function getrewarddata (author,startsearch,limit) {
  53.     return golos.api.getAccountHistory(author, startsearch, limit, function(err, result) {  
  54.         if (err) { console.log(err) }              
  55.     });
  56. }
  57. //#######################################################################
  58. const limit = 1999;
  59. var count = 2000;
  60. const getLastBlock = new Promise(function(resolve, reject) {
  61. async function CountAllOperationsForAccount () {
  62.    
  63.         let round = await getrewarddata (mainBot,count,limit); 
  64.         if (round[limit][0] == count) {
  65.             count = count + round.length;      
  66.             CountAllOperationsForAccount (mainBot,count,limit);
  67.         }  
  68.         else {         
  69.             resolve ( round[limit][0] );
  70.         }          
  71. }
  72. CountAllOperationsForAccount ()
  73. })
  74.  
  75. const LastBlocksToSearch = 2000
  76.  
  77. async function findreward (blog) {
  78.     let LastBlock = await getLastBlock         
  79.     //let blog = findblog ()
  80.     let permlink = blog.permlink
  81.     let finded;
  82.     let lastmove = await getrewarddata(mainBot,LastBlock,LastBlocksToSearch)
  83.    
  84.     for (let i of lastmove) {      
  85.         if ((i[1].op[0] == 'author_reward') && (i[1].op[1].permlink == permlink) ) {                   
  86.             finded = i[1].op       
  87.         }
  88.     }
  89.    
  90.     try {
  91.         if (parseFloat(finded[1].sbd_payout) > parseFloat(finded[1].steem_payout)) {
  92.             return [parseFloat(finded[1].sbd_payout) , ' GBG']
  93.         }
  94.         else {
  95.             return [parseFloat(finded[1].steem_payout), ' GOLOS']
  96.         }  
  97.     }
  98.     catch(e) {
  99.         console.log ("Не удалось вычеслить вознаграждение за пост")
  100.     }
  101.    
  102. }
  103. //#######################################################################
  104. //#######################################################################
  105. function findActiveVotes (author , permlink) {
  106.     return golos.api.getActiveVotes(author, permlink, function(err, result) {
  107.         if(err){console.log(err);}     
  108.     });
  109. }
  110. //#######################################################################
  111. async function findblog () {   
  112.     let blogs = await getblogs (mainBot)   
  113.     let WeekAgoStartDay = new Date(new Date(new Date().getTime() - 60 * 60 * 24 * 7 * 1000).setHours(0,0,0,1))
  114.     let WeekAgoEndDay = new Date(new Date(new Date().getTime() - 60 * 60 * 24 * 6 * 1000).setHours(23,59,59,1))
  115.            
  116.     for (let k of blogs) {
  117.         if ((k.title.search(TitlePost) != -1) && (new Date(k.created) > WeekAgoStartDay) && (new Date(k.created) < WeekAgoEndDay)){                    
  118.             return k
  119.         }      
  120.     }
  121. }
  122. //#######################################################################
  123. async function findLastCashoutNumber () {  
  124.     let blogs = await getblogs (mainBot)   
  125.     let cashbackblog = []
  126.     for (let k of blogs) {
  127.         if (k.title.search(TitlePost) != -1) {         
  128.             cashbackblog.push(k.title)
  129.         }      
  130.     }
  131. }
  132. //#######################################################################
  133.  
  134. const collectdata = new Promise(function(resolve, reject) {
  135.    
  136.     try {
  137.         var data = []
  138.        
  139.         findblog ()
  140.             .then ( function (result){
  141.                 if (result !== undefined) {
  142.                     console.log(result)
  143.                     data.push(result)              
  144.                     findActiveVotes (result.author , result.permlink)
  145.                         .then (function (result){                      
  146.                             data.push(result)
  147.                         })
  148.                     findreward (result)
  149.                         .then (function (result){                      
  150.                             data.push(result)
  151.                         })
  152.                     .then (function (result){
  153.                         resolve (data) 
  154.                     })
  155.                 }
  156.                 else {
  157.                     reject (console.log("Не удалось вычеслить пост"))
  158.                 }
  159.             })
  160.        
  161.     }
  162.     catch(e) {
  163.         console.log (reject)
  164.     }
  165.    
  166. })
  167.  
  168. //#######################################################################
  169.  
  170. function getrewardforeach (allvoters,totalreward, TypeOfReward) {
  171.     let reward = []
  172.     let total_rshares = allvoters.map(a => parseInt(a.rshares))
  173.     total_rshares = total_rshares.reduce((a, b) => a + b, 0)
  174.            
  175.     for (i=0;i < allvoters.length; i++) {      
  176.         let rwd = ((parseFloat(allvoters[i].rshares)/parseFloat(total_rshares)) * parseFloat(totalreward)).toFixed(3)      
  177.         if ((rwd > 0) && !(blacklistvoters.includes(allvoters[i].voter))) {
  178.             fill = {
  179.                 voter: allvoters[i].voter,
  180.                 reward: rwd + TypeOfReward
  181.             }
  182.             reward.push(fill)
  183.         }
  184.         if (i == (allvoters.length - 1)) {
  185.             return reward
  186.         }
  187.     }
  188. }
  189.  
  190. //#######################################################################
  191.  
  192. async function run () {
  193.     let collectedData = await collectdata
  194.     if (collectedData) {
  195.         let eachreward = await getrewardforeach (collectedData[1], collectedData[2][0], collectedData[2][1])
  196.         console.log(collectedData[2], eachreward )
  197.     }
  198.     else {
  199.         console.log('невозможно собрать необходимые данные')
  200.     }
  201.        
  202. }
  203.  
  204. run ()
Advertisement
Add Comment
Please, Sign In to add comment