Welcome to Nostrum 0.10.0, codenamed "Orbital Insertion".
"Orbital Insertion" is a testament to our commitment to continuous improvement
and our vision of providing a robust and reliable Discord library for the Elixir
community. We extend our gratitude to all contributors and users who have
supported us on this journey. Your feedback and collaboration are invaluable.
Breaking Changes
- Message cache by @Th3-M4jor in #595
-
The introduction of the message cache changes the signature of the message update event callback.
Previously, as messages were not cached, the signature was
handle_event({:MESSAGE_UPDATE, new_msg, _ws_state})
, with these changes the signature is nowhandle_event({:MESSAGE_UPDATE, {old_msg, new_msg}, _ws_state})
, whereold_msg
may be null if the message is not present in the cache.If the message is present, the
old_msg
value will be the previous version of the message as found in cache. Nostrum will handle the updating of the cache such that further cache requests will fetch the new message. -
Note this is breaking EVEN IF you use a no-op cache.
-
New Features
- The aforementioned message cache is newly introduced in #595.
- By default, the cache is disabled (
Noop
) meaning no messages will be cached. - Optionally, you can use the pre-built Mnesia backed cache or write your own adapter. Read more in the related documentation
Nostrum.Cache.MessageCache
.
- By default, the cache is disabled (
- We support Discord's new
zstd-stream
compression version- This compression method produces considerably smaller payload sizes at the expense of slightly increased memory usage for lookup tables.
- See documentation here on how to enable the new compression method. It is not enabled by default as it requires additional dependencies and some compiled modules.
- Relevant PR: Support zstd-stream gateway compression by @jb3 in #598
- We have increased the amount of the API that we support, stickers and previously missing guild attributes have been added:
- Support all voice encryption modes by @BrandtHill in #599
- feat(shard): manually shard connect and reconnect by @tignear in #596
- See more in this documentation guide
Quality of Life
- Remove blob of zlib data from state machine errors by @jb3 in #583
- Add resume_gateway_url to Nostrum.Struct.Event.Ready by @jb3 in #588
- Refactor executable checks and add version check for non-forked youtube-dl by @BrandtHill in #594
- Add flag to disable HTTP 2 by @jb3 in #608
Fixes
- Fix the error caused by trying to cast a datetime to datetime by @jb3 in #582
- fix key error in ratelimiter by @Th3-M4jor in #606
- Handle case of non matching gun conn pids when receiving a gun_down message by @Th3-M4jor in #611
- Ensure user struct is casted properly before updating ets cache by @Th3-M4jor in #610
Documentation
- Cheatsheets
- add top n guilds to qlc cheatsheet by @Leastrio in #586
- Add voice cheat sheet and fix docs typos by @BrandtHill in #590
- Fix broken link in documentation by @RocketRace in #587
- Fix Doc Arg Mismatch: Rename "options" to "response" by @njwest in #589
- Docs update: manual sharding by @jb3 in #603
- Add since 0.10.0 tags to changes since 0.9.1 by @Th3-M4jor in #604
- Publish docs on Elixir 1.17 by @jchristgit in #609
Miscellaneous
- Reduce binary copies in salsa crypto by @BrandtHill in #602
- Remove Application.get_env call from Nostrum.Api.Base by @jchristgit in #593
- Add soviet propaganda by @jchristgit in #605
- Enable -Wunmatched_return in dialyzer by @jchristgit in #508
- Bump CI to OTP 27 by @jb3 in #601
New Contributors
- @RocketRace made their first contribution in #587
- @njwest made their first contribution in #589
- @tignear made their first contribution in #596
Full Changelog: v0.9.1...v0.10.0