* **Breaking change** Removed Python 3.7 support.
* **Breaking change *(api)*** Removed `r0` from default path builders in order
to update to `v3` and per-endpoint versioning.
* The client API modules have been updated to specify v3 in the paths, other
direct usage of `Path`, `ClientPath` and `MediaPath` will have to be
updated manually. `UnstableClientPath` no longer exists and should be
replaced with `Path.unstable`.
* There's a temporary hacky backwards-compatibility layer which replaces /v3
with /r0 if the server doesn't advertise support for Matrix v1.1 or higher.
It can be activated by calling the `.versions()` method in `ClientAPI`.
The bridge module calls that method automatically.
* **Breaking change *(util.formatter)*** Removed lxml-based HTML parser.
* The parsed data format is still compatible with lxml, so it is possible to
use lxml with `MatrixParser` by setting `lxml.html.fromstring` as the
`read_html` method.
* **Breaking change *(crypto)*** Moved `TrustState`, `DeviceIdentity`,
`OlmEventKeys` and `DecryptedOlmEvent` dataclasses from `crypto.types`
into `types.crypto`.
* **Breaking change *(bridge)*** Made `User.get_puppet` abstract and added new
abstract `User.get_portal_with` and `Portal.get_dm_puppet` methods.
* Added a redundant `__all__` to various `__init__.py` files to appease pyright.
* *(api)* Reduced aiohttp memory usage when uploading large files by making
an in-memory async iterable instead of passing the bytes directly.
* *(bridge)* Removed legacy community utilities.
* *(bridge)* Added support for creating DM portals with minimal bridge-specific code.
* *(util.async_db)* Fixed counting number of db upgrades.
* *(util.async_db)* Added support for schema migrations that jump versions.
* *(util.async_db)* Added system for preventing using the same database for
multiple programs.
* To enable it, provide an unique program name as the `owner_name` parameter
in `Database.create`.
* Additionally, if `ignore_foreign_tables` is set to `True`, it will check
for tables of some known software like Synapse and Dendrite.
* The `bridge` module enables both options by default.
* *(util.db)* Module deprecated. The async_db module is recommended. However,
the SQLAlchemy helpers will remain until maubot has switched to asyncpg.
* *(util.magic)* Allowed `bytearray` as an input type for the `mimetype` method.
* *(crypto.attachments)* Added method to encrypt a `bytearray` in-place to
avoid unnecessarily duplicating data in memory.