* Added support for cross-server double puppeting (thanks to ShadowJonathan in 26).
* Added support for receiving ephemeral events pushed directly ([MSC2409](https://github.com/matrix-org/matrix-doc/pull/2409))
* Added `opt_prometheus` utility to add support for metrics without a hard dependency on the prometheus_client library.
* Bridge command system improvements (thanks to witchent in 29, 30 and 31)
* `CommandEvent`s now know which portal they were ran in. They also have a `main_intent` property that gets the portal's main intent or the bridge bot.
* `CommandEvent.reply()` will now use the portal's main intent if the bridge bot is not in the room.
* The `needs_auth` and `needs_admin` permissions are now included here instead of separately in each bridge.
* Moved `set-pl` command from mautrix-telegram.
* Switched to using yarl instead of manually concatenating base URL with path.
* Switched to appservice login ([MSC2778](https://github.com/matrix-org/matrix-doc/pull/2778)) instead of shared secret login for bridge bot login in the end-to-bridge encryption helper.
* Changed replies to use a custom `net.maunium.reply` relation type instead of `m.reference`.