Automated Features
The bot runs several background processes that automatically detect, process, and respond to content shared in Signal chats. These features work without explicit commands - they trigger automatically when relevant content is detected.
Per-Room Controls
Section titled “Per-Room Controls”All automated features can be enabled/disabled per room using !room commands:
!room # View all current settings!room <feature> on/off # Toggle a specific feature| Feature | Command | Default | Description |
|---|---|---|---|
| Auto-Scan | !room autoscan on/off | ON | Virus scan & archive attachments |
| News Summarizer | !room news on/off | ON | Auto-post news articles to forum |
| Tracker Removal | !room tracker on/off | ON | Strip tracking params from URLs |
| Meme Reactions | !room memereact on/off | ON | Auto-respond to trigger words |
| Bot Master Switch | !room bot on/off | ON | Disable ALL bot features |
Auto-Scan & File Archiving
Section titled “Auto-Scan & File Archiving”When files are shared in a chat, the bot automatically:
- Virus Scans using ClamAV antivirus
- Archives clean files to MinIO S3 storage
- Reports results with file links
Supported File Types
Section titled “Supported File Types”Scanned & Archived:
- Documents: PDF, DOC, DOCX, XLS, XLSX, PPT, PPTX
- Text: TXT, MD, CSV, JSON, XML
- Archives: ZIP, RAR, 7Z, TAR, GZ
Skipped (not scanned):
- Images: JPG, PNG, GIF, WEBP (handled by Signal)
- Videos: MP4, MOV, AVI (too large)
- Audio: MP3, WAV, OGG
Example Output
Section titled “Example Output”🛡️ Auto-Scan Results
📄 report.pdf✅ Clean - No threats detected📦 Size: 2.5 MB📁 Archived: s3.irregular.chat/files/...
📄 data.xlsx✅ Clean - No threats detected📁 Archived: s3.irregular.chat/files/...Threat Detection
Section titled “Threat Detection”If a virus is detected:
- File is NOT archived
- Warning sent privately to uploader via DM
- No public alert (to avoid embarrassment)
Toggle Per-Room
Section titled “Toggle Per-Room”!room autoscan off # Disable auto-scanning for this room!room autoscan on # Re-enable auto-scanningNews Article Summarizer
Section titled “News Article Summarizer”When news URLs are shared, the bot automatically:
- Detects news domains (400+ news sites supported)
- Scrapes article content using multi-strategy extraction
- Generates AI summary using OpenAI
- Posts to forum (forum.irregularchat.com)
How It Works
Section titled “How It Works”User shares: https://arstechnica.com/article/...
Bot automatically:1. Extracts article title, content2. Generates 2-3 sentence AI summary3. Posts to forum with link back to Signal discussion4. Replies in chat with forum linkSupported News Sources
Section titled “Supported News Sources”The bot recognizes 400+ news domains including:
Major News: NYTimes, Washington Post, BBC, CNN, Reuters, AP News, NPR, Guardian
Tech News: Ars Technica, TechCrunch, The Verge, Wired, Engadget, ZDNet
Business: Bloomberg, Forbes, WSJ, CNBC, Business Insider
Defense/Military: Defense One, Breaking Defense, C4ISRNet, War on the Rocks, Defense News
Science: Nature, Science, Scientific American, MIT Technology Review
Excluded Domains
Section titled “Excluded Domains”The bot skips (doesn’t auto-post):
- Social media (Instagram, TikTok, YouTube, Twitter)
- Community sites (irregularpedia.org, irregularchat.com)
- File hosting (Dropbox, Google Drive, GitHub)
Toggle Per-Room
Section titled “Toggle Per-Room”!room news off # Disable news auto-posting for this room!room news on # Re-enable news auto-postingURL Tracker Removal
Section titled “URL Tracker Removal”When URLs are shared, the bot automatically strips tracking parameters and alerts on suspicious domains.
Tracking Parameters Removed
Section titled “Tracking Parameters Removed”Google Analytics:
utm_source,utm_medium,utm_campaign,utm_term,utm_contentgclid,gclsrc,dclid,gbraid,wbraid
Facebook/Meta:
fbclid,fb_action_ids,fb_ref,fb_sourcemibextid,sfnsn,_rdr
Instagram:
igsh,igshid,ig_rid
Other Platforms:
- LinkedIn:
trk,trkInfo,lipi,rcm - Twitter:
twclid,s,t - TikTok:
tt_medium,tt_content,_r - YouTube:
si,pp,feature
Example
Section titled “Example”User shares: https://instagram.com/p/ABC123/?igsh=xyz&utm_source=copy
Bot responds:🔗 Clean URL: https://instagram.com/p/ABC123/📊 Removed: igsh, utm_sourceSuspicious Domain Alerts
Section titled “Suspicious Domain Alerts”The bot alerts on URLs from high-risk TLDs:
| TLD | Country | Risk |
|---|---|---|
.ru, .su | Russia | High |
.cn, .com.cn | China | High |
.ir | Iran | High |
.kp | North Korea | High |
.tk, .ml, .ga | Free TLDs | Phishing |
Example Alert:
⚠️ Security Alert
URL from suspicious domain detected:🔗 example.ru
Country: RussiaRisk: High-risk TLD often associated with malicious content
Proceed with caution. Do not enter credentials.Toggle Per-Room
Section titled “Toggle Per-Room”!room tracker off # Disable tracker removal for this room!room tracker on # Re-enable tracker removalSocial Media Link Processing
Section titled “Social Media Link Processing”When social media URLs are shared, the bot:
- Cleans tracking params (igsh, fbclid, etc.)
- Identifies content type (Reel, Tweet, Video, etc.)
- Saves to database for later discovery via
!links
Supported Platforms
Section titled “Supported Platforms”- Instagram (Posts, Reels, Stories)
- TikTok (Videos)
- Twitter/X (Tweets, Threads)
- YouTube (Videos, Shorts, Live)
- Facebook (Posts, Videos, Reels)
- Reddit (Posts, Comments)
- LinkedIn (Posts, Articles)
Discovery Command
Section titled “Discovery Command”!links -social # View recent social media links!links -social -t 7d # Last 7 days!links -c -social # This group onlyGit Repository Detection
Section titled “Git Repository Detection”When GitHub/GitLab URLs are shared, the bot:
- Detects repository URLs
- Extracts repo metadata (name, description, stars)
- Generates AI summary of the project
- Saves to database for discovery
Example
Section titled “Example”User shares: https://github.com/anthropics/claude-code
Bot responds:📦 Repository: anthropics/claude-code⭐ Stars: 12.5k📝 AI Summary: CLI tool for interacting with Claude AI...
Saved to !links -gitDiscovery Command
Section titled “Discovery Command”!links -git # View shared git repositories!links -git -t 30d # Last 30 daysMeme Auto-Reactions
Section titled “Meme Auto-Reactions”The bot can automatically respond with memes when trigger words are detected.
How It Works
Section titled “How It Works”- Admin sets trigger words for a meme:
!meme trigger 42 potato spud - When someone says “potato” or “spud” in chat
- Bot has a chance to respond with meme #42
Probability & Cooldown
Section titled “Probability & Cooldown”- Not every trigger fires (probability-based)
- Cooldown prevents spam (can’t trigger same meme twice in short period)
- Only works in group chats
Toggle Per-Room
Section titled “Toggle Per-Room”!room memereact off # Disable auto meme reactions!room memereact on # Re-enable auto meme reactionsIdentity Fingerprint Polling (Safety Number Detection)
Section titled “Identity Fingerprint Polling (Safety Number Detection)”The bot polls signal-cli’s identity store every 5 minutes to detect safety number changes that are silently auto-trusted.
How It Works
Section titled “How It Works”- Calls
listIdentitiesvia JSON-RPC (returns ~2300+ identities with fingerprints) - Compares each fingerprint against the stored value in
known_identity_fingerprintstable - If a fingerprint changed AND the user is in a community group:
- Triggers the safety number verification flow
- Adds user to Entry/INDOC with 24h deadline
- Notifies admins in Actions chat
- Logs the change in
identity_change_log
Why This Exists
Section titled “Why This Exists”Signal-cli runs with --trust-new-identities always, which silently auto-trusts new identity keys without throwing UntrustedIdentityException. The exception-based detection missed many safety number changes. Polling closes this gap.
Monitoring
Section titled “Monitoring”# Check polling logsdocker logs signal-bot-selfhosted-signal-bot-1 2>&1 | grep IDENTITY_POLL
# Check detected changesdocker exec signal-bot-postgres psql -U signal_bot -d signal_bot \ -c "SELECT * FROM identity_change_log ORDER BY detected_at DESC LIMIT 5;"Configuration
Section titled “Configuration”- Interval: 5 minutes (hardcoded as
IDENTITY_POLL_INTERVAL) - First poll: 30 seconds after startup (seeds database without alerting)
- Scope: Only triggers for users who are members of at least one community group
- Cannot be disabled per-room (runs globally)
Feature Summary Table
Section titled “Feature Summary Table”| Feature | Trigger | Output | Toggle |
|---|---|---|---|
| Auto-Scan | File attachment | Virus report + archive link | !room autoscan |
| News Summarizer | News URL shared | Forum post + AI summary | !room news |
| Tracker Removal | Any URL with tracking | Clean URL reply | !room tracker |
| Suspicious Domain | High-risk TLD | Security alert | Always on |
| Social Media | Social URL shared | Clean URL + saved | !room tracker |
| Git Repo | GitHub/GitLab URL | AI summary + saved | Always on |
| Meme Reactions | Trigger words | Meme GIF | !room memereact |
| Identity Polling | Every 5 min | Safety number flow | Always on |
Configuration
Section titled “Configuration”These environment variables control automated features:
# Forum postingDISCOURSE_URL=https://forum.irregularchat.comDISCOURSE_API_KEY=xxxDISCOURSE_API_USERNAME=botDISCOURSE_CATEGORY_ID=5
# File archivingMINIO_ENDPOINT=http://minio:9000MINIO_ACCESS_KEY=xxxMINIO_SECRET_KEY=xxxMINIO_BUCKET=irregularchatMINIO_PUBLIC_URL=https://s3.irregular.chat
# AI summariesOPENAI_API_KEY=sk-xxx
# Community domains to skip (comma-separated)COMMUNITY_DOMAINS=irregularpedia.org,irregularchat.com,irregular.chatRelated Pages
Section titled “Related Pages”- File Management - Manual file commands
- Admin Commands - Room settings
- Core Commands - Basic bot usage