Skip to content

Releases: warioishere/matrix-lightning-tip-bot

v1.0.0

17 Apr 09:31

Choose a tag to compare

First stable release of the Matrix Lightning Tip Bot. The previous 0.9.x line has been promoted to 1.0 after a larger round of hardening, an SDK upgrade and a full command regression test against a production MAS-backed Matrix homeserver.

Highlights since v0.9.4

Cross-signing and session persistence

The bot now attaches a sqlite store to the matrix-sdk client and keeps its device id, access token and crypto state across container restarts. After the first login it bootstraps cross-signing and, importantly, self-signs its own device via Device::verify() so clients stop rendering its messages as "encrypted by an unverified device". Required a new --store-path config option and a volume mount for the crypto directory (see README).

matrix-sdk upgraded 0.12 → 0.16

Three sequential bumps committed separately to keep git bisect useful:

  • 0.12 → 0.13: trivial version bump, no source changes required.
  • 0.13 → 0.14: compiled through without source changes; ruma bumped 0.12 → 0.13.
  • 0.14 → 0.16: one source change — OriginalRoomMessageEvent became #[non_exhaustive], so the reply helper now uses OriginalSyncRoomMessageEvent::into_full_event(room_id) instead of field-by-field construction.

!tip works against modern clients again

Modern Matrix clients follow MSC2781 / Matrix 1.13 and no longer include the <mx-reply> HTML fallback when replying. The bot now follows m.relates_to.in_reply_to.event_id and fetches the original event via Room::event() to discover the tip target, with the old formatted-body parser kept as a silent fallback for legacy clients.

LNbits invoice decode

Modern LNbits returns both payment_request and bolt11 in the same response, which tripped our serde(alias = "bolt11") duplicate-field check. Dropped the alias so only payment_request is consumed. bolt11 is silently ignored. The invoice helper also now surfaces LNbits status + raw response body on any failure instead of returning an opaque reqwest error.

CoinGecko fiat conversion

CoinGecko no longer serves the default reqwest user-agent a usable JSON body, which made !fiat-to-sats and !sats-to-fiat always fail with "Missing conversion rate". The price request now sends an explicit user-agent identifying the bot and logs status + body on any failure.

Developer experience

  • Cargo.lock is tracked; all builds now use --locked for reproducible output.
  • The Dockerfile builds dependencies in a separate cached layer — changing only src/ no longer recompiles matrix-sdk every time.
  • Builder image bumped to rust:1.90.
  • Help output collapsed to a single, consistent format (always !command). Removed the old "Don't worry about the red Not verified warning" note now that cross-signing actually self-signs the device.

Breaking config change

--store-path=<dir> is now a required argument. The directory has to be writable and mounted into the container as a dedicated volume; the bot persists session.json, .passphrase and the sqlite crypto store there. See the README for the Docker setup.

Full commit list

648d158 Bump version to 1.0.0
b19d1e6 Remove unused TransferParams struct
4f9c3e5 Set explicit user-agent on CoinGecko price lookup
ff2c6b2 Merge pull request #55 from warioishere/fix/lnbits-invoice-decode
ce78da1 Drop bolt11 alias on BitInvoice.payment_request
dd2a1e7 Log lnbits /api/v1/payments raw body on decode/HTTP error
f94941b Merge pull request #54 from warioishere/fix/tip-reply-target
90805e5 Resolve tip reply target via in_reply_to instead of HTML fallback
61ba538 Merge pull request #53 from warioishere/feature/matrix-sdk-upgrade
a669d35 Bump matrix-sdk to 0.16.0
793e976 Bump matrix-sdk to 0.14.0
63d327d Bump matrix-sdk to 0.13.0
2f32699 Merge pull request #52 from warioishere/feature/cross-signing
482b152 Drop VERIFICATION_NOTE and collapse help prefix/note parameters
7db1783 Self-sign own device after cross-signing bootstrap
28eeebc Accept localpart-only matrix-username in bot_name lookup
24dda26 Track Cargo.lock and build with --locked for reproducibility
fed5ccd Cache dependency build layer separately from application sources
c636564 Accept localpart-only matrix username for cross-signing UIA
0067dd2 Bump builder image to rust:1.90 for time crate compatibility
93cb249 Persist matrix session and bootstrap cross-signing

v0.9.4

07 Nov 22:10
d50a77c

Choose a tag to compare

What's Changed

  • Display routing fee errors to users instead of generic error message by @warioishere in #51

Full Changelog: v0.9.3...v0.9.4

v0.9.3

17 Oct 13:51
2e76b40

Choose a tag to compare

  • introduce a structured PayError in the LNbits client so failed payments return rich error details instead of always succeeding
  • make the Matrix business logic surface LNbits payment failures to users and add an httpmock-based regression test

v0.9.2

06 Jul 06:36
995d0c6

Choose a tag to compare

  • use the async lnurl-rs client when sending to LNURL recipients and deduplicate lnurl parsing
  • Avoid panics when parsing formatted messages
  • Handle invalid invoice input gracefully
  • Guard against empty messages

v0.9.1

05 Jul 11:55
f216ff6

Choose a tag to compare

  • parse bot name from matrix_username rather than the homeserver url
  • Use structured command dispatch
  • Simplify room member lookup
  • Use pulldown-cmark for markdown conversion
  • Create reusable async status poller
  • if an arugment is missing, bot now replies with the arg that is missing instead of "unknown command"
  • remove unused dependencies
  • add a little cache for room-members to speed up replies on bigger rooms
  • bugfixing

v0.9.0

03 Jul 20:25
269fea5

Choose a tag to compare

Add Boltz submarine swaps support for onchain to offchain and offchain to onchain swaps with refund workflow for failed swaps.

v0.8.6

02 Jul 17:01
f04d665

Choose a tag to compare

show helptext for commands correctly

v0.8.5

30 Jun 22:25
79e70a6

Choose a tag to compare

In direct messages with the bot, the leading ! can be omitted for all commands.
Version bump to 0.8.5
Group Chats will continue using the ! prefix
Note about bot as a non-verified device

v0.8.1

25 Jun 09:24
28ad0c0

Choose a tag to compare

New functions include:

generate your own ln-address with the command !generate-ln-address (✅)
send info when created invoice has been paid (✅)
limit usage to specific matrix instances (✅)
Inform users about donated funds (✅)
integrate a fiat/rate conversion tool (✅)
send sats directly to a lightning address (✅)
list your transactions through the bot (✅)
show your ln-address again (✅)
link your wallet to Zeus Android or iOS App (✅)

Now fully compatible with LNBits 1.x.x