Commit Graph
211 Commits
Author SHA1 Message Date
esefandClaude Opus 5 810a9a6b12 blue_archive: refresh bundled roster (264 students)
Weekly discordbot-refresh timer output, committed from the server.
Adds Nagusa (Swimsuit); nothing removed.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-10-20 13:16:57 +03:00
esefandClaude Opus 5 93e22a8364 statchannel: ignore steam's bogus zero player counts
Steam's GetNumberOfCurrentPlayers occasionally answers 200 with
player_count: 0 for a valid appid. Both Strinova stat channels were
renamed to "0" on the same 09:48 tick on 2026-10-20 (the only zero in
~300 renames over 3 days), and the name sat wrong until the next
10-minute tick.

Skip the rename on a non-positive count so the channel keeps its last
good value, and log it so the next one is visible. !strinova had the
same bug and would reply "0 players online right now".

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-10-20 13:12:57 +03:00
esefandClaude Opus 5.5 d514601651 firebase_website: drop the sysinfo sync to Firestore
The website bot status tab was replaced by the VEGA status page, so
nothing reads sysinfo/server anymore. get_db() stays for calendar and
bucketlist.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-10 15:23:41 +03:00
esefandClaude Opus 5.5 1b074d4b58 welcome: aurora welcome/goodbye cards
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 11:48:46 +03:00
esefandClaude Opus 5.5 5adcf3478e statchannel: member count channel
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 11:33:58 +03:00
esefandClaude Opus 5.5 c51b2ff3f3 README: twitter bridge is live again (esefrss)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-06 21:32:52 +03:00
esefandClaude Opus 5.5 2af2adc780 twitterbridge: decide new vs old by status id, not feed position
RSSHub's guid is the timeline entry's own id (a retweet's id), so ids follow
the order the account posted, while feed order and pubDate follow the
original tweet. A fresh retweet of an old post can sort to the bottom; it is
now posted, and only ids older than every known one are treated as deletion
slide-ins. !leaks sorts by id too.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-06 21:29:08 +03:00
esefandClaude Opus 5.5 f8b3501637 twitterbridge: one poller, per-webhook seen sets, fxtwitter links, outage DM
The RSSHub feed isn't strictly chronological, so 'post everything above the
last guid' could skip tweets. Now a single poller fans out to both webhooks,
each remembering posted guids (data/twitter_seen.json, atomic writes): new
tweets anywhere above the oldest known one are posted oldest-first, old tweets
sliding in after a deletion are ignored, failed posts retry next poll and
Discord 429s are honoured. Links go out as fxtwitter.com for real embeds.
The owner gets a DM after 90 min of broken feed and again on recovery.
Night polling is now 1-2 h.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-06 21:09:44 +03:00
esefandClaude Opus 5.5 234fbe88aa twitterbridge: jitter polls and slow down at night
The feed is fetched with a real X account's cookie, so avoid a fixed
24/7 cadence: random 4-8 min by day, 20-35 min 01:00-06:00 Istanbul.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-06 20:34:26 +03:00
esefandClaude Opus 5.5 2358679904 Re-enable twitter bridge via self-hosted RSSHub (esefrss)
Both forwarders (main + mao server) read TWITTER_RSS_URL, now pointed at
RSSHub on yuuka. Guard on_ready so reconnects don't start duplicate pollers.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-06 20:24:08 +03:00
esef 2691806453 holy shit esef still hasnt forgotten about this bot 2026-10-03 17:59:11 +03:00
esef 4fa7d5ca50 website patch 2026-09-23 16:27:26 +03:00
esef b1ff45794a gacha patch 2 2026-09-23 14:47:52 +03:00
esef 3d49c65de3 gacha patch 2026-09-23 14:37:14 +03:00
esef c510a1b63f Use bluearchive.wiki portraits for gacha cards 2026-09-15 16:35:04 +03:00
esef e4b5f0d849 Fix gacha portraits: switch to SchaleDB CDN (joexyz is dead) 2026-09-15 16:07:44 +03:00
esef 437fdccfbc Remove forwarded-from note and drop geo-blocked radio 2026-09-15 15:52:47 +03:00
esef 3649ed5f4d Fix Streaming Soundtracks radio stream URL 2026-09-15 15:46:15 +03:00
esef 3e6311714a Change OS from Arch Linux to Debian in README
Updated the description to reflect the change from Arch Linux to Debian and modified the usage context.
2026-09-15 15:33:40 +03:00
esef 45f4dfd653 Make roster refresh rebuild from SchaleDB base and fail-safe 2026-09-15 15:30:16 +03:00
esef c8e3ab57cc Add weekly Blue Archive roster auto-refresh 2026-09-15 15:19:17 +03:00
esef 23b8c3722a Bundle Blue Archive roster, enable ffmpeg cog, refresh README 2026-09-15 15:13:13 +03:00
esef c815ea4449 Add requirements.txt with runtime dependencies 2026-09-15 14:29:48 +03:00
esef 5faf305ea5 Delete TGBRIDGE.md 2026-09-09 11:37:46 +03:00
esef 89bf238b0e test #2 2026-09-09 11:26:27 +03:00
esef 0b5ba6511e better compression for GIFs 2026-09-09 10:19:09 +03:00
esefandClaude Opus 5 eac6dbda3a tgbridge: rework both directions — avatars, stickers, replies, edits
fixes that were dropping messages:
- d->tg sent parse_mode=Markdown with an unescaped body, so any message
  with a stray * _ ` or [ got a 400 from telegram and vanished. now html
  with proper escaping + a plain-text retry
- no allowed_mentions on webhook posts, so telegram could @everyone
- forwarder.start() ran from on_ready, which fires again on every gateway
  reconnect -> second poller on the same token -> 409s and dupes
- document.mime_type is nullable and was called directly
- sticker finally block hit UnboundLocalError when mkstemp raised
- ffmpeg timeouts leaked temp files and orphaned the process

stickers, per format instead of one blanket gif convert:
- static .webp now passes through (the gif convert crushed 228 alpha
  levels to 2 and made the file 4x bigger)
- video .webm -> animated webp, keeps 8-bit alpha, ~7x smaller than gif.
  needs -c:v libvpx-vp9 before -i or ffmpeg silently drops the alpha
- .tgs is gzipped lottie, ffmpeg exits 183 on it and we were uploading
  the raw file. renders via optional lottie lib, else thumbnail + emoji

added: telegram profile photos as webhook avatars (re-hosted in a private
channel, AVATAR_CACHE_CHANNEL_ID), reply threading both ways, edit sync
both ways, delete sync d->tg, album batching, voice/poll/location/contact/
dice/forward attribution, utf-16-safe entity conversion, mention and custom
emoji resolution, message splitting instead of truncation, shared aiohttp
session with 429 backoff, route discovery from env, !bridge status

main.py just loads the extension now; routes come from credentials.env

Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01RXrxDFpyq3VjvxWGuW3CZe
2026-09-07 12:19:18 +03:00
esef f6ba74394f new ai 2026-08-16 01:47:06 +03:00
esef 2ce4a2a263 yems 2026-08-16 01:19:11 +03:00
esef d405b23f04 fix: _cache_ready.set() in finally so commands dont hang on banner fetch failure 2026-08-03 20:47:13 +03:00
esef 23258f0c4b fuck 2026-08-03 20:29:42 +03:00
esef 3ef57f85fe gacha_renderer: font caching, threaded bg/png, spark_target; gacha: file i/o out of lock; paths from pkg root 2026-08-03 20:08:27 +03:00
esef 30efb9105f rollback checkpoint: hardened gacha, disabled ffmpeg, deleted rio, async db 2026-08-03 20:05:45 +03:00
esef 05c0599d1c drop gensokyo api poller, use standard icy metadata instead 2026-07-25 13:26:09 +03:00
esef b1e06a4cec Update timestamp command to use '!time' 2026-07-25 13:17:28 +03:00
esef 66f9eb774c add bucketlist access control, drop credential hashing, gitignore radio_check 2026-07-25 13:10:00 +03:00
esef d1536666f7 radio: add Gensokyo Radio API poller for rich now-playing embeds 2026-07-25 12:57:39 +03:00
esef 3d2d19b0b7 radio: update The Jazz Groove URL (migrated to radiomast.io), add to ICY supported list 2026-07-25 12:39:02 +03:00
esef 82d07eac3d remove dead country_autocomplete function from tz_data 2026-07-23 23:47:23 +03:00
esef b51967dc9b fix timestamp_friends: ignore ordinal suffixes (st/nd/rd/th) in bare-hour regex 2026-07-23 23:45:04 +03:00
esef c485c4f6bf shortenecd ocmmmnand 2026-07-23 23:38:40 +03:00
esef 89d7f4289f "/" prefix bad "!" prefix good 2026-07-23 21:49:14 +03:00
esef 7c2fd2a1ac clean up firebase_website: offload cpu_percent to thread, cache fastfetch, fix regex, drop processes 2026-07-22 22:21:23 +03:00
esef ab3265667c remove dead _all_formats helper, fix docstring 2026-07-22 19:44:32 +03:00
esef 4bb4fec2c5 gitignore: add _get_id.py and AGENTS.md, untrack AGENTS.md 2026-07-22 19:28:04 +03:00
esef 09f69e1c83 simplify /timestamp to single Long Date+Time output, fix timestamp_friends HAS_DATEPARSER NameError 2026-07-22 18:26:03 +03:00
esef bf4ea13d4b bucketlist feature added 2026-07-20 23:16:25 +03:00
esef 14926aa77b Merge branch 'main' of https://github.com/esefxdz/discordbot 2026-07-20 22:22:56 +03:00
esef 16cef19077 trigger removal: no longer needed 2026-07-20 22:22:39 +03:00
esef bce4d268a5 Remove 'archive' extension from bot loading
Removed loading of the 'archive' extension from the bot.
2026-07-20 22:19:43 +03:00