mcpField
W
wjs-cleaning-spam

wjs-cleaning-spam

github.com/jianshuo生産性13777 回インストール今日更新
リポジトリ

wjs-cleaning-spam について

wjs-cleaning-spamは、王建硕のX投稿につく地域誘導スパム返信を、返信の非表示とアカウントのミュートで処理するスキルです。事前確認、人による境界ケースの確認、適用を分け、処理状態も記録します。

主な機能

  1. 01分類リストを出すドライラン
  2. 02境界ケースの人による確認
  3. 03返信の非表示とアカウントのミュート
  4. 04再実行用の処理状態記録

活用シーン

  1. 01投稿下の地域誘導返信の整理
  2. 02誤判定の可能性がある短文の確認
  3. 03失敗内容の確認と再実行

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/jianshuo/claude-skills --skill wjs-cleaning-spam

インストール後、Claude Code で/wjs-cleaning-spamを入力して読み込まれたか確認します。

同梱ファイルscripts/clean_spam.py

詳細

wjs-cleaning-spam

王建硕の投稿についた、同じ地域への誘導を目的とするスパム返信を整理します:返信を非表示にし、アカウントをミュートします。

基本方針

他人の投稿は削除できません。 X がスレッドの投稿者に提供している手段は 2 つだけです。返信の非表示(コメント欄から削除し、訪問者から見えなくする)とミュート(通知に表示されなくする)です。X はブロックのエンドポイントを API から削除しています(v2 は code 34 を返し、v1.1 はさらに高いアクセスレベルが必要です)。ブロックするにはウェブから手動で操作するしかありません。「スパムを削除する」とは、非表示 + ミュートのことであり、API でできる範囲の上限です。

まず dry-run を実行し、判定が微妙なものは人が確認してから apply します。 ヒューリスティックでは、人間のコメント(「机器人🤖」、「저지능🤪」)とスパムの亜種(「我在济源呀🌷」+ 不可視文字)を誤って分類することがあります。flagged はそのまま処理し、borderline は必ず Claude が 1 件ずつ確認します。

ワークフロー

# 1. dry-run:输出 flagged + borderline 两个名单(JSON)
python3 ~/.claude/skills/wjs-cleaning-spam/scripts/clean_spam.py

# 2. Claude 逐条审 borderline:引流号特征 = 名字带 💕🌸♥ 装饰 / 同城话术 /
#    文本夹隐形字符(U+034F 等)/ 纯 emoji。真人评论(哪怕是骂人)不动。
#    把 borderline 里确认是 spam 的 id 并入名单。

# 3. apply:隐藏 + 静音(默认只处理 flagged;审完 borderline 用 --ids 指定全集)
python3 ~/.claude/skills/wjs-cleaning-spam/scripts/clean_spam.py --apply
python3 ~/.claude/skills/wjs-cleaning-spam/scripts/clean_spam.py --apply --ids id1,id2,...

# 4. 撞 429 限流(hide 约 50 次/15 分钟)脚本会自动停 —— 15 分钟后重跑同一条命令,
#    state/cleaned.jsonl 记录了已处理的 id,自动跳过、续跑。

ユーザーには、非表示にした件数、失敗した件数(および理由)、ミュートしたアカウント数を報告します。ブロックにはウェブでの手動操作が必要であることも伝えます。

実際に遭遇した問題(2026-06-10)

問題実際の状況
raw クエリが 401 Unauthorizedクエリパラメーター内の : は URL エンコードする必要があります(to%3Ajianshuo)。認証の問題ではないため、oauth1/oauth2 を切り替えないでください
xurl block が code 34 を返すblock エンドポイントは X API から削除されています(v2/v1.1 のどちらも不可)。代わりに mute を使い、何度も試さないでください
hide が "Invalid Request" を返すその返信がある会話のルート投稿はユーザーのものではありません(ユーザーは他人のスレッドに参加しているだけです)。スレッドの投稿者だけが非表示にできます。hide-failed として記録し、アカウントはミュートしてください
hide が 429 を返すレート制限は約 50 回/15 分です。制限がリセットされたらスクリプトを再実行してください(状態ファイルにより冪等性が保たれます)
テキストだけのスパムがすり抜ける「我在济源呀」のような同じ地域への誘導文句は、不可視文字(U+034F/ゼロ幅文字)を使ってフィルターを回避します。スクリプトでは検出に対応済みです。新しい亜種が出たら、特徴を NAME_KW / INVISIBLE に追加してください
人間の返信を誤って処理する絵文字のヒューリスティックが人間の短いコメントを拾うことがあります。そのために borderline のリストがあるので、必ず人が確認してください

使用しない場合

  • スパムが 7 日を超えている場合:recent-search インターフェースで取得できるのは過去 7 日分のみです。それより古いものはウェブから手動で操作してください
  • ユーザーが自分の投稿を削除したい場合:直接 xurl delete POST_ID を実行してください
  • ユーザーが特定のアカウントをブロックしたい場合:API では対応できないため、ウェブから操作するよう伝えてください(アカウントのプロフィール → ⋯ → Block)

状態

state/cleaned.jsonl — 処理した返信を 1 行ずつ記録します(id / author / status)。再実行時は処理済みのものをスキップします。最初からやり直すには、このファイルを削除してください。

コメント