// ==UserScript== // @name Hiện Reaction Score // @namespace meo` // @version 2022.01.17.01 // @description như tên // @author You // @match https://voz.vn/t/* // @grant GM_setValue // @grant GM_getValue // @run-at document-start // @antifeature tracking // ==/UserScript== window.addEventListener('DOMContentLoaded', async () => { const doc = document; const map = new Map(); const $links = doc.querySelectorAll('.message-userDetails .username[data-user-id]'); $links.forEach($link => { const id = $link.dataset.userId; const vozKey = 'voz_score_' + id; map.set($link.dataset.userId, { id, url: $link.getAttribute('href'), }) const $userDetail = $link.closest('.message-userDetails'); if (!$userDetail) { return; } const score = GM_getValue(vozKey) || '...'; $userDetail.insertAdjacentHTML('beforeend', `
Score: ${score}
`); }) const token = doc.querySelector("[name=_xfToken]").value; const users = Array.from(map.values()); for (let i = 0; i < users.length; i++) { const user = users[i]; await fetchStats(user) } function getUserData(id) { } async function fetchStats(user) { try { const api = `https://voz.vn${user.url}?tooltip=true&_xfRequestUri=https%3A%2F%2Fvoz.vn%2F&_xfWithData=1&_xfToken=${token}&_xfResponseType=json`; const res = await fetch(api); const data = await res.json(); if (data.status === 'ok') { const $tooltip = doc.createElement('DIV'); $tooltip.insertAdjacentHTML('beforeend', data.html.content); const $score = $tooltip.querySelector('.memberTooltip-stats > div > dl:nth-child(2) > dd'); const score = $score ? $score.textContent.trim() : 0; const negative = /^-/.test(score) ? true : false; const $time = $tooltip.querySelector('.memberTooltip-blurbContainer .memberTooltip-blurb:nth-child(2) .u-dt'); const time = $time.dataset.time ? new Date(+$time.dataset.time * 1000).toLocaleDateString("vi-VN") : ''; const $users = doc.querySelectorAll(`.message-userDetails .username[data-user-id='${user.id}']`); $users.forEach($el => { const $userDetail = $el.closest('.message-userDetails'); if (!$userDetail) { return; } const $userScore = $userDetail.querySelector('.user-score'); if (!$userScore) { return; } $userScore.style.color = negative ? '#e91e63' : '#23497c'; $userScore.textContent = `Score: ${score}`; GM_setValue(`voz_score_${user.id}`, score); }) } } catch (error) { console.error(error); console.error('voz script fetch reaction error'); console.error(user); } } })