MeshCore Bot
Bot Stableagessaman bot
Extensible Python MeshCore service bot with keyword and plugin commands, weather and alert services, scheduling, rate limits, web administration and optional Discord, Telegram, MQTT, webhook and map integrations.
- Maintainer
- agessaman ↗
- Kind
- Bots
- Maturity
- Stable
- Languages
- Python JavaScript HTML
- Licensing
- Source available
- Latest version
- 1.0.0 · 2026-08-07
- Platforms
- Linux Docker NixOS Web
Capabilities
Interfaces
- ✓ Web
- ✓ TUI
- ✓ API
- ✓ Headless
Connections
- ✓ BLE
- ✓ Serial
- ✓ USB
- ✓ TCP
- ✓ MQTT
- ✓ HTTP
- ✓ WebSocket
Capabilities
- ✓ Messaging
- ✓ Contacts
- ✓ Channels
- ✓ Remote administration
- ✓ Monitoring
- ✓ Telemetry
- ✓ Packet analysis
- ✓ Automation
- ✓ Notifications
- ✓ Bridging
Node role
- ✓ Companion
- ✓ Repeater
Install
Releases
from GitHub · updated 2026-08-07v1.0.0 # Latest 9 hours ago · 2026-08-07 21:07 UTC
v1.0.0 marks the first stable release. Major highlights include zero-hop neighbor discovery, a rebuilt snapshot-backed web-viewer dashboard, improved transport recovery, location and rain features, World Cup support, safer feed and outbound HTTP handling, command-prefix enhancements, and significant performance and security work on the web-viewer.
The configuration format, command syntax, service layout, and web-viewer API are now considered stable; breaking changes to these will only occur with a major version bump.
Added
- Zero-hop neighbor discovery in the packet capture service, ported from
meshcore-packet-capture(itself a port of the observer firmware’s neighbors feature). At a configurable interval (12–336 h, default 24), the bot discovers which repeaters it hears directly and logs confirmed links with measured SNR.[PacketCapture] neighbors_enabledtoggles the feature (off by default); each enabled broker publishes the snapshot once this is on (mqttN_neighborsdefaults true, so set false to exclude a broker). The neighbors topic is formed by swapping the last segment of each broker’s packets topic (templated asmeshcore/{IATA}/{PUBLIC_KEY}/neighbors, matching firmware). If noiatais set, location-routed topics are skipped with warning, preventing publishing tomeshcore/XYZ/.... Snapshots are not retained, sinceheard_secs_agois relative. - Confirmed direct links now form the strongest evidence class in the database: both public keys (32 bytes each) plus a first-party RF measurement, as compared to path inference, which has only prefixes and no keys. Links are stored in
neighbor_links(adjacency, migration 22) andneighbor_observations(per-cycle history, pruned byneighbor_observations_retention_days, default 365). - Mesh graph integration: a Neighbors Only evidence mode on the mesh page and in
GET /api/mesh/edges?evidence=neighbors, deriving edges solely fromneighbor_links. These edges carry complete public keys and real SNR, and render as heavier lines; confirmed neighbors are annotated and treated as provenance-trusted when initializing the map. Ifneighbors_feed_mesh_graph(default on) is enabled, these are also written tomesh_connections. - The
neighborsDM command lets admins run discovery cycles on demand (the scheduled interval has a 12h floor, making testing impractical otherwise). The command acknowledges immediately and follows with a report DM after the listen window. Useful to add to[Admin_ACL] admin_commands, as each invocation spends airtime. - Optional region-scope collection (
neighbors_collect_scopes, off by default): each request can lock the bot’s radio command for up to ~25s. For repeaters lacking a stored path, the library temporarily rewrites their contact path to reach zero-hop. The default cycle uses a single radio command plus a passive listen window, keeping the bot responsive. - Automatic reconnects for serial, BLE, and TCP transport, including plugin re-subscription after reconnect.
- Minute-level rain/precipitation nowcasts, with optional proactive notifications.
- World Cup command and live event announcement service.
- Opt-in sender-language detection for greeting replies, using keyword-first detection; a
langdetectextra is available for longer inputs. - Centralized location/geocoding helpers, now shared across weather, AQI, path, and related commands.
- New web-viewer plugin settings, node settings, multi-byte evidence views, and paginated contacts APIs.
- Database restore utilities and hardened migrations for config, state, logs, and local plugins.
- Flexible command prefixes: support for single, multiple, or decorative prefixes; permissive/strict matching modes; and optional support for bare commands.
- Per-channel flood scope configuration for granular message routing control.
- Optional packet-capture payload decoding:
GRP_TXTchannel messages are decrypted andADVERTs are parsed into a nesteddecoded…
- Zero-hop neighbor discovery in the packet capture service, ported from
v0.9.3 # 2 months 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
v0.9.2 # 3 months ago · 2026-05-17 21:44 UTC
What's Changed
- Fix scope handling behavior and improve logging options for packet capture service. by @agessaman in https://github.com/agessaman/meshcore-bot/pull/185
Full Changelog: https://github.com/agessaman/meshcore-bot/compare/v0.9.1...v0.9.2
Project signals
- GitHub stars
- 181
- Forks
- 71
- Watchers
- 7
- Open issues
- 21
- Contributors
- 19
- Release downloads
- 0
- Latest downloads
- 0
- Source available
- Yes
- Releases available
- Yes
- Signed releases
- No
- CI builds
- Yes
- Documentation
- Yes
- The project warns operators to avoid duplicate bots and constrain response scope to protect mesh airtime.
- The repository does not currently declare an SPDX license.