<details open>
<summary>Changes since v0.8.0-rc5</summary>
* Added `formatted()` helper method to get the `formatted_body` of a text message.
</details>
<details>
<summary>Changes since v0.7.14</summary>
* 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.
* Added `clean-rooms` bridge command (moved from mautrix-telegram).
* Added `discard-megolm-session` bridge command.
* 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 `TEXT` instead of `VARCHAR(255)` in all databases (28).
* Switched to using yarl and urllib 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`.
* Fixed potential db unique key conflicts when the membership state caches were updated from `get_joined_members`.
* Fixed database connection errors causing sync loops to stop completely.
* Fixed regex escaping in bridge registration generation.
* Fixed `EventType`s sometimes having `None` instead of `EventType.Class.UNKNOWN` as the type class.
</details>