← 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.