Post
Topic
Board Bahasa Indonesia (Indonesian)
Merits 2 from 2 users
Re: Bitcointalk Merit Dashboard
by
DroomieChikito
on 02/01/2020, 00:13:30 UTC
⭐ Merited by Husna QA (1) ,AakZaki (1)
Padahal jika DdmrDdmr menambahkan fungsi filter berdasarkan section dan subsection seperti yg ada di menu
Mungkin ada maksud lain untuk tidak menambahkan fungsi tersebut

Selain itu, mungkin menurut saya perlu di tambahkan juga opsi input beberapa form name atau user ID untuk membandingkan data lebih dari satu akun sekaligus.
bisa juga dicounter personal summary per user, tapi ya manual

Mungkin hubungi saja langsung si pembuat toolsnya. .
Haha, tajam.
karena kita gak ada ilmu bikin yang kayak gitu, jadinya minta disuapin terus mas.



Padahal, Thread populer seperti:

1. Bitcointalk Merit Dashboard
2. Announcing BPIP - The Bitcointalk Public Information Project!
3. LoyceV's Merit data analysis (full data since Jan. 24, 2018; not just 120 days)

Sumber utamanya dari ini, karena ketiga thread tersebut baru ada setelah theymos memberikan sourcenya.


Itu pun dalam jangka waktu 2 bulan sejak diminta oleh EcuaMobi. karena sebelumnya Theymos memberikan data Default Trust raw berbntuk txt, EcuaMobi minta juga supaya data merit dalam bentuk yang sama diopen juga.

Sumber dari semua itu dari babang tampan theymos supaya member menjadi kreative dan bisa mengolahnya dengan baik.




Emerit

Oya tadi nemu script di sini, cara melihat earning merit atau merit yang didapat tanpa buka statistik/dashboard merit lagi. jadi emerit ini akan nongol di profil pengguna secara default, seperti merit di profil umumnya.
Code:
// ==UserScript==
// @name     Display earned merit
// @version  1.0
// @grant    none
// @include        https://bitcointalk.org/index.php?topic=*
// @run-at         document-end
// ==/UserScript==

const getMeritsFromApi = async function(ids) {
    return await fetch(`https://bct-quote-notifier.herokuapp.com/api/merit/v1/profiles/?ids=${ids.join(",")}`).then(r =>
        r.json()
    )
}

const insertEmerit = function(meritNode, eMerit) {
    try {
        let eMeritNode = document.createElement("text")
        meritNode.after(eMeritNode)
        meritNode.after(document.createElement("br"))
        eMeritNode.textContent = `eMerit: ${eMerit}`
    } catch (e) {
        console.error(e)
    }
}

const main = async function() {
    let posters = new Map([])
    for (const node of document.querySelectorAll(".poster_info > .smalltext")) {
        const meritNode = [...node.childNodes].find(e => e.textContent.match(/Merit/))

        const userId = [...node.childNodes].find(e => e.href && e.href.match(/action=profile;u=/)).href.split(";u=")[1]

        if (meritNode && userId) {
            let poster = posters.get(userId)
            if (poster) {
                poster.meritNodes.push(meritNode)
            } else {
                posters.set(userId, { meritNodes: [meritNode] })
            }
        }
    }

    let earnedMerits = await getMeritsFromApi([...posters].map(poster => poster[0]))

    earnedMerits
        .filter(e => e !== null)
        .forEach(e => {
            let poster = posters.get(e.id.toString())
            if (poster) {
                poster.earned = e.earned
            }
        })

    for (let [, poster] of posters) {
        try {
            poster.meritNodes.forEach(node => {
                insertEmerit(node, poster.earned || 0)
            })
        } catch (e) {
            console.error(e)
        }
    }
}

main()


Ini contohnya setelah saya coba pakai di tampermonkey:



Bagaimana cara memasangnya?, bisa baca sini, walaupun thread berlainan di situ ada tutorial singkat insert script di tampermonkey.




Send merit

Bagi yang tak mau buka halaman baru ketika mengirim merit. Ada tool untuk mempersingkatnya Enhanced merit UI [1.1], dan rekan/suhu kita mengupdate ke versi 1.3
Ini scriptnya:

