Skip to content

Releases: jschollenberger/Discord-Weather-Bot

v3.2.5

Choose a tag to compare

@jschollenberger jschollenberger released this 16 Sep 20:21
b8c57ba

Added

  • NWS Test / Exercise / System / Draft alerts are no longer forwarded — e.g. the periodic Tsunami Warning test that blasts the whole state. Only real alerts (CAP status = Actual) post, and they're dropped at the fetch source so no consumer (alerts, weekly count, morning briefing) ever sees them. Fails open: an alert with a missing/unknown status is still treated as actual, since suppressing a genuine warning is worse than forwarding a test.

Changed

  • Quieter logs during a Discord gateway outage. discord.py logs every reconnect attempt at ERROR with a full traceback; during an outage that's a wall of identical stacks that buries whether and when the bot recovered. Those transient reconnect records are now collapsed to a single WARNING line that keeps the cause (e.g. Attempting a reconnect in 716.24s [WSServerHandshakeError: 503]) and drops the stack trace. Real errors from anywhere else are untouched.

v3.2.4

Choose a tag to compare

@jschollenberger jschollenberger released this 16 Aug 15:02
3c35d74

Added

  • Build identity in the startup banner, /status footer, and startup log line. When running from source ahead of the latest release tag (or with uncommitted edits), these now show e.g. v3.2.4 (build v3.2.3-4-g129acde[-dirty]) so it's clear exactly which commit is running — not just the last release number. Derived from git describe --tags --always --dirty at startup; on an exact tagged release it collapses to the clean tag (no suffix), and if git isn't available (e.g. a zip download) it falls back to __version__ alone. __version__ remains the authoritative release number for the changelog, releases, and the HTTP User-Agent (which stay clean semver).

v3.2.3

Choose a tag to compare

@jschollenberger jschollenberger released this 16 Aug 15:02
129acde

Added

  • The startup banner now shows the morning-briefing schedule (Briefing : 06:00 ET, or disabled), alongside the existing Weekly line — so you can confirm at a glance whether the daily briefing is on, the same way you can for the weekly summary.

v3.2.2

Choose a tag to compare

@jschollenberger jschollenberger released this 16 Aug 15:02
be11609

Fixed

  • Logging no longer breaks (and floods the console with tracebacks) when the log file's handle is invalidated — e.g. the file lives on a network share or removable drive that reconnects, or the host sleeps and resumes. Previously a plain FileHandler would raise OSError (EINVAL) on every subsequent write, lose the record, and print a full traceback per record to the console. The file handler now transparently reopens the file and retries once on a write failure, so a transient blip resumes logging instead of silently dropping everything after it, and logging.raiseExceptions is disabled so an unrecoverable write drops the record quietly rather than dumping a stack trace. Credential redaction is unchanged. (Running the bot from local disk rather than a network share is still the more robust setup.)

v3.2.1

Choose a tag to compare

@jschollenberger jschollenberger released this 02 Aug 21:22
04c2e59

Changed

  • pin_conditions_message now defaults to false. Pinning makes Discord post a "pinned a message" system notice in the channel, and because the bot re-pins after every repost (conditions_repost_hours), that noise recurs. The conditions message is still found and edited in place by id, so pinning is no longer needed to keep it discoverable — enable pin_conditions_message: true if you still want it pinned. Both example configs set it to false.

v3.2.0

Choose a tag to compare

@jschollenberger jschollenberger released this 02 Aug 21:22
c9a85dc

Added

  • Morning briefing — an optional, compact, once-daily post to the conditions channel with the "shape of the day", laid out in three lines: the forecast (condition, rain chance, and wind); the day's range and sky clock (high/low, sunrise/sunset, and today's forecast AQI, with an Action Day flagged by pollutant); and the active-alert state on a fixed last line. It deliberately omits current conditions (feels-like/humidity/observed wind/sky) — the pinned conditions message covers "right now" — carries no buttons, posts silently (no ping/notification), and links its title to the NWS point forecast. Enable with briefing_enabled: true; time it with briefing_hour (ET, default 6). Requires discord.py ≥ 2.1 for the silent send.

v3.1.4

Choose a tag to compare

@jschollenberger jschollenberger released this 02 Aug 21:22
387865f

Changed

  • Log-quality tweaks. Exception log lines no longer leave a dangling : when the exception's message is empty (e.g. a bare TimeoutError) — a new _exc() helper renders those as just the type name. And a /conditions query for a station the PWS provider can't find now logs at WARNING instead of ERROR, since a bad user-supplied station is input rather than a system fault (a failing default station remains an ERROR).
  • CI: added a CodeQL config (.github/codeql/codeql-config.yml) that excludes the test suite from analysis and filters the clear-text-logging-sensitive-data query — a false positive here, since _RedactFilter scrubs every log record before any handler writes it (a mitigation CodeQL's dataflow can't trace). CodeQL still gates on all other queries.

v3.1.3

Choose a tag to compare

@jschollenberger jschollenberger released this 02 Aug 21:22
71a0054

Changed

  • CI hardening: enabled ruff's bugbear (B) lint rules (catches likely bugs such as mutable default arguments), added CodeQL security scanning (per-PR and weekly), and added Dependabot (monthly, grouped) for pip and GitHub Actions dependency updates.

v3.1.2

Choose a tag to compare

@jschollenberger jschollenberger released this 02 Aug 21:22
16edd2e

Fixed

  • A failed send of a new NWS alert (e.g. a transient Discord error) was recorded as if it had posted, so a later cycle could emit a phantom "CLEARED" for an alert nobody saw. A failed send is no longer recorded — the alert is simply retried on the next cycle.
  • _clamp_embed now enforces the 6000-character aggregate limit by trimming oversized field values (and dropping trailing fields as a last resort), not only the description, so an embed dominated by large fields can no longer 400 on send.

Changed

  • The /aqi embed shows your configured location_name in the title and moves the EPA/AirNow reporting-area name (e.g. "Southern Coastal") to the footer as reporting area: …, making it clear that name is AirNow's monitoring zone, not a bot setting.

v3.1.1

Choose a tag to compare

@jschollenberger jschollenberger released this 26 Jul 19:41
3d737c6

Fixed

  • The /conditions and /status PWSweather links used the wrong path (/station/mid/…); they now use /station/pws/<station-id>, matching pwsweather.com's station-page URLs.

Added

  • Optional pws_station_url config key to set the exact public page for the default station's /conditions and /status links, overriding the derived URL — for a station whose PWSweather page id differs from pws_station_id, or a page hosted elsewhere.