* Changed `Portal._send_message` to retry after 5 seconds (up to 5 attempts total by default) if server returns 502/504 error or the connection fails.
0.8.0
* Added support for cross-server double puppeting (thanks to [ShadowJonathan] in [26]). * Added support for receiving ephemeral events pushed directly ([MSC2409]). * Added `opt_prometheus` utility to add support for metrics without a hard dependency on the prometheus_client library. * Added `formatted()` helper method to get the `formatted_body` of a text message. * 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. * Added `discard-megolm-session` command. * Moved `set-pl` and `clean-rooms` commands from mautrix-telegram. * Switched to using yarl instead of manually concatenating base URL with path. * Switched to appservice login ([MSC2778]) instead of shared secret login for bridge bot login in the end-to-bridge encryption helper. * Switched to `TEXT` instead of `VARCHAR(255)` in all databases ([28]). * 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 `EventType`s sometimes having `None` instead of `EventType.Class.UNKNOWN` as the type class. * Fixed regex escaping in bridge registration generation.
* Wrapped union types in `NewType` to allow `setattr`. This fixes Python 3.6 and 3.9 compatibility.
0.7.13
* Extended session wait time when handling encrypted messages in bridges: it'll now wait for 5 seconds, then send an error, then wait for 10 more seconds. If the keys arrive in those 10 seconds, the message is bridged and the error is redacted, otherwise the error is edited.
0.7.11
* Lock olm sessions between encrypting and sending to make sure messages go out in the correct order.
0.7.10
* Fixed deserializing the `info` object in media msgtypes into dataclasses.