mcpField
R
reddit

reddit

github.com/acedatacloudその他17204 回インストール1 日前に更新
リポジトリ

reddit について

reddit は、OAuth またはログイン Cookie で Reddit にアクセスするスキルです。投稿の読み取りや検索に加え、コミュニティルールの確認と書き込み検証を伴う投稿に対応します。

主な機能

  1. 01OAuth または Cookie 認証
  2. 02投稿とコメントの読み取り
  3. 03投稿検索とコミュニティルール確認
  4. 04確認後の投稿・返信
  5. 05書き込み検証と安全制限

活用シーン

  1. 01アカウントと最近の投稿の確認
  2. 02議論の検索とコミュニティルール確認
  3. 03確認を得て投稿や返信を公開
  4. 04コメントの投稿成否を検証

インストール

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

$npx skills add https://github.com/acedatacloud/skills --skill reddit

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

同梱ファイルscripts/reddit.pytests/test_reddit.py

詳細

Reddit — OAuth またはログイン Cookie によるアクセス

コネクターは、次の認証情報のいずれか1つだけを注入します。

  • REDDIT_COOKIES:ACE ブラウザー拡張機能で取得した JSON Cookie 配列です。 reddit_session が含まれ、アカウントへの完全なアクセス権を付与します。秘密情報です。絶対にエコー、表示、ログ記録、返却しないでください。
  • REDDIT_TOKEN:公式 OAuth ベアラートークン(identity read submit)です。

ヘルパーは、公式 OAuth が存在する場合は自動的に優先し、それ以外の場合は Cookie を使用します。 Reddit が要求する説明的な User-Agent を送信し、Cookie を reddit.com 以外に転送することはありません。

スクリプトの解決

Bash 呼び出し間でシェル変数は共有されません。ヘルパーを使用する前に、各 Bash コードブロック内で解決してください。

R="${SKILL_DIR:-}/scripts/reddit.py"; [ -f "$R" ] || R=$(find /tmp -maxdepth 8 -path '*/skills/*/reddit/scripts/reddit.py' -print -quit 2>/dev/null)
[ -f "$R" ] || { echo "reddit script not found (SKILL_DIR=$SKILL_DIR)" >&2; exit 1; }
python3 "$R" whoami

認証に失敗した場合は、https://studio.acedata.cloud/console/connectors で再接続するようユーザーに依頼してください。ブロックされたセッションや期限切れのセッションに対して、再試行を繰り返さないでください。

読み取り

R="${SKILL_DIR:-}/scripts/reddit.py"; [ -f "$R" ] || R=$(find /tmp -maxdepth 8 -path '*/skills/*/reddit/scripts/reddit.py' -print -quit 2>/dev/null)
[ -f "$R" ] || { echo "reddit script not found (SKILL_DIR=$SKILL_DIR)" >&2; exit 1; }
python3 "$R" whoami
python3 "$R" submissions --limit 10
python3 "$R" comments --limit 10

comment は自ら処理結果を検証します。Reddit から解析できない形式の応答が返された場合、何かを報告する前に comments でそのコメントを検索します。それでも書き込みに失敗した可能性が高いと示された場合は、再送信する前に自分で comments を使って再確認してください。

スレッドを検索してルールを確認する

search は各検索結果の fullname(t3_…)を返します。これは comment --parent に指定する値です。subreddit-info はサブレディットのルールを返します。そこに何かを書く前に必ず確認してください。

R="${SKILL_DIR:-}/scripts/reddit.py"; [ -f "$R" ] || R=$(find /tmp -maxdepth 8 -path '*/skills/*/reddit/scripts/reddit.py' -print -quit 2>/dev/null)
[ -f "$R" ] || { echo "reddit script not found (SKILL_DIR=$SKILL_DIR)" >&2; exit 1; }

python3 "$R" search --query "suno api" --time week --limit 10
python3 "$R" search --query "image generation api" --subreddit SideProject
python3 "$R" subreddit-info --subreddit SideProject

--sort のデフォルトは relevance です。Reddit の new ソートはキーワードの関連性を無視します。最近の投稿を返しますが、クエリの語句をまったく含まないこともよくあります。--sort new は特定のサブレディットの最近の動向を確認する場合にのみ使い、キーワードでスレッドを探すためには使わないでください。

スレッドに返信する — 確認が必要

--parent には、fullname(投稿の場合は t3_…、コメントの場合は t1_…)または reddit.com のパーマリンクを指定できます。**対象のスレッドと返信文の全文を提示し、明示的な確認を得てください。**末尾に --confirm を付けない場合はドライランになります。

R="${SKILL_DIR:-}/scripts/reddit.py"; [ -f "$R" ] || R=$(find /tmp -maxdepth 8 -path '*/skills/*/reddit/scripts/reddit.py' -print -quit 2>/dev/null)
[ -f "$R" ] || { echo "reddit script not found (SKILL_DIR=$SKILL_DIR)" >&2; exit 1; }

