Releases: warioishere/matrix-lightning-tip-bot
v1.0.0
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 —
OriginalRoomMessageEventbecame#[non_exhaustive], so the reply helper now usesOriginalSyncRoomMessageEvent::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.lockis tracked; all builds now use--lockedfor 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
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
- 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
- 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
- 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
Add Boltz submarine swaps support for onchain to offchain and offchain to onchain swaps with refund workflow for failed swaps.
v0.8.6
show helptext for commands correctly
v0.8.5
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
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