like chéo, cày rank 10/3

Status
Not open for further replies.

  1. 72,163
    nguyenxuanha303
    Well-known member
    • Messages 1,131
    • Reaction score 73,011
    • Points 113
  2. [IMG alt="anhdao1522"]https://next.voz.vn/data/avatars/s/1453/1453845.jpg?1583744963[/IMG]
    64,761
    anhdao1522
    Đôrêmon vOz team · 27 · From Hải Dương
    • Messages 1,398
    • Reaction score 65,162
    • Points 113
  3. [IMG alt="Diep Vu Bi An"]https://next.voz.vn/data/avatars/s/1586/1586205.jpg?1583737500[/IMG]
    60,738
    Diep Vu Bi An
    Well-known member
    • Messages 1,083
    • Reaction score 61,341
    • Points 113
  4. [IMG alt="hoamattroi_0908"]https://next.voz.vn/data/avatars/s/1000/1000101.jpg?1583749792[/IMG]
    54,309
    hoamattroi_0908
    Well-known member
    • Messages 818
    • Reaction score 54,397
    • Points 93
  5. [IMG alt="huha"]https://next.voz.vn/data/avatars/s/1449/1449124.jpg?1583727520[/IMG]
    52,097
    huha
    Well-known member
    • Messages 738
    • Reaction score 52,522
    • Points 93
 
Khi nào close thread hoặc trước khi ae nghỉ farm thì nhớ chạy code nhé

Bật F12 > sang tab console > paste code > ấn enter

Code:
(function(){

/* Tùy chọn reaction, các bạn thay các số tương ứng vào là được (vd: REACTION = 2)

0 : Random

1 : Like

2 : Love

3 : Haha

4 : Wow

5 : Sad

6 : Angry

*/

const REACTION = 1;



/* Tùy chọn trang bắt đầu (khỏi phải scan lại từ đầu =]]) */

const START_PAGE = 1;



/* Tùy chọn like cho Top reaction (https://next.voz.vn/members/?key=highest_reaction_score.

Set bằng 'true' nếu muốn like cho top.

Vì một voz tân có like bằng nhau

*/



const LIKE_HIGHEST_REACTION = false;



/*

Like theo id người post (https://next.voz.vn/members/{id}/)

ex: const WHITE_LIST = ["id1", "id2", "id3", "id...N"]

*/

const WHITE_LIST = [];



/*

Không Like theo id người post

ex: const BLACK_LIST = ["id1", "id2", "id3", "id...N"]

*/



const BLACK_LIST = [];



function getHttpRequest() {

try {return new XMLHttpRequest();}

catch (error) {}

try {return new ActiveXObject("Msxml2.XMLHTTP");}

catch (error) {}

try {return new ActiveXObject("Microsoft.XMLHTTP");}

catch (error) {}



throw new Error("Could not create HTTP request object.");

}



async function httpGet(url){

var request = getHttpRequest();



var promise = new Promise((resolve, reject) => {

request.onreadystatechange = function() {

if (request.readyState==4 && request.status==200)

{

resolve(request.responseText);

}

}

});



request.open("GET", url, true);

request.send(null);



return await promise;

}



async function httpPost(url, data){

var request = getHttpRequest();

var promise = new Promise((resolve, reject) => {

request.onreadystatechange = function() {

if (request.readyState==4 && request.status==200)

{

resolve(request.responseText);

}

}

});



request.open("POST", url, true);

request.setRequestHeader('Accept', 'application/json, text/javascript, */*; q=0.01');

request.setRequestHeader('content-type', 'application/x-www-form-urlencoded; charset=UTF-8');

request.send(data);



return await promise;

}



function sleep (time) {

return new Promise((resolve) => setTimeout(resolve, time));

}



function querySelectorAll(element, query){

return Array.from(element.querySelectorAll(query));

}



async function getDocument(url){

var text = await httpGet(url);

var parser = new DOMParser();



return parser.parseFromString(text, 'text/html');

}



async function getHighestReactionMembers(){

var doc = await getDocument("/members/?key=highest_reaction_score");



return querySelectorAll(doc, ".username").map(item=> /members\/(.*)\//gm.exec(item.href)[1]);

}



async function autoLike(reaction=1){

var url = /(.*)\/(page)?/gm.exec(window.location.href)[1];

var totalPage = 1;

var pageNav = querySelectorAll(document, ".pageNav-page").pop();

pageNav = pageNav ? pageNav.querySelector("a") : null;



if(pageNav!=null){

totalPage = /\/page-(.*)/gm.exec(pageNav.href)[1];

}

var pathName = /(.*)\/(page)?/gm.exec(window.location.pathname)+ "/";



var highestReactionMembers = await getHighestReactionMembers();



for(var i=START_PAGE;i<=totalPage;i++){

console.log("-------- Like page: " + i + "--------");

var htmlDoc = await getDocument(url+"/page-"+i);

var token = htmlDoc.documentElement.getAttribute("data-csrf");



querySelectorAll(htmlDoc, ".message.message--post").forEach(item=>{

var postId = /js-post-(.*)/gm.exec(item.id)[1];

var userId = /members\/(.*)\//gm.exec(item.querySelector(".username").href)[1];



if(WHITE_LIST!=null && WHITE_LIST.length > 0){

if(WHITE_LIST.findIndex(item=>item==userId) == -1){

console.log("Ignore " + userId);

return;

}

}



if(BLACK_LIST!=null && BLACK_LIST.length > 0){

if(BLACK_LIST.findIndex(item=>item==userId) >= 0){

console.log("Ignore " + userId);



return;

}

}



if(!LIKE_HIGHEST_REACTION){

if(highestReactionMembers.findIndex(item=>item==userId) >= 0){

console.log("Ignore " + userId);

return;

}

}



if(item.querySelector("a.reaction.reaction--imageHidden")){

console.log("Like post: "+ postId);

var r = reaction || Math.floor(Math.random() * 6)+1;

httpPost("/posts/"+postId+"/react?reaction_id="+r, "_xfRequestUri="+pathName+"page-"+i+"&_xfWithData=1&_xfToken="+token+"&_xfResponseType=json");

}

});



sleep(500);

}



console.log("done");

}



autoLike(REACTION);

})();
 
Status
Not open for further replies.
Back
Top