NGワードで自動アク禁(open2ch対応)
by
ukuuku3853
10/14 [2025/10/14 21:34:51]
open2ch.net用 連投対策版
@@ -1,6 +1,5 @@
-
/*
-* @title NGワードで自動アク禁(改?)
+* @title NGワードで自動アク禁(open2ch対応)
* @description open2ch.net用 連投対策版
* @include http://*
* @license MIT License
@@ -75,6 +74,12 @@
function sendAkuCommand(postnum) {
if(lastdetectednum === postnum) return; // 重複実行防止
+ // 四字熟語リスト(悪行報い・浄化・退散系)
+ const idioms = [
+ "因果応報","悪霊退散","業報必至","破邪顕正","正邪明断",
+ "天罰覿面","自業自得","除災招福","報復無道","悪即滅善"
+ ];
+
$.ajax({
type: 'POST',
url: '/test/bbs.cgi',
@@ -86,7 +91,8 @@
}
});
lastdetectednum = postnum;
- console.log('%c!aku' + postnum, 'color:red;font-size:32px;font-weight:bold');
+ const randomIdiom = idioms[Math.floor(Math.random() * idioms.length)];
+ console.log('%c!aku' + postnum + '\n' + randomIdiom, 'color:red;font-size:32px;font-weight:bold');
}
console.log(`%cNGワード「${ngwords.join(', ')}」\nNGネーム「${ngnames.join(', ')}」\n行数制限「${nggyou}行」\n監視方法:MutationObserver(新規投稿のみ)`, "font-size:16px;");
/*
* @title NGワードで自動アク禁(open2ch対応)
* @description open2ch.net用 連投対策版
* @include http://*
* @license MIT License
*/
let ngwords = prompt('NGワード(,区切り)', '').split(',').map(w => w.trim()).filter(w => w);
let ngnames = prompt('NGネーム(,区切り)', '').split(',').map(w => w.trim()).filter(w => w);
let nggyou = Number(prompt('行数制限(1以下入れるとバグる)\nInfinityで無効','Infinity'));
let lastdetectednum = 0;
let checkedPosts = new Set(); // チェック済み投稿番号を記録
// MutationObserverで新規投稿の追加を監視
const observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
// 追加されたノードをチェック
mutation.addedNodes.forEach(function(node) {
if(node.nodeType === 1 && node.tagName === 'DL') { // DL要素のみ
checkPost($(node));
}
});
});
});
// 監視開始(.thread要素内の変更を監視)
const threadElement = document.querySelector('.thread');
if(threadElement) {
observer.observe(threadElement, {
childList: true,
subtree: false
});
}
function checkPost($post) {
let postnum = $post.attr('val');
// 既にチェック済みならスキップ
if(checkedPosts.has(postnum)) {
return;
}
checkedPosts.add(postnum);
let $dd = $post.find('>dd');
let $dt = $post.find('>dt');
let postText = $dd.text();
let nameText = $dt.find('.name').text();
// NGワードチェック
for(let word of ngwords) {
if(word && postText.includes(word)) {
sendAkuCommand(postnum);
return;
}
}
// NGネームチェック
for(let name of ngnames) {
if(name && nameText.includes(name)) {
sendAkuCommand(postnum);
return;
}
}
// 行数制限チェック
let lineCount = postText.split('\n').length - 1;
if(lineCount > nggyou) {
sendAkuCommand(postnum);
return;
}
}
function sendAkuCommand(postnum) {
if(lastdetectednum === postnum) return; // 重複実行防止
// 四字熟語リスト(悪行報い・浄化・退散系)
const idioms = [
"因果応報","悪霊退散","業報必至","破邪顕正","正邪明断",
"天罰覿面","自業自得","除災招福","報復無道","悪即滅善"
];
$.ajax({
type: 'POST',
url: '/test/bbs.cgi',
data: {
MESSAGE: '!aku' + postnum,
bbs: bbs,
key: bbskey,
submit: '書'
}
});
lastdetectednum = postnum;
const randomIdiom = idioms[Math.floor(Math.random() * idioms.length)];
console.log('%c!aku' + postnum + '\n' + randomIdiom, 'color:red;font-size:32px;font-weight:bold');
}
console.log(`%cNGワード「${ngwords.join(', ')}」\nNGネーム「${ngnames.join(', ')}」\n行数制限「${nggyou}行」\n監視方法:MutationObserver(新規投稿のみ)`, "font-size:16px;");
- Permalink
- このページへの個別リンクです。
- RAW
- 書かれたコードへの直接のリンクです。
- Packed
- 文字列が圧縮された書かれたコードへのリンクです。
- Userscript
- Greasemonkey 等で利用する場合の .user.js へのリンクです。
- Loader
- @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
- Metadata
- コード中にコメントで @xxx と書かれたメタデータの JSON です。