-
-
Save tranductam2802/94c0d098ceecdf153326e2f66e576ac5 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(function () { | |
'use strict'; | |
if (location.host !== 'daynhauhoc.com') { | |
const checkHost = confirm('Bookmarklet does not work on this page.\nDo you want to open DayNhauHoc?'); | |
if (checkHost) top.location.href = 'https://daynhauhoc.com'; | |
return; | |
} | |
if (!Discourse.User.current()) { | |
alert('You are not logged in!\nPlease log in and try again.'); | |
return; | |
} | |
var listPosts = [], | |
listPostsSize = 0, | |
currentIndex = 0, | |
likedCount = 0, | |
title = document.title, | |
$win = $(window), | |
pathname = location.pathname, | |
progressing = () => { | |
$win.on('beforeunload', function () { | |
return 'Progress is running...'; | |
}); | |
listPosts = []; | |
listPostsSize = 0; | |
currentIndex = 0; | |
likedCount = 0; | |
}, | |
likePost = () => {}, | |
nextPost = (stop = false, err) => { | |
currentIndex++; | |
if (!stop && currentIndex < listPostsSize) { | |
document.title = `[${likedCount}/${currentIndex}] ${title}`; | |
likePost(); | |
} else { | |
$win.off('beforeunload'); | |
document.title = title; | |
delete window.dnhAutoLikeIsRunning; | |
let mess = ''; | |
if (err && err.responseJSON && err.responseJSON.errors) mess = err.responseJSON.errors[0] + '\n\n'; | |
alert(`${mess}Liked: ${likedCount}/${listPostsSize}`); | |
} | |
}, | |
liking = data => { | |
if (!(data && data.actions_summary)) return; | |
const postId = data.id, | |
likeAction = data.actions_summary.find(x => x.id === 2); | |
if (!(likeAction && likeAction.can_act)) { | |
console.log('Ignore', `https://daynhauhoc.com/p/${postId}`); | |
nextPost(); | |
return; | |
} | |
$.post('/post_actions', { | |
id: postId, | |
post_action_type_id: 2 | |
}).done(() => { | |
console.log('Liked', `https://daynhauhoc.com/p/${postId}`); | |
likedCount++; | |
}).fail(() => { | |
console.log('Erros', `https://daynhauhoc.com/p/${postId}`); | |
}).always(res => { | |
nextPost((res.status === 429), res); | |
}); | |
}; | |
function autoLikeUser(username, offset = 0) { | |
if (window.dnhAutoLikeIsRunning) return; | |
window.dnhAutoLikeIsRunning = true; | |
progressing(); | |
likePost = () => { | |
$.get(`/posts/${listPosts[currentIndex]}`).done(data => { | |
liking(data); | |
}).fail(err => { | |
nextPost(true, err); | |
}); | |
}; | |
$.getJSON(`/user_actions.json?offset=${offset}&username=${username}&filter=4,5`).done(data => { | |
if (!(data && data.user_actions)) return; | |
$.each(data.user_actions, (i, v) => { | |
if (v.post_id) listPosts.push(v.post_id); | |
}); | |
listPostsSize = listPosts.length; | |
likePost(); | |
}).fail(err => { | |
nextPost(true, err); | |
}); | |
} | |
function autoLikeTopic(topicUrl) { | |
if (window.dnhAutoLikeIsRunning) return; | |
window.dnhAutoLikeIsRunning = true; | |
progressing(); | |
likePost = () => { | |
liking(listPosts[currentIndex]); | |
}; | |
const topicId = topicUrl.match(/\/t\/[^/]+\/(\d+)/)[1]; | |
$.getJSON(`/t/${topicId}.json`).done(data => { | |
if (!(data && data.post_stream)) return; | |
listPosts = data.post_stream.posts; | |
listPostsSize = listPosts.length; | |
likePost(); | |
}).fail(err => { | |
nextPost(true, err); | |
}); | |
} | |
if (pathname.indexOf('/u/') === 0) { | |
autoLikeUser(pathname.match(/^\/u\/([^/]+)/)[1]); | |
} else if (pathname.indexOf('/t/') === 0) { | |
autoLikeTopic(pathname); | |
} else { | |
let username = prompt('Please enter your idol username:', 'drgnz'); | |
if (username) autoLikeUser(username); | |
} | |
$(document).on('contextmenu', 'a[data-user-card]', e => { | |
if (!e.altKey) return; | |
e.preventDefault(); | |
let offset = 0; | |
if (e.shiftKey) offset = prompt('Set offset of the posts list:', 30) || 30; | |
autoLikeUser(e.currentTarget.dataset.userCard, offset); | |
}).on('contextmenu', 'a[href^="/t/"]', e => { | |
if (!e.altKey) return; | |
e.preventDefault(); | |
autoLikeTopic(e.currentTarget.href); | |
}); | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment