Скилл reddit
Прямой доступ к Reddit API через OAuth2 без PRAW. Порт MCP-сервера
Arindam200/reddit-mcp на shell-скрипты
по образцу yandex-metrika / yandex-search-api.
Нужно зарегистрировать script-app на https://www.reddit.com/prefs/apps и
заполнить config/.env. Подробная инструкция: config/README.md.
Минимум для read-only:
Для write/me дополнительно:
1. Cache-first — токен, юзеры, сабреддиты, листинги кешируются по детерминированному ключу.
2. Context window hygiene — stdout ≤ 30 строк, полный JSON в cache/listings/<hash>.json.
3. Auth auto-detect — если в .env есть REDDIT_USERNAME+REDDIT_PASSWORD, скилл идёт в user mode (grant_type=password); иначе — app-only (grant_type=client_credentials).
4. Двойная защита write — два уровня:
- Без REDDIT_ENABLE_WRITE=1 в .env write-скрипты отказывают сразу с понятной ошибкой (никакого dry-run — это «ворота» уровня окружения).
- С REDDIT_ENABLE_WRITE=1, но без --confirm — dry-run: печатают что бы сделали, но не отправляют запрос.
- Только при REDDIT_ENABLE_WRITE=1 *и* --confirm команда реально идёт на Reddit.
5. Rate-limit от заголовков — читаем x-ratelimit-remaining, x-ratelimit-reset, Retry-After. На 429 один retry если ожидание ≤ 60s.
1. Проверь, что credentials настроены:
```bash
sh scripts/auth_check.sh
```
Должен вывести OK: app-only token works (или OK: user token works).
2. Если нужна write-операция:
- Убедись, что в .env есть REDDIT_USERNAME+REDDIT_PASSWORD+REDDIT_ENABLE_WRITE=1
(без REDDIT_ENABLE_WRITE=1 команда сразу падает с ошибкой — это намеренно)
- Сначала запусти команду без --confirm — увидишь dry-run
- Только после ревью пользователя — добавляй --confirm
3. Имя сабреддита/юзера можно передавать с префиксом или без: r/python ≡ python, u/spez ≡ spez.
| Script | Endpoint | Mode | Description |
|--------|----------|------|-------------|
| auth_check.sh | GET /r/all/new?limit=1 | any | Sanity-check токена |
| me.sh | GET /api/v1/me | user only | Личный профиль (карма, имя) |
| Script | Endpoint | Description |
|--------|----------|-------------|
| user_info.sh --username U | /user/{u}/about | Профиль юзера |
| user_posts.sh --username U | /user/{u}/submitted | Посты юзера |
| user_comments.sh --username U | /user/{u}/comments | Комментарии юзера |
| subreddit_info.sh --subreddit S | /r/{s}/about | Метаданные сабреддита |
| subreddit_stats.sh --subreddit S | /r/{s}/about + /about/rules + /about/moderators | Расширенные метрики + правила + модераторы |
| subreddit_popular.sh | /subreddits/popular | Популярные сабреддиты (Reddit «trending») |
| subreddit_top.sh --subreddit S | /r/{s}/top (+ /comments/{id} per-post при --include-comments) | Топ-посты сабреддита; опционально с комментариями к каждому |
| search.sh --query "..." | /search или /r/{s}/search | Поиск по Reddit (опц. --subreddit) |
| submission.sh --id I или --url U | /comments/{id} | Пост + топ-комментарии |
Общие read-флаги: --limit N, --no-cache, --time T (где применимо), --sort S (где применимо).
| Script | Endpoint | Description |
|--------|----------|-------------|
| post_create.sh --subreddit S --title T (--content C \| --url U) | POST /api/submit | Опубликовать пост |
| comment_reply.sh --parent-id ID --content C | POST /api/comment | Ответить на пост (t3_*) или комментарий (t1_*) |
| subreddit_subscribe.sh --subreddit S [--unsubscribe] | POST /api/subscribe | Подписка / отписка |
Все write-команды требуют --confirm *и* REDDIT_ENABLE_WRITE=1 в .env.
Поведение:
```
cache/
├── token.json # OAuth access token + expires_at
├── users/<username>.json # /user/{u}/about
├── subreddits/<sub>.json # /r/{sub}/about
├── subreddits/<sub>.rules.json
├── subreddits/<sub>.moderators.json
├── listings/<hash>.json # листинги (search, top, posts, comments, popular)
└── me.json # /api/v1/me
```
Поиск по кешу: grep -r "term" cache/ или rg "term" cache/.
```bash
sh scripts/user_info.sh --username spez
sh scripts/subreddit_top.sh --subreddit python --time week --limit 25
sh scripts/search.sh --query "machine learning" --subreddit learnprogramming \
--sort new --time month --limit 20
sh scripts/submission.sh \
--url "https://www.reddit.com/r/Python/comments/abc123/some_title/" \
--limit-comments 50
REDDIT_ENABLE_WRITE=1 sh scripts/comment_reply.sh \
--parent-id t3_abc123 --content "Looks great!"
REDDIT_ENABLE_WRITE=1 sh scripts/comment_reply.sh \
--parent-id t3_abc123 --content "Looks great!" --confirm
sh scripts/subreddit_top.sh --subreddit Python --time week --limit 5 \
--include-comments --comments-per-post 25
```
Reddit OAuth: ~60 req/min для app-only, ~600/10min для user-mode (зависит от истории аккаунта). Скилл читает Reddit-специфичные заголовки x-ratelimit-* и стандартный Retry-After. На 429 делает один retry если ожидание ≤ 60s, иначе fail с понятной ошибкой.
```bash
sh scripts/tests/run.sh
```
No-network, проверяют:
Оригинальный reddit-mcp использует PRAW + Python и зашит как MCP-сервер. Здесь — shell-скрипты, прямые curl-запросы, кеш в директории скилла. AI-driven анализ (engagement insights, optimal posting time) намеренно перенесён на сторону Claude — он сам интерпретирует JSON в cache/.
| Путь | Размер | SHA256 |
|---|---|---|
| .gitignore | 36 | e93c204639c07258... |
| SKILL.md | 9191 | a4e37fcf773b3d64... |
| config/README.md | 17742 | 29c72f8afba3c450... |
| scripts/auth_check.sh | 793 | d09f4d3493806987... |
| scripts/comment_reply.sh | 2061 | a80b30ed7d175fc4... |
Войдите, чтобы оставить комментарий.
Комментариев пока нет.