MeshCore Ninja Alpha
MeshCore Bot

MeshCore Bot · Releases

from GitHub · updated 2026-06-23

18 releases

  1. v0.9.3 # 24 days ago · 2026-05-31 00:34 UTC

    It was discovered that if the bot webhook was feeding a Discord channel via a webhook, sending messages to @everyone, @here, etc. would tag all users in the Discord. This is fixed.

    Full Changelog: https://github.com/agessaman/meshcore-bot/compare/v0.9.2...v0.9.3

  2. v0.9.2 # 1 month ago · 2026-05-17 21:44 UTC

    What's Changed

    Full Changelog: https://github.com/agessaman/meshcore-bot/compare/v0.9.1...v0.9.2

  3. v0.9.1 # 1 month ago · 2026-05-16 19:55 UTC

    Highlights

    This release has improvements to regions handling, fixes for a couple of deadlock issues in the scheduler that might cause the bot to become unresponsive, and bugfixes in various areas.

    • Regions flood scope end-to-end: per-service config, scheduled messages, webhook body override, and correct scope on keyword/RandomLine replies.
    • Scheduler overhaul: 5-field cron and @ presets (HHMM deprecated), optional per-job #scope, stagger for colliding jobs, better concurrency.
    • DARC MoWaS reliability: bit-identical retransmits with stable timestamps; ascending timestamps on multi-chunk sends.
    • Path & test commands: optional reply prefix, gated repeater naming by bytes/hop, customizable test/t templates with pipe filters.

    Features

    Scheduling

    • [Scheduled_Messages] supports cron (0 8 * * *), presets (@daily, @hourly, …); legacy HHMM still works with a warning. (Note: APScheduler Day of Week starts on Monday unlike Vixie cron, so Monday = 0.)
    • Per-job regional scope: channel:#scope:message (middle field must start with #).
    • Added optional scheduled_message_max_stagger_seconds to spread out jobs that fire at the same time; scheduled sends skip global rate_limit_seconds (channel and bot_tx_rate_limit still apply).

    Flood scope

    • CommandManager.resolve_channel_send_scope() with precedence: explicit arg → message.reply_scope → section flood_scope[Channels] outgoing_flood_scope_override.
    • Optional flood_scope on Weather, Earthquake, Webhook, DARC MoWaS, and related services; webhook JSON may include "flood_scope": "#scope".
    • Keyword and RandomLine channel replies use send_response so incoming regional scope is honored. #178

    Commands

    • Path: reply_prefix (first chunk only when split) allows you to add @[{sender}] or similar to first reply. minimum_path_bytes (2/3) defers DB name lookup on paths with single byte path hashes, this is useful to avoid returning inaccurate information in dense meshes with highly duplicated single-byte prefixes.
    • Test: [Test_Command] response_format overrides [Keywords] test; pipe filters (pathbytes_min, prefix_if_nonempty). This enables things like not returning values unless conditions are met. Example that only returns path distance if multibyte paths are used:
    response_format = ack @[{sender}]{phrase_part} | {path}{path_distance|pathbytes_min:2|prefix_if_nonempty: | Path Dist: } | F/L Dist: {firstlast_distance} | Rec: {timestamp}
    

    Packet capture / MQTT

    • Added global jwt_ttl_seconds and per-broker mqttN_jwt_ttl_seconds / mqttN_jwt_renewal_interval for token lifetime vs refresh cadence. This enables JWTs with a TTL shorter than 24 hours.

    DARC MoWaS

    • Retransmissions reuse the original timestamp for network deduplication; chunk sends get base + index second timestamps.

    Other

    • send_channel_message(..., timestamp=...) for bit-identical channel replays.
    • Service display names strip trailing underscores (e.g. foo_Servicefoo, not foo_).

    Fixes

    • DM routing: responses use sender_pubkey when available (avoids misrouting when display names collide). Thanks for raising this @Tigro14 in #180
    • Scheduler / feeds: fire-and-forget scheduled processing; feed send lock avoids coroutine pileup; per-feed last-send tracking.
    • Mesh graph: flush_needed flag reduces redundant flush calls and a deadlock risk.
    • Contact adverts: track_contact_advertisement returns structured success/duplicate status for clearer handler logic.
    • DARC MoWaS / webhook: chunk timestamp ordering; webhook scope resolution cleanup.

    Configuration notes

    Area Action
    Scheduled messages Prefer cron over HHMM; use channel:#scope:body for regional sends.
    MQTT brokers with short-lived tokens Set jwt_ttl_seconds and renewal interval below TTL per broker.
  4. v0.9.0 # 2 months ago · 2026-05-03 05:20 UTC

    v0.9.0 Release Notes

    v0.9.0 is a release focused on stability and enhancing and refining existing features. It adds features to the web dashboard, rewrites the scheduler on APScheduler for improved reliability, and introduces radio-health monitoring. It also adds versioned database migrations, multi-arch Docker images, .deb packaging, async guard rails, and several new commands. Python 3.9 is no longer supported; the minimum is now 3.10.

    Thanks to @KG7QIN for the work on adding tests and working on radio reliability.


    Web Viewer

    • Optional authentication for the admin dashboard
    • Updated live streams for packets, commands, messages, and logs.
    • Admin config editor lets operators view and edit config.ini from the browser, with automatic password redaction and CSRF protection.
    • Contact management, DB backup management, maintenance tools, and an API Explorer tab are all available from the viewer.
    • Zombie-radio and radio-offline banners surface hardware status on every page; channel-name validation and live update-feed controls added.
    • The viewer starts with an "initializing" banner during bot startup and polls for live status without blocking the bot.

    Radio Reliability

    • Zombie-radio detection periodically probes the radio with a health check; unresponsive radios trigger a configurable alert and banner.
    • Radio-offline fail state suppresses outbound sends until the radio reconnects, then resumes normally.
    • asyncio.wait_for guards wrap send_advert, disconnect_radio, and reboot_radio to prevent event-loop lockups.
    • A debounce guard prevents the packet-capture service from storm-restarting during radio reconnects.
    • Radio debug logging can be toggled from the web UI at runtime without a restart.

    Scheduler & Database

    • Scheduler rewritten on APScheduler; a new maintenance module handles housekeeping tasks independently.
    • Graceful shutdown and config reload are signal-driven (SIGTERM / SIGHUP).
    • Database layer migrated to aiosqlite with AsyncDBManager and versioned migrations; ALTER TABLE startup migrations run safely without data loss.
    • Background polling operations (feed polling, channel/radio ops) use fire-and-forget callbacks to avoid blocking the scheduler thread.

    Commands

    • !version reports the running bot version; !schedule lists scheduled messages and the current advert interval.
    • !path gains a geographic scoring toggle and corrected multibyte chart rendering.
    • Weather: high/low temperatures, MQTT weather source, Open-Meteo model selection, configurable default city, multi-day forecasts, and location fallback.
    • Airplane results are configurable via max_results.
    • Additional keyword-triggered auto-responses via the RandomLine matcher; a BSD fortune file ships as default data.

    Bridges & Integrations

    • Discord bridge now supports multiple webhooks per channel, configurable per channel key.
    • Discord and Telegram outbound helpers added for cross-service notification delivery.
    • Repeater discovery and collision alerts service with optional delivery to mesh or external notification services (Discord/Telegram).
    • Inbound webhook relay accepts external HTTP POST events with bearer-token authentication and forwards them to mesh channels.
    • MQTT packet publishing controls added with configurable path-length decoding.

    Security & Rate Limiting

    • SSRF hardening added to all outbound HTTP calls, including an explicit CGN-network check; an allow_local_smtp flag enables opt-in local SMTP relay.
    • Log-injection sanitization applied to all user-supplied log lines; a CI regression check guards against regressions.
    • CSRF protection added to the web viewer admin editor.
    • Per-channel rate limiting and tightened per-user cooldown defaults; thread-safe rate limiter with LRU SNR/RSSI caches.

    Packaging & Infrastructure

    • .deb packaging via scripts/build-deb.sh for systemd-based deployments.
    • Multi-ar …
  5. v0.8.3 # 3 months ago · 2026-03-12 03:57 UTC

    This release adds support for parsing multi-byte paths across the bot.

    • Adds a trace command (and its companion tracer, trace reciprocal) that enables the bot to perform traces.
    • Adds a new RandomLine matcher for file-based command responses. Thanks Ian!
    • Adds data-retention rules for all databases and purges old records periodically.
    • Added Earthquake notification service. Thanks davidkjackson54!
    • Adds a Bot → Telegram bridge that enables messages from one or more channels to be posted to Telegram
    • Adds a profanity and hate symbol filter to prevent bad actors on the mesh from getting your Discord banned.
    • Adds support for local service plugins in a separate directory for easy backups. Thanks for the suggestion and testing davidkjackson54
  6. v0.8.2.1 # 4 months ago · 2026-02-22 20:04 UTC

    Small bugfix release that fixes a configparser error for users using Python 3.13+

  7. v0.8.2 # 4 months ago · 2026-02-21 17:54 UTC
    • Added a version indicator to the bottom of the Web Viewer
    • Added ability to filter by packet type in Packet Capture Service.
    • Improved mesh graph efficiency, added documentation for how to configure mesh graph calculations (or disable it) on lightweight nodes like Raspberry Pi Zero 2s.
    • Simplify contact removal logic. Occasional errors will still occur until race condition in meshcore_py
    • Improvements to documentation.
  8. v0.8.1 # 4 months ago · 2026-02-18 18:01 UTC

    A couple little fixes.

    Fixed logic in multitest command to avoid having a subsequent request block both test requests. Fixed issue with per-user rate limit that prevented second message responses from commands from being sent.

  9. v0.8 # 4 months ago · 2026-02-17 00:50 UTC

    Release notes

    New commands & features

    • Aurora — New command for aurora/space weather (NOAA client).
    • Airplanes — Aircraft tracking command.
    • Reload — Admin command to reload configuration without restarting the bot.
    • Command prefix — Optional prefix for bot commands (e.g. !path).
    • Sub-commands & help — Commands can expose sub-commands and clearer usage/help; help respects channel restrictions and avoids truncation issues.
    • Polish — Polish translation added (with thanks to the contributor).

    Path & mesh

    • Path command — Graph-based path validation using observed mesh links; presets: balanced, geographic, graph. SNR integration, “prefix best location,” and improved multitest with per-user sessions and path tracking.
    • Mesh graph — New mesh graph logic and mesh view in the web viewer (connections, highlighting, sync).
    • Contacts (web) — Time filtering, path sorting, bulk delete, starred nodes, and automatic device name updates.

    Weather

    • WXSIM — Support for custom WXSIM weather sources in wx_command and international weather.
    • Global weather — ZIP code geocoding and companion location features.

    Configuration & behavior

    • Config validationvalidate_config.py and validation in modules/config_validation.py; standardized command sections (e.g. [Joke_Command] with enabled); legacy *_enabled still supported.
    • Rate limiting — Per-user rate limiting for bot responses.
    • Channel keyword filtering — Configurable channel filtering for keyword responses.
    • Banned users — Prefix (starts-with) matching for banned user entries.
    • Feed manager — Dedicated [Feed_Manager] section; optional RSS/API feeds.
    • Config file — UTF-8 support and quoted values for monitor channels.

    Web viewer

    • Mesh graph view, improved error handling and database path handling, favicons, realtime view.
    • Service health checks — Optional checks and restart logic for the viewer.

    Docker & deployment

    • Docker — Dockerfile, docker-compose.yml, and docker-setup.sh for device detection, paths, and serial handling. Docs in docs/DOCKER.md.
    • Install scriptinstall-service.sh supports Python venv and clearer echo formatting.
    • CI — GitHub Actions for Docker build, tests, and docs; dev branch supported.

    Under the hood

    • Command queuing for global cooldowns; escape sequence decoding for greetings and keyword responses; transmission and repeat tracking; unique advert packet tracking and leaderboard.
    • Tests — pytest suite (commands, config validation, rate limiter, mesh graph, path resolution, etc.).
    • Docs — MkDocs site and guides: getting started, configuration, path command config, upgrade, Docker, FAQ.
    • Website generatorgenerate_website.py with dynamic styling and sample generation.

    Upgrade

    • Existing configs remain valid. See docs/UPGRADE.md for optional migrations (e.g. [Joke_Command], [Feed_Manager], [Path_Command]) and the banned-users prefix-matching behavior.

    Contributions

    New Contributors

    Full Changelog: https://github.com/agessaman/meshcore-bot/compare/v0.7...v0.8

  10. v0.7 # 5 months ago · 2026-01-11 19:35 UTC

    Release Notes

    New Features

    • Service Plugin Architecture: Implemented service plugin system for background services that run alongside the bot
    • Packet Capture Service: Captures packets from MeshCore network and publishes to MQTT brokers for analyzer.letsmesh.net
    • Map Uploader Service: Uploads node adverts to map.meshcore.dev with signed data authentication
    • Weather Service: Scheduled weather forecasts, NOAA alert monitoring, and regional lightning detection via MQTT
    • Discord Bridge: New service plugin to post channel messages to Discord with message queuing and rate limiting for webhook posts
    • Command Enable/Disable: Individual commands can now be enabled/disabled via configuration
    • Sports Data Clients: Added ESPN and TheSportsDB API clients for sports command functionality
    • System Health Monitoring: New /api/system-health endpoint for system status reporting
    • Minimal Configuration: New config.ini.minimal-example for users who only need core testing commands
    • Announcements Command: New command for admin triggered announcements
    • Magic 8 Command: Added magic 8-ball command for fun responses (thanks @lincomatic)
    • Enhanced Packet Decoding: Web viewer packet stream now supports packet analysis using meshcore-decoder
    • Nix/NixOS Support: Added Nix flake infrastructure with NixOS module for declarative system-wide deployments (thanks @tbaumann)
    • Web Viewer NixOS Option: Added services.meshcore-bot.webviewer.enable option for NixOS deployments (thanks @tbaumann)

    Bug Fixes

    • Segfault Prevention: Fixed potential segfaults by deep copying event payloads in ChannelManager and service plugins
    • Path Decoding: Fixed path decoding logic to better handle single nodes and hex values
    • Weather Emoji Truncation: Improved weather string handling to prevent emoji truncation
    • Database Connections: Fixed database connection handling and timeout issues
    • Keyword Reporting: Fixed keyword reporting to web viewer
    • Error Handling: Improved error handling and logging across multiple modules

    Improvements

    • Python Packaging: Migrated to pyproject.toml with proper entry points (meshcore-bot, meshcore-viewer) (thanks @tbaumann)
    • Code Quality: Added type hints and docstrings across modules
    • Cooldown Management: Refactored to centralized cooldown tracking system in BaseCommand
    • Location Resolution: Improved location name resolution from database using public keys
    • Weather Data: Improved weather forecast formatting and data retrieval in international weather command
    • Async Handling: Improved asyncio event loop handling to prevent deadlocks
    • Internet Connectivity: Implemented thread-safe caching for internet connectivity status
    • MQTT Handling: Improved non-blocking MQTT connection handling in service plugins
    • Logging: Added rotating file handlers and improved error reporting
    • Web Viewer: Improved stability by logging stdout/stderr to files instead of PIPE
    • Database Management: Optimized database cleanup with smaller batch deletions to reduce lock contention
    • Message Processing: Improved message content processing by stripping trailing whitespace
    • Help Command: Added dynamic command list based on usage statistics

    Configuration Changes

    • Added --config parameter support for both main bot and web viewer
    • New service plugin configuration sections: [PacketCapture], [MapUploader], [Weather_Service], [Discord_Bridge]
    • Added db_path configuration options for web viewer
    • Updated JWT renewal interval to 24 hours
    • Added command-specific enable/disable options

    Dependencies

    • Added: urllib3>=2.0.0, paho-mqtt>=1.6.0, cryptography>=41.0.0, pynacl>=1.5.0
    • Updated Python dependencies across the board

    New Contributors

  11. v0.6.1 # 6 months ago · 2025-12-20 23:17 UTC
    • Improved security and enhanced warnings of insecure elements. Thanks @eddieoz!
    • Improved path guessing algorithm.
    • Added dark mode.
    • Improved service installation and added upgrade mode to update existing service integrations.
    • Improvements to WebViewer stats and mobile accessibility, introduced limited channel management tool
    • Improved sports command logic for game selection.
    • Added path length placeholder options for test command.
    • Improved reliability of NOAA weather reports.
  12. v0.6 # 7 months ago · 2025-12-03 04:12 UTC

    This version adds these new features:

    • calculation of packet hashes for deduplication of nodes
    • the addition of an automated greeter command with an onboarding period to avoid spamming existing active members
    • improved localization of bot commands
    • commands have a generic per-channel configuration, instead of requiring custom code to work outside of the standard channels, this allows per-command channels

    This version adds the following improvements:

    • the weather command now has better hourly updates
    • improvements to score extraction in the sports command
    • better installation scripts
    • WebViewer UI improvements
      • delete contacts from the contacts database
      • override the path guessing weighting for key infrastructure nodes
      • cleaned up dashboard to make stats more useful
    • improve multi-test command response format
  13. v0.5 # 7 months ago · 2025-11-22 03:39 UTC

    Added localization to all commands.

    Used machine translation of strings into German, British English, Spanish, French Canadian, Dutch, Portuguese and Brazilian Portuguese. Any assistance with native-speaker localization would be appreciated.

    Added wx tomorrow and wx #day commands.

    Implemented a globally accessible weather API using OpenMeteo, currently running as gwx. Command structure is the same as wx command.

    Added command overrides. If you want to make modifications to a command, you can duplicate the file into ./modules/commands/alternatives and they will override existing commands with the same name field. If you change name = "gwx" to name = "wx" the example global weather command will unload the standard wx command in favor of your replacement.

    Used path guessing logic to estimate path lengths in test messages. New placeholders are {path_distance} for the estimated total path traveled, and {firstlast_distance} for the distance between the first and last known repeater.

    Fixed an issue where we weren't initiating the packet_stream table for the WebViewer integration.

    Several bug fixes, and sadly probably several more bugs. This is a work in progress.

  14. v0.4 # 8 months ago · 2025-10-22 05:13 UTC

    This version does some internal clean-up on the databases. A new contact database will be populated when you launch this version for the first time.

    • Added processing of all adverts and discovery events. All contact data is stored information in database
    • Added repeater geolocation data in the prefix command
    • Added logic in the path command to try to deconflict prefixes in path based on distance and node advert age
    • Significantly speeds up channel loading during bot startup. Detects all channels now, regardless of empty slots.
    • Add web viewer with dashboard that runs in a separate process and provides stats, contact information and
    • Various code structure and import improvements to core bot and command modules to support integration
    • Add ACL support to restrict access to sensitive commands to DMs from known public keys
    • Updated example config.ini files—to use some of the new features, you will need to update your config.ini. The Web_Viewer, Path_Command, Prefix_Command, and Admin_ACL sections have been added, and are necessary for full functionality of the bot.
  15. v0.3 # 9 months ago · 2025-10-10 04:17 UTC
    • Added channels command to share common hashtag channels, configurable in config.ini
    • Added option to geolocate repeaters in output of the prefix command
    • Cleaned up config.ini.example to reflect recent changes
    • Revised path command to improve consistency of decoding and output.
    • Improved ZIP code handling for aqi command
    • Added responses for emoji greetings
    • Improved sports command to format soccer home/away properly
    • Added dice and roll commands for increased randomness
    • Improved plugin architecture so command configuration is handled in config.ini and commands code is held in individual files
  16. v0.2 # 10 months ago · 2025-09-08 02:55 UTC

    Enhanced DM Reliability with meshcore-2.1.6

    • NEW: Implemented send_msg_with_retry for Direct Messages using meshcore-2.1.6
    • NEW: Automatic ACK confirmation for all DM sends
    • NEW: Configurable retry parameters with intelligent fallback
    • NEW: Path optimization and flood mode fallback for failed deliveries
    • NEW: Enhanced DM logging with success/failure indicators

    Advanced Prefix Command System

    • NEW: prefix <XX> command to query repeater prefixes via API
    • NEW: prefix refresh subcommand to manually refresh API cache
    • NEW: prefix free command to list available (unused) prefixes
    • NEW: SQLite database fallback when API is unavailable
    • NEW: 1-hour in-memory caching for API responses
    • NEW: Dynamic API source detection in responses
    • NEW: Random selection of free prefixes for better distribution

    Command Matching Precision

    • FIXED: prefix command now only matches at the beginning of messages
    • FIXED: t_phrase command restricted to beginning of message (t or T )
    • FIXED: @ command no longer triggers on "at" in middle of messages
    • FIXED: repeater command restricted to DM-only and beginning of message
    • IMPROVED: All commands now use precise keyword matching
  17. v0.1.1 # 10 months ago · 2025-09-06 19:14 UTC

    Some additional cleanup to remove test files, etc.

  18. v0.1 # 10 months ago · 2025-09-06 19:05 UTC

    It wasn't a bot, then it was... forgive my hacking.