LichSoulsCom + LichBot -- changes made 2026-09-22

L

LichSouls

@ · September 22, 2026

Sign in to react

1. Soul-shop-ideas.md corrections - Fixed the "still open" note: Banshee and Nightwalker perks do work; both are enforced in the Discord bot repo, not this one (the doc previously implied they were unenforced anywhere). - Repriced the souls-purchasable stream redemptions (Flex Cam, Wardrobe Malfunction, Flashlight Blind, Go Shirtless, and their Black Market equivalents). They had been priced by matching the raw Twitch Spirit point count, which ignored that souls accrue far slower than Twitch channel points -- a few-second gag was costing more grind-hours than a week-long cosmetic. Repriced down to a frequent-buy range instead. 2. Plans folder cleanup - Verified against the actual codebase (not just the docs' own claims) and archived two fully-implemented plans into plans/archive/: remove-communities-hub-pages.md and stream-video-overlay-plan.md. 3. Souls economy integrity fix (PrestigeBot JS + LichSoulsCom) - Root cause found: Twitch watch-time earning (add_points) was creating a fresh, anonymous points row for any Twitch ID the moment someone watched, with no linked website account required. That was the entire fuel source for a souls-farming exploit: watch with N alt Twitch accounts, then link/unlink/relink each one in turn to merge its balance in instantly, over and over. - Fixed add_points to require an existing linked row, matching how Discord earning already worked -- no more anonymous rows can be created. - Found and fixed a second, related bug: unlinking Twitch never actually cleared the linked Twitch ID in the bot's MySQL table (only the website's own database), so relinking a different Twitch account afterward tripped a false "identity conflict" and silently failed to sync -- almost certainly the actual cause of the "souls not syncing, had to manually fix it" support tickets. Added an explicit unlink-clear path and made relinking properly overwrite the old value. - Added failure logging on both the link and unlink flows so a sync failure shows up in logs immediately instead of only being caught when a member complains. 4. Souls Shop: new purchasable rewards shipped - Flex Cam (90 souls), Wardrobe Malfunction (130), Flashlight Blind (60), and Go Shirtless (90/180/480 for 10-min/20-min/rest-of-stream) all fire the exact same bot-side effect a real Twitch channel-points redemption does (queue push to the streaming PC, Hue lighting, shirtless-timer stacking) -- reached through a new internal endpoint on the bot. Gated on the stream actually being live (checked on the site and re-checked on the bot, with an automatic refund if it goes offline in between) and the same per-item cooldown the real Twitch reward has. - Username Glow (400 souls, 7 days, requires linked Twitch) -- highlights that viewer's messages in the stream's combined chat overlay. Required building the actual glow rendering on the overlay page, which didn't exist before. - Letter from a Prestige Encounters Character (2,500 souls) and the Black Market Dice Set (3,500 souls, Demilich+) -- both collect the needed info at purchase (mailing address, or email + who the letter's from for non-USA) and create a new kind of support ticket. Built a full ticket flow for this: a database table, a purchase-time form, a ticket detail page, and a staff queue (in the Command Panel and its own page) to claim and mark requests fulfilled, with the buyer seeing status on their existing "My Tickets" page. - Updated soul-shop-ideas.md to mark all of the above as shipped, with pointers to the actual code, and fixed a pricing table that still had the old, pre-repricing numbers in it. 5. RS3 Bingo Card -- planned, then built end to end - Planned first: a written plan (plans/rs3-bingo-plan.md) covering the data model, how drops get reported, win detection, and the website side, with the win-condition/reset/reporting questions confirmed before building anything. - Built: a shared 5x5 card (24 boss-drop items + a free center), same spread for every player, personal progress tracked separately per player. Win condition rotates -- every 3rd round is a full blackout (every space marked), the other two rounds are any single line. - No new Discord command -- reports piggyback on the existing /submit-drop officer-approval flow. An approved drop that matches an open space on the player's board marks it automatically. - First player to complete the card gets an exclusive Discord role; the previous holder loses it. The board then redraws a fresh random 24 items and everyone's progress resets for the new round. Win/reset gets announced in a specific Discord channel with no @mentions, by design. - New website page (Undead Legion -> Bingo Card) shows the shared board and the signed-in player's personal progress; requires a linked Discord account to play, which the page enforces for free. - Deliberately not built yet (called out in the plan as a follow-up): the actual souls-shop "space filler" item and the pick-a-space UI. The bot side of it (marking one open space, once per player per round) is already built and ready for that to plug into. Verification done today: TypeScript typecheck, ESLint, and a full production build all passed clean on the website repo; every touched file in the bot repo passed a Node syntax check. No automated tests exist for either repo beyond that.