Here's the modified source. grue, feel free to update your original code if you like the change:
Code:
// ==UserScript==
// @name        bitcointalk merit
// @namespace   grue
// @include     https://bitcointalk.org/index.php?topic=*
// @require     https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.3.1.min.js
// @version     1.1-em0.1
// @downloadURL https://grue.blob.core.windows.net/scripts/Merit.user.js?sv=2014-02-14&si=1&sr=c&sig=k%2BqstGBI3oQ8TrHfPWjS5HgjrazuDPmKJ6rYNs7rvRk%3D&.user.js
// @grant none
// ==/UserScript==

(() => {
  var sMerit;
 
  //get csrf token from the logout link
  let sc = $('td.maintab_back a[href*="index.php?action=logout;sesc="').attr("href");
  sc = /;sesc=(.*)/.exec(sc)[1];
 
  //Added by EcuaMobi: Get remaining sMerit
  $.post(
"https://bitcointalk.org/index.php?action=merit;msg=29048068"
  ).then((data) => {
    sMerit = /You have ([0-9]+)<\/b> sendable/.exec(data)[1];
  }).catch(() => sMerit = null);

  //selector for the "+Merit" link
  $('td.td_headerandpost div[id^=ignmsgbttns] a[href*="index.php?action=merit;msg="]')
  .each((i, e) => {
    const msgId = /msg=([0-9]+)/.exec(e.href)[1];
   
    const $popup = $(['
',
      ' 
',
      '   
',
      '      Merit points: ',
      '   
',
  // Modified by EcuaMobi
      '   
',
      ' 
',
      '
'
    ].join("\n"));
    $popup.find("form").submit( (e) => {
      e.preventDefault();
      $popup.find('input[type="submit"]')
        .prop("disabled", true)
        .val("Sending...");
      const merits = e.target.elements["merits"].value;
     
      $.post(
        "https://bitcointalk.org/index.php?action=merit",
        {merits, msgID: msgId, sc}
      ).then((data) => {
        //Error pages usually have this (rough heuristic)
        if(data.includes("An Error Has Occurred!</title")) {<br>          throw "error";<br>        }<br>        //double check and see whether the post we merited was added to the list. Its msgId should be visible in the page source.<br>        if(data.includes("#msg" + msgId)) {<br>          alert("Merit added.");<br>          $("#grue-merit-popup" + msgId).toggle(false);<br><span style="white-space: pre;"> </span><span style="white-space: pre;"> </span>  // Added by EcuaMobi<br><span style="white-space: pre;"> </span><span style="white-space: pre;"> </span>  if(sMerit!=null) { sMerit -= merits }<br>          return;<br>        }<br>        alert("Server response indeterminate.");<br>      })<br>      .catch(() => alert("Failed to add merit."))<br>      .always(() => {<br>        $popup.find('input[type="submit"]')<br>        .prop("disabled", false)<br>        .val("Send");<br>      });<br>    });<br>    $popup.insertAfter(e);<br>    <br>    $(e).click((e) => {<br>      e.preventDefault();<br>      $("#grue-merit-popup" + msgId).toggle();<br><span style="white-space: pre;"> </span>  // Added by EcuaMobi<br><span style="white-space: pre;"> </span>  if(sMerit!=null) { $("#em-smerit-count" + msgId).html('<a href="https://bitcointalk.org/index.php?action=merit;msg='+msgId+'" target="_blank">Available:</a> <b>'+sMerit+'</b>    ') };<br>    });<br>  });<br>   $(".grue-merit-popup").toggle(false);<br>   <br>})();</div></div><br>Dan saya sudah mencoba script tersebut di tampermonkey. Cara kirim meritnya seperti biasa,<br><img class="userimg" src="https://ip.bitcointalk.org/?u=https%3A%2F%2Fi.postimg.cc%2FkG3xn7n7%2F1.png&t=615&c=Fmq9XrcCG3Aqyw" alt border="0"><br><br>sisa smerti juga akan terlihat, jadi bisa dapat langsung mengatur merit.<br><div class="codeheader">Code:</div><div class="code">available smerit=5</div><br>Kedua script tersebut bisa dipasang di extension. dapat melihat earning dan smerit secara langsung tanpa buka merit dashboard lagi.