Ultroid: post #99 — TG.ME

🆕 Updates

A maintenance-focused update fixing several long-standing bugs that were causing plugins to silently fail — plus a couple of small feature additions.

🐛 Fixed
• PM Permit — completely broken: toggling it on after boot did nothing, media-only messages crashed the filter, and deleted/anonymous senders threw errors that silently killed the handler. All rewritten; .pmpermit on/off added.
• PDF Tools — plugin failed to load entirely on PyPDF2 3.0+
• Assistant /start — an unconditional import silently deregistered the entire /start handler and all its callbacks when pytz wasn't installed.
• Snips — .addsnip was stacking a duplicate message handler on every call.
• Startup/config crashes: update_envs() crashing with no .env file, detached-HEAD git branch detection (Docker/Heroku), LocalDB.keys() returning empty after cache reload, LOG_CHANNEL None-guards across error handlers.
• Misc: mutable default argument bug in the assistant callback, aiohttp ClientTimeout API fix, get_stored_file logic error, unquoted HTML in link buttons.

Added

• Redis keepalive — background updater to stop idle connections from dropping.
• .delayspam <count> <delay> / .stopspam — new plugin!
• Broadcast blacklist — .addblacklist / .remblacklist / .listblacklist, respected by both broadcast and forward.
• .kickall confirm — bulk-kick non-admin members.
• .stats now shows username + t.me link.

⚙️ Misc
• Dependency versions pinned (telethon, aiohttp, gitpython, requests, python-decouple, …).
• Workflow/copyright/formatting cleanup across the repo.

~ @TeamUltroid
🔥9❤3🆒2
July 19, 2026 1.4K 18 2