7.10.25 |
29
nhận xét
|
lượt xem
Bài này hướng dẫn anh em "khóa mõm" của một số tài khoản nhất định dựa theo Profile ID Blogger.
Tự động thay avatar thành biểu tượng cấm, đổi tên thành Blocked User, thay nội dung và làm mờ khung bình luận.
Tự động thay avatar thành biểu tượng cấm, đổi tên thành Blocked User, thay nội dung và làm mờ khung bình luận.
Code
<!-- khóa mõm -->
<script>
document.addEventListener("DOMContentLoaded", function () {
const blockedUsers = [
"07681083261644181883",
"01234567891011121314",
"01234567891011121314"
];
function getProfileIdFromLink(href) {
const m = href && href.match(/\/profile\/(\d+)/);
return m ? m[1] : null;
}
function blockOneComment(block) {
if (!block) return;
const userLink = block.querySelector(".comment-header .user a[href*='blogger.com/profile/']");
if (!userLink) return;
const uid = getProfileIdFromLink(userLink.href);
if (!uid || !blockedUsers.includes(uid)) return;
const comment = block.closest(".comment");
const avatarBox = comment?.querySelector(".avatar-image-container");
if (avatarBox) {
avatarBox.innerHTML = `
<svg viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"
width="45" height="45" fill="#d32f2f" title="Người dùng bị chặn">
<circle cx="256" cy="256" r="200" fill="none" stroke="#d32f2f" stroke-width="40"/>
<line x1="120" y1="392" x2="392" y2="120" stroke="#d32f2f" stroke-width="40"/>
</svg>
`;
}
userLink.textContent = "Blocked User";
userLink.removeAttribute("href");
userLink.removeAttribute("target");
userLink.removeAttribute("rel");
userLink.style.pointerEvents = "none";
const content = block.querySelector(".comment-content");
if (content) {
content.textContent = "Nội dung cho người dùng bị cấm đăng lên vì vậy không hiển thị";
}
block.style.opacity = "0.7";
block.style.pointerEvents = "none";
}
document.querySelectorAll(".comment-block").forEach(blockOneComment);
const holder = document.querySelector("#comment-holder") || document.body;
const mo = new MutationObserver(() => {
document.querySelectorAll(".comment-block").forEach(blockOneComment);
});
mo.observe(holder, { childList: true, subtree: true });
});
</script>
<!-- khóa mõm -->
Lưu ý
Cách lấy Profile ID
- Mở trang bình luận nơi người đó đã comment.
- Nhấp vào tên người dùng (liên kết thường có dạng
https://www.blogger.com/profile/xxxxxxxxxxxxxxxxxxx). - Sao chép dãy số sau
/profile/và thêm vào mảngblockedUserstrong script.
Nếu vẫn thấy bình luận của người bị chặn?
- ID đã đúng (khớp dãy số trong URL profile).
- Template có đúng selector:
.comment-block,.avatar-image-container,.comment-header .user a,.comment-content. Nếu khác, hãy đổi selector tương ứng.
Tùy chọn hiển thị
- Ẩn hoàn toàn bình luận: thay hai dòng cuối trong hàm
blockOneCommentbằng:
block.closest(".comment")?.remove(); - Đổi biểu tượng: thay đoạn SVG trong
avatarBox.innerHTMLbằng SVG khác tùy ý. - Đổi thông điệp: sửa chuỗi “Nội dung cho người dùng bị cấm…” theo ý bạn.
Kết luận
- Nên khóa hết mõm mấy thằng hay spam cho đỡ rác
- Để lại bình luận nếu bạn cần hỗ trợ


Ngon
REPLY DELETETự nhiên bao lâu không sao dạo này lòi ra ông toàn đi spam linh tinh 😒
REPLY DELETEKhóa liền và luôn kaka
REPLY DELETEHình như cái anh share là mấy anh em blogger bê về dùng được luôn, khỏi đổi ID =))
REPLY DELETEThường ID nó giống nhau mà, lưu ý cho anh em thay ID khác thôi 😁
REPLY DELETEđược nè, nó mới đi spam khắp các blog 🤣
REPLY DELETEKhóa mõm nó chưa bro? 🤣
REPLY DELETEQuá ok a <3
REPLY DELETEGiải pháp tạm thời. Tạm gọi "Thay thế nhận xét", xem nguồn vẫn thấy nhận xét gốc.
REPLY DELETETùy spammer vẫn có thể tiếp tục "làm phiền" quản trị viên. Đây là thử "độ lì"... 🙄
Đúng rồi bác. Nhưng về mặt tâm lý thì cái thằng spam nó không đạt được mục đích của nó thì nó cũng sẽ cook thôi. Còn rảnh thì vài click ở trong trang quản trị là nó biến í mà 😁
REPLY DELETE[note]⏰ Đếm ngược sự kiện
REPLY DELETELogo sự kiện kèm theo đếm ngược thì hay, khi sự kiện kết thúc có thể ẩn đi (chỉnh sửa hoặc gỡ bỏ code sau).
Một tháng gần đây quản trị viên blog này siêng đăng bài mới trở lại quá với khá nhiều nhận xét rôm rả. 😀
Rêu phong mấy lần rồi bạn
Bao giờ thì sẽ hết cạn ý tưởng? 🤔
Chơi blog cũng "vất vả" như là "chơi" (với) nàng..., phải có thời gian, sức khỏe, tiền bạc, đam mê, chăm chút, chiều chuộng, dại khờ, lúc nào cũng tơ tưởng v.v... tựa như lời bài hát Rong Rêu: "... Chỉ vì yêu em nên anh vất vả... Chỉ vì yêu em nên anh mất cả..." 😄
https://www.youtube.com/watch?v=MuNmUDzJRQg
Theo vòng tuần hoàn thời gian, mùa thu lá vàng rơi, mây bay lãng mạn, lòng người đượm buồn... lại đến. Thu về nắng ngọt như mật ong và gió lao xao đến nao lòng theo từng chiếc lá rơi. Thu về, gieo những vần thơ, khúc nhạc mênh mang, bâng khuâng. Chút se lạnh của hơi thu cũng làm nên thi vị và rồi một màu áo vàng khoác lên cây cành, sắc vàng không bút mực nào tả nổi những ý tưởng của lòng người khi lá đổ ngập lối đi. Không có chú nai vàng ngơ ngác mà đâu đó có những bước chân ngập ngừng trên lá thu của người viễn xứ... 😦
🍂 Thu lại về, tình bơ vơ
💃 Người xưa giờ là giấc mơ xa xăm
💘 Đã cùng hẹn ước trăm năm
🕺 Mà sao nỡ đành biệt tăm mù khơi...!!! 💔
https://www.youtube.com/watch?v=8lzXAu_O6iI
💻 Ⓓuong Ⓠuach℠ ❤️[/note]
nay không thấy thg fake vs admin real đâu nhỉ?
REPLY DELETEThì không đạt được mục đích nữa thì nó phải cook chứ sao bạn 😁
REPLY DELETENó nữa đó anh :v
REPLY DELETEko phải đâu, này là Duy mà
REPLY DELETEcái này muốn khóa luôn ở widget cmt mới nhất thì làm thế nào bạn?
REPLY DELETEQuan trọng là phải biết code của cmt mới nhất bạn đang dùng mới sửa được 😅
REPLY DELETECode widget mình đây:
REPLY DELETEhttps://anotepad.com/notes/rqq6b7ga
và code bạn share ở bài này nè: https://www.blogspotvn.net/2025/09/tao-trang-nhan-xet-cho-blogspot-day-du-nhat.html
Bạn thử thay js cho phần hiển thiển recent comment bằng
REPLY DELETE[pre]<script type="text/javascript">
//<![CDATA[
var NXM_BLOCKED = window.NXM_BLOCKED || [
"07681083261644181883",
"05815588754456032856",
"12718544154576947159"
];
function getAuthor(entry){
return entry && entry.author && entry.author[0] ? entry.author[0] : null;
}
function getProfileIdFromAuthor(au){
var uri = au && au.uri && au.uri.$t;
var m = uri && uri.match(/\/profile\/(\d+)/);
return m ? m[1] : null;
}
function isBlockedEntry(entry){
var au = getAuthor(entry);
var pid = getProfileIdFromAuthor(au);
return !!(pid && NXM_BLOCKED.indexOf(pid) !== -1);
}
function nxmoi(e){
var t = '<ul>';
for (var n = 0; n < numComments; n++) {
if (!e.feed || !e.feed.entry || n === e.feed.entry.length) break;
var entry = e.feed.entry[n];
if (isBlockedEntry(entry)) continue;
var r, i, s, o, l, c;
for (var a = 0; a < entry.link.length; a++) {
if (entry.link[a].rel === "alternate") { r = entry.link[a].href; }
}
var au = getAuthor(entry);
if (au) {
i = au.name && au.name.$t || "Ẩn danh";
s = au.gd$image && au.gd$image.src || "";
} else {
i = "Ẩn danh"; s = "";
}
if (s.indexOf("/s1600/") != -1) {
s = s.replace("/s1600/","/s"+avatarSize+"-c/");
} else if (s.indexOf("/s220/") != -1) {
s = s.replace("/s220/","/s"+avatarSize+"-c/");
} else if (s.indexOf("/s512-c/") != -1 && s.indexOf("https:") != 0) {
s = "https:" + s.replace("/s512-c/","/s"+avatarSize+"-c/");
} else if (s.indexOf("blogblog.com/img/b16-rounded.gif") != -1) {
s = "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivOn1zPrLdfzH9RxbZ0LibKAofuhuIgKzyq4IBWs7ZhLWelcGraOwPf0p8vyrW5yJXiLv-PJF52FINycEeYcX73huuOsLhk7gWFevNHFTMPOheQ0wc8d9vrdW3JoUFPG3CYx6oQx4CuUDl/"+avatarSize+"/md_blogger_logo.png";
} else if (s.indexOf("blogblog.com/img/openid16-rounded.gif") != -1) {
s = "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVipyG4x6YeRP3cdfePLqW326iB5jlCRCyJ1Mw0tMRmlwee9bs_7HBoZvZQD4DYQ5-Zq1MsuOl9MjV9uPBwFt9-jy-AEkaBP55PshWYl9ToJM6RFYyrnqbw0ob8vaJ9al5FEUL31BtEPd_/"+avatarSize+"/md_openid_logo.png";
} else if (s.indexOf("blogblog.com/img/blank.gif") != -1) {
if (defaultAvatar.indexOf("gravatar.com") != -1) {
s = defaultAvatar + "&s=" + avatarSize;
} else {
s = defaultAvatar;
}
}
var r2 = (r || "").replace(/<.*?>/ig,'');
l = entry.content && entry.content.$t || "";
c = l.replace(/(<([^>]+)>)/ig,"");
if (c !== "" && c.length > characters) {
c = c.substring(0, characters) + "…";
}
t += "<li>";
if (showAvatar === true) {
o = (roundAvatar === true) ? "avatarRound" : "";
t += '<div class="trai avatarImage"><img class="'+o+'" src="'+s+'" alt="'+i+'" height="'+avatarSize+'" width="'+avatarSize+'" /></div>';
}
t += "<div class='trai noi-dung'><span class='name'>"+i+"</span>";
t += '<a class="nxmoia" rel="nofollow" href="'+r2+'">'+c+"</a></div>";
t += "<div style='clear: both'></div></li>";
}
t += "</ul>";
document.getElementById('nxmoi').innerHTML = t;
}
var numComments = numComments || 7,
avatarSize = avatarSize || 30,
characters = characters || 90,
defaultAvatar = defaultAvatar || "https://lh5.googleusercontent.com/-5YeC_6-32nw/UPb7SL-uGXI/AAAAAAAABWE/QJRpUV7G9bc/s30/personal.png",
showAvatar = (typeof showAvatar === "undefined") ? true : showAvatar,
roundAvatar = (typeof roundAvatar === "undefined") ? true : roundAvatar,
hideCredits = (typeof hideCredits === "undefined") ? false : roundAvatar
//]]>
</script>
[/pre]
cái này thì nó remove luôn bình luận đó bạn
REPLY DELETEVậy chứ không để nó spam cho không nhìn thấy bình luận mới của người khác luôn thì đúng mục đích của nó rồi 😌
REPLY DELETEý là sao nó bị mất luôn cmt ở widget á, tức là set 7 cmt mà nó hiện có 4 à
REPLY DELETEà nó bị dính mặc định những cmt bị remove nên hiện thị vậy
REPLY DELETEHiểu rồi, lấy nhiều hơn 7 từ feed đi
REPLY DELETE[pre]<script type="text/javascript" src="/feeds/comments/default?alt=json&callback=nxmoi&max-results=50"></script>[/pre]
Và sửa js như sau
[pre]<script type="text/javascript">
var NXM_BLOCKED=window.NXM_BLOCKED||["07681083261644181883","05815588754456032856","12718544154576947159"];
function getAuthor(e){return e&&e.author&&e.author[0]?e.author[0]:null}
function getProfileIdFromAuthor(e){var n=e&&e.uri&&e.uri.$t,r=n&&n.match(/\/profile\/(\d+)/);return r?r[1]:null}
function isBlockedEntry(e){var n=getAuthor(e),r=getProfileIdFromAuthor(n);return!!(r&&NXM_BLOCKED.indexOf(r)!==-1)}
function nxmoi(e){
var o=["<ul>"],shown=0,entries=e&&e.feed&&e.feed.entry?e.feed.entry:[];
for(var n=0;n<entries.length;n++){
if(shown>=numComments)break;
var u=entries[n]; if(isBlockedEntry(u))continue;
var r,i,s,a,l,c;
for(var k=0;k<u.link.length;k++){if(u.link[k].rel==="alternate"){r=u.link[k].href}}
var au=getAuthor(u);
i=au&&au.name&&au.name.$t||"Ẩn danh";
s=au&&au.gd$image&&au.gd$image.src||"";
if(s.indexOf("/s1600/")!=-1){s=s.replace("/s1600/","/s"+avatarSize+"-c/")}
else if(s.indexOf("/s220/")!=-1){s=s.replace("/s220/","/s"+avatarSize+"-c/")}
else if(s.indexOf("/s512-c/")!=-1&&s.indexOf("https:")!=0){s="https:"+s.replace("/s512-c/","/s"+avatarSize+"-c/")}
else if(s.indexOf("blogblog.com/img/b16-rounded.gif")!=-1){s="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivOn1zPrLdfzH9RxbZ0LibKAofuhuIgKzyq4IBWs7ZhLWelcGraOwPf0p8vyrW5yJXiLv-PJF52FINycEeYcX73huuOsLhk7gWFevNHFTMPOheQ0wc8d9vrdW3JoUFPG3CYx6oQx4CuUDl/"+avatarSize+"/md_blogger_logo.png"}
else if(s.indexOf("blogblog.com/img/openid16-rounded.gif")!=-1){s="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVipyG4x6YeRP3cdfePLqW326iB5jlCRCyJ1Mw0tMRmlwee9bs_7HBoZvZQD4DYQ5-Zq1MsuOl9MjV9uPBwFt9-jy-AEkaBP55PshWYl9ToJM6RFYyrnqbw0ob8vaJ9al5FEUL31BtEPd_/"+avatarSize+"/md_openid_logo.png"}
else if(s.indexOf("blogblog.com/img/blank.gif")!=-1){s=(defaultAvatar.indexOf("gravatar.com")!=-1)?(defaultAvatar+"&s="+avatarSize):defaultAvatar}
var r2=(r||"").replace(/<.*?>/ig,"");
l=u.content&&u.content.$t||"";
c=l.replace(/(<([^>]+)>)/ig,"");
if(c!==""&&c.length>characters){c=c.substring(0,characters)+"…"}
o.push("<li>");
if(showAvatar===true){a=(roundAvatar===true)?"avatarRound":"";o.push('<div class="trai avatarImage"><img class="'+a+'" src="'+s+'" alt="'+i+'" height="'+avatarSize+'" width="'+avatarSize+'"/></div>')}
o.push("<div class='trai noi-dung'><span class='name'>"+i+"</span>");
o.push('<a class="nxmoia" rel="nofollow" href="'+r2+'">'+c+"</a></div>");
o.push("<div style='clear: both'></div></li>");
shown++;
}
o.push("</ul>");
document.getElementById("nxmoi").innerHTML=o.join("");
}
var numComments=numComments||7,
avatarSize=avatarSize||30,
characters=characters||90,
defaultAvatar=defaultAvatar||"https://lh5.googleusercontent.com/-5YeC_6-32nw/UPb7SL-uGXI/AAAAAAAABWE/QJRpUV7G9bc/s30/personal.png",
showAvatar=(typeof showAvatar==="undefined")?true:showAvatar,
roundAvatar=(typeof roundAvatar==="undefined")?true:roundAvatar,
hideCredits=(typeof hideCredits==="undefined")?false:roundAvatar;
</script>[/pre]
ok rồi cảm ơn bạn nhiều nha
REPLY DELETE