python3 "$R" comment --parent t3_1r9yrtn --body-file reply.md
python3 "$R" comment --parent t3_1r9yrtn --body-file reply.md --confirm

投稿を送信する — 確認が必要

投稿は公開されます。**必ずサブレディット、最終的なタイトル、最終的な本文/URLを提示し、明示的な確認を得てください。**末尾に --confirm を付けない場合、どちらの書き込みコマンドもドライランとなり、ネットワークリクエストは行われません。

R="${SKILL_DIR:-}/scripts/reddit.py"; [ -f "$R" ] || R=$(find /tmp -maxdepth 8 -path '*/skills/*/reddit/scripts/reddit.py' -print -quit 2>/dev/null)
[ -f "$R" ] || { echo "reddit script not found (SKILL_DIR=$SKILL_DIR)" >&2; exit 1; }

# Text post: use a file for long Markdown.
python3 "$R" submit-text --subreddit test --title "My title" --text-file post.md
python3 "$R" submit-text --subreddit test --title "My title" --text-file post.md --confirm

# Link post.
python3 "$R" submit-link --subreddit test --title "My title" --url "https://example.com"
python3 "$R" submit-link --subreddit test --title "My title" --url "https://example.com" --confirm

--confirm が有効になるのは、最後の引数として指定された場合のみです。タイトルや本文に --confirm という文字列が含まれていても、書き込みが実行されることはありません。

安全性と失敗時の対応

  • REDDIT_COOKIES、REDDIT_TOKEN、reddit_session、または modhash を絶対に表示しないでください。
  • 投票、プライベートメッセージの送信、BAN 回避、同一内容のクロスポストは行わないでください。このスキルでは、これらの操作は意図的に提供していません。
  • 同じ返信文を複数のスレッドに投稿しないでください。 Reddit は同一のコメントの繰り返しをスパムとみなし、コメントではなくアカウントに対して措置を行います。返信ごとに、対象のスレッドに合わせた文章を書いてください。
  • 各サブレディットのルールに従ってください。まず subreddit-info を実行してください。アカウントの利用期間、カルマ、フレアの要件により、投稿やコメントが拒否されることがあります。Reddit の生の認証済み応答を公開せずに、拒否されたことを報告してください。生の応答には、反映された認証情報が含まれる可能性があります。
  • 書き込みを自動的に再試行しないでください。Reddit が受け付けた後にタイムアウトすることがあり、再送信すると重複が生じるおそれがあります。
  • レート制限を守り、大量の投稿やコメントを一括送信しないでください。r/test は、意図的なエンドツーエンド検証に限って使用してください。
  • Cookie モードでは Reddit のファーストパーティ Web JSON エンドポイントを利用するため、Reddit がサイトを変更すると動作に差異が生じることがあります。予期しない HTML やルートのエラーは、別の非公開エンドポイントを推測して試すのではなく、上流側の仕様変更として報告してください。

自己宣伝 — 宣伝を行う前にお読みください

Reddit は個々のリンクではなく、宣伝のパターンを理由にアカウントを停止します。 ユーザーの目的が自分の製品の宣伝である場合:

  • まず質問に答えてください。 製品へのリンクを削除しても、それだけで役立つ返信にしてください。そうでなければ、送信しないでください。
  • 関係性を開示してください(「私は X を開発しています」)。開示のない宣伝は、アカウント停止につながる最短ルートです。
  • リンクは最大 1 つまで、末尾にのみ記載し、投稿タイトルには決して含めないでください。
  • 手当たり次第に返信しないでください。 本当に関連性の高いスレッドを少数選ぶほうが、投稿数を増やすより効果的です。スパム検出がまさに注目するのは投稿数です。
  • サブレディットに専用の自己宣伝/「Showoff」スレッドがある場合は、そこで投稿してください。認められている投稿先です。
  • カルマの少ないアカウントや新しいアカウントの投稿は、ほとんどのアクティブなサブレディットで AutoModerator によって自動削除されます。whoami でカルマを確認し、投稿が通知なくフィルタリングされてアカウントを無駄にする前に、ユーザーに警告してください。

出力を記録する

投稿またはコメントの公開に成功し、実際に表示される結果の URL を取得したら、組み込みの publish_artifact ツールを 1 回呼び出して、ユーザーが My Outputs でこの成果物を追跡できるようにしてください。

publish_artifact(kind="message", channel="reddit", title="<title>", url="<the REAL returned URL>", status="delivered")

実際に返された URL を使用してください。決して捏造しないでください。公開された項目ごとに 1 回だけ、配信が確認された後に呼び出してください。公開に失敗した場合は、呼び出しを省略するか、status="failed" を使用してください。 _shared/artifacts.md を参照してください。

コメント