Initial scaffold: Discord subreddit-announcer bot
This commit is contained in:
commit
705c6ba9f7
8 changed files with 1715 additions and 0 deletions
30
CLAUDE.md
Normal file
30
CLAUDE.md
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
# Project: subreddit-announcer
|
||||
|
||||
A Discord bot that announces new Reddit posts. A long-running discord.py
|
||||
process polls each watched subreddit's `/new` on an interval and posts an embed
|
||||
to the mapped Discord channel for every previously-unseen submission. Reddit
|
||||
access is read-only via asyncpraw; state is a local SQLite DB. Subreddits are
|
||||
managed at runtime with slash commands.
|
||||
|
||||
## Working agreement
|
||||
|
||||
- This is a git repo with `origin` on Forgejo at `https://git.rdx4.com/megaproxy/subreddit-announcer.git` (private). HTTPS auth uses the token in `~/.git-credentials` — pushes are non-interactive.
|
||||
- Commit after each logical change with a one-line imperative message; `git push` after each commit (or at minimum before ending the session).
|
||||
- Read `memory.md` at session start. Update it before ending the session.
|
||||
- Never commit secrets — see `.gitignore` and the rules in `~/claude/CLAUDE.md`.
|
||||
|
||||
## Project-specific notes
|
||||
|
||||
- **Runtime:** Python ≥3.10, managed with `uv` (`pyproject.toml` + `uv.lock`).
|
||||
Deps: `discord.py`, `asyncpraw`. Run with `uv run bot.py`.
|
||||
- **Config:** environment variables (see `config.example.env`). Real secrets
|
||||
(`DISCORD_TOKEN`, `REDDIT_CLIENT_*`) live in `config.env`, which is gitignored.
|
||||
Load before running: `set -a; source config.env; set +a; uv run bot.py`.
|
||||
- **Data:** `announcer.db` (SQLite) is created on first run and gitignored.
|
||||
Tables: `watches` (subreddit→channel + `bootstrapped` flag) and `seen_posts`
|
||||
(dedup, pruned to 500/subreddit).
|
||||
- **Bootstrap behaviour:** a newly-watched subreddit is silently baselined —
|
||||
existing `/new` posts are marked seen, not announced. Only posts created after
|
||||
the watch starts are announced. Re-watching resets the flag.
|
||||
- **No privileged intents** — the bot only posts, never reads message content.
|
||||
- **No tests yet.** Syntax check: `uv run python -m py_compile bot.py`.
|
||||
Loading…
Add table
Add a link
Reference in a new issue