Plus
A Python scheduler that watches feeds, dedupes releases, and posts threads as /u/AutoShonenpon.
How everything starts for me
Before this, "programming" to me meant the MATLAB scripts and embedded C I wrote for electrical engineering coursework — loops that solved a problem on the marker's rubric and then never ran again. Software was a tool for getting marks, not a thing you shipped.
The pivot was a Tom Scott video where he wires up the YouTube Data API to rewrite a video's own title with its live view count — the title reads itself back at you. A small, almost silly trick, but it flipped a switch: code could reach out, touch a real service, and leave a visible dent in the world. That was the first time a program of mine had a life outside a submission folder.
Then came the unglamorous half. The service didn't hand out a tidy JSON feed;
the releases came back as protobuf. In the pre-LLM era, as a complete beginner,
reading the wire format by hand, figuring out .proto schemas, learning why
anyone would pick binary over JSON in the first place — that single obstacle
pulled me down another rabbit hole of how the modern web actually talks to itself:
schemas, transport formats, auth flows, the quiet machinery underneath every app
I'd ever used without thinking about.
Overview
A long-running bot that posts MangaPlus chapter-discussion threads to /r/manga under /u/AutoShonenpon. Structurally inspired by r-anime/holo, reshaped around MangaPlus's protobuf-wrapped release feed instead of a public anime schedule.
What it does
- Polls MangaPlus on a
schedule-driven cadence and decodes the protobuf payloads into release records - Keeps per-series config in YAML (
ruamel.yaml) so adding or retiring a title is a pull request, not a code change - Persists state in SQLite so a crash, a restart, or a bad deploy cannot double-post a chapter
- Submits threads through PRAW with a title template per series, tagged for the subreddit's flair rules
- Exposes a small CLI —
update,edit,setup,-s <subreddit>— so the same binary handles backfill, ops, and day-to-day posting
Notes
The interesting constraint was idempotency across restarts. A chapter feed that re-emits the same release for hours is fine in isolation, but r/manga moderators do not appreciate duplicate threads. The bot treats the SQLite row as the source of truth: a release is considered "posted" only after the Reddit submission round-trips successfully and the row is updated in the same transaction. Any crash between those two points is safe — the next poll sees the feed entry, checks the DB, and moves on.
The other lesson was picking boring dependencies on purpose. PRAW, schedule,
ruamel.yaml, SQLite — nothing here is novel, and that is the point. A
community bot that runs unattended for years lives or dies by how few moving
parts it has the week a maintainer stops paying attention.