← Return to the index
§ man11 August 2021

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.