Skip to content

v0.9.1

Choose a tag to compare

@agessaman agessaman released this 16 May 19:55
· 7 commits to main since this release
2183254

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.
Service Plugins Add flood_scope = #region under the service plugin configuration or use [Channels] outgoing_flood_scope_override to set a global outgoing flood scope.
Path / test See config.ini.example for reply_prefix, minimum_path_bytes, and response_format.

Contributors

Thanks to @fmoessbauer for improvements to DARC MoWaS retransmits, channel timestamps, and service name parsing.