Skip to content

Releases: brainboxdotcc/DPP

v10.1.3 release

07 Jul 10:22
Compare
Choose a tag to compare

D++ 10.1.3 is here!

This update mainly smooths out edge cases for Windows bot, especially fixing a reconnect loop that could leave your bot stuck retrying forever after certain websocket disconnects. If you’ve ever seen that on Windows, this one’s for you.

One important note: GitHub no longer provides VS2019, so we can’t ship VS2019 prebuilt zips anymore. Only VS2022 builds are provided now. If you want to use D++ in VS2019, you need to build it yourself from source.

You’ll also find a new way to declare complex component groups, allowing you to design them on sites like discord.builders, and the usual round of small fixes to keep things running smooth.

The changelog is listed below:

Release Changelog

✨ New Features

  • Support for pre-generated component json, in the same way we support pre-generated embed json (#1427)
  • Implement event webhook fields in dpp::application class (#1425)
  • Add avatar_url override for webhook struct, resolves #1416 (#1419)

🐞 Bug Fixes

  • Socket readiness fixes for Windows, doesnt get stuck in reconnect loops any more (#1461)
  • Add thread safety primitives to internal shard list (#1436)
  • Breaking: voice connect doesnt break after a shard reconnect (#1435)
  • Json parsing issues with string arrays in dpp::application (#1426)
  • Fix tests build on Windows (#1414)
  • Coro: fix when_any when an awaitable is already finished before co_await (#1415)

♻️ Refactoring

  • Improve socket error messages on Windows
  • Make method and path in http_server_request protected instead of private (#1423)

📚 Documentation

  • SORT_BRIEF_DOCS=YES (#1421)

📜 Miscellaneous Changes

  • Persist and move the voice connections on shard reconnection. (#1449)
  • In case of failure to initialise discord_client, null the ptr
  • Execute on_stop callback of all timers on bot shutdown (#1424)
  • Require c++17 (#1404)

👷 Build/CI

  • Remove vs2019 from release and actions (#1459)
  • Only check changed files with npx cspell lint (#1437)
  • Update armv6 build to ubuntu 24.04, remove clang-10 (#1420)
  • Fix DPP_NO_CORO from DPP_CORO and explicitly set where we know it isn't supported (#1406)

Thank you for using D++!

v10.1.2 release

20 Mar 22:15
e97ae19
Compare
Choose a tag to compare

We are happy to announce the release of D++ 10.1.2! This release is primarily a bugfix release. For very small bots with little activity, you may find that reconnections stop working in 10.1.1. If this bug effects you, you should upgrade to 10.1.2. This version also has improvements to performance of SSL handshakes which you will notice at scale.

The changelog is listed below:

Release Changelog

✨ New Features

• Add TCP_NODELAY to connections to speed up SSL handshakes (#1403)

🐞 Bug Fixes

• Timers stop firing if the reactor has no sockets, only happens on bots that have little activity (#1401)

♻️ Refactoring

• Better error reporting for failed ssl contexts (#1402)

Thank you for using D++!

v10.1.1 release

08 Mar 14:55
3c3a546
Compare
Choose a tag to compare

Components V2 and Shardless Cluster Webhooks

Big things are coming to D++! With this update, Components v2 is here—just in time for Discord’s official launch soon. This upgrade makes interactive message components more powerful and flexible, giving you even more ways to engage users. But that’s not all—shardless clusters now have built-in webhook server support, letting D++ act as a lightweight web server. Instead of relying on WebSockets for interactions, you can now route them through outgoing webhooks, reducing gateway overhead and making your bot more efficient at scale. Whether you're building for speed, scalability, or just a smoother user experience, this update has you covered!

The changelog is listed below:

Release Changelog

✨ New Features

• Ssl context management (#1398)
• Shardless clusters: Webhook server support 🪝 (#1391)
• Components v2 (#1381)

🐞 Bug Fixes

• Fix build process to enable coro in vcpkg (#1399)
• Fix include dir. (#1389)
• Deny user ability to set certain headers (#1385)
• Fix redefinition of DPP_NO_CORO (#1386)
• We never remove fds that want deletion (#1383)
• Dont allow bot.start on a started cluster (#1384)
oauth2_install_params in current_application_get() could not be parsed (#1380)

📜 Miscellaneous Changes

• Change c++ version in cmake example from 17 to 20 (#1390)

👷 Build/CI

• Update actions to remove some use of 20.04 (#1387)

Thank you for using D++!

v10.1.0 release

15 Feb 14:51
2455845
Compare
Choose a tag to compare

D++ 10.1: Faster, Smarter, and Coroutine-Powered 🚀

D++ 10.1 is here, and it's bringing some serious upgrades to your Discord bot development experience. Coroutines are now the default, making asynchronous programming smoother and more modern. If you're not ready to dive into coroutines just yet, you can still disable them with -DDPP_NO_CORO=ON. The threading model has been completely overhauled with a reactor pattern and central thread pool, boosting performance across the board. There’s also a brand-new socket engine that intelligently picks the best available method (epoll, kqueue, or poll) based on your OS, improving efficiency for high-throughput bots.

Beyond the under-the-hood improvements, you’ll find new coroutine-powered helper functions for message handling (co_send, co_reply), expanded event data like user_id on reactions, and a new constructor for dpp::cluster for lightweight webhook-based applications. Tons of bugs have been squashed, from lingering memory leaks to connection retries, ensuring a more stable experience. If you're still using the old _sync functions, now’s the time to migrate—those are officially gone. Whether you’re running a small community bot or a high-scale application, this release makes D++ more powerful, efficient, and developer-friendly. Upgrade today and enjoy a faster, cleaner codebase! 🚀

The changelog is listed below:

Release Changelog

💣 Breaking Changes

  • Coroutines are now default enabled. To disable them and only use C++17 features, use -DDPP_NO_CORO=ON cmake flag (#1368)
  • Updated dpp::role comparison operators to now consider role IDs (#1333)
  • Change event_dispatch_t::from member variable to event_dispatch_t::from() method
  • New threading model, using the reactor pattern and a central thread pool.
  • Support for "socket engines", which are reactors containing support for epoll, kqueue or poll depending on what your OS supports.
  • dpp::timer now internally uses a std::priority_queue and is much more efficient especially with large (hundreds, thousands) numbers of active timers
  • dpp::sync and _sync function are removed. They have been marked deprecated for two years now. You should migrate to coroutines instead.

✨ New Features

  • Added user_id to message_reaction_add_t (#1376)
  • Add coroutine support functions to message_create_t (co_send, co_reply) (#1357)
  • Socket engine stats functions (#1353)
  • dpp::cluster now has a constructor with no parameters, which can be used when using the cluster purely for its reactor, e.g. for a purely webhook based application

🐞 Bug Fixes

  • Detect c++17 to define DPP_NO_CORO at the point of usage (#1378)
  • Fix C4245 warning on MSVC (#1367)
  • Make sure write events go out as soon as they can (#1354)
  • Large https request body could not be sent (#1352)
  • Thread safety for event objects (10.1 only) (#1350)
  • Coro timers ez pz lemon squeezy (#1351)
  • Make new constructor for cluster explicit
  • Docs: update documentation examples to use event.from() and event.owner
  • unique_ptr on g++-8 needs to know sizeof() z_stream up front, so we must use a raw ptr 😦
  • Immediately delete fds that want deletion after we are done firing their events rather than prune() loop fix: replace fds that already exist in the set. emplace would fail.
  • Don't store the event ptrs in the kevent/epoll udata, this can end up with dangling ptrs in events
  • Ensure heirarchy correctly calls the various inherited functions. todo: refactor this mess
  • Fix for runaway cpu usage due to connect() retry
  • Fix fd and memory leak in httpsclient
  • Fix reconnection of shards by creating new shards on reconnect, with a management timer to handle reconnections to stop reconnect storms
  • Https request queues still need a removals queue, it can be simplified but needs to still exist, there is a chicken-and-egg situation with the pointer for the request
  • Segfault when calling read on an invalid fd
  • Prevent concurrent on_disconnect()
  • Fix BUILD_VOICE_SUPPORT=OFF static build (#1338)
  • Fixes for poll on Windows
  • Fixes for cluster destructor on FreeBSD
  • Fix kqueue to actually work on FreeBSD
  • Add auto retry to failed connect, fixes failed unit tests
  • Fix http(s) requests with 0 content length timing out
  • Fix role edit/role delete unit tests
  • dl.dpp.dev was not downloading rpms any more (#1335)
  • Fix some httpsclient stuff
  • Fix namespace include in cmakelists for mlspp, backport of mls++ fix (#1331)
  • Two segmentation faults in cluster::guild_edit_member and cluster::tick_timers/cluster::shutdown (#1326)
  • FreeBSD port build issues (#1325)
  • Fix/sslclient-spinlock (#1339)
  • Fix/voice socketengine (#1337)

♻ Refactoring

  • Remove some deprecated and unused fields
  • Remove sync.h
  • Remove dpp::sync
  • Remove raw pointers from dns code
  • Make overridden sslclient stuff have override keyword, tidy up zlib stuff
  • Eliminate raw pointers from timer code
  • Magic numbers in discordclient
  • Remove thread pool from request queue, run it off dpp::timer instances instead
  • Remove nonblocking bool, as all sockets are always now nonblocking
  • Remove dpp::sync from unit tests, we no longer test it
  • Remove jthread, C++20 only

📚 Documentation

  • Fix codacy badge (#1375)
  • Missing comment blocks
  • New webhook example
  • Document various new functions
  • Redo thread model dot
  • Updated checking-permissions page and a view functions (#1336)
  • Document socket_engine_base

📜 Miscellaneous Changes

  • Tweaks and fixes to scripts and docs to support 10.1 (#1365)
  • Don't always run php for DPP_CORO (#1363)
  • Make event.from safe in threads
  • Fix; when putting events into the thread pool work queue, we must take a copy of the cluster ptr, as the client ptr may be invalid by the time the event is triggered (shards now get reallocated)
  • Split out zlib stuff to its own file
  • Move some things into constexpr constants
  • Tidy up casting in decompression code
  • Call on_disconnect in more situations so we can properly handle dead sockets
  • adjust version to 10.1
  • Catch exceptions on reconnect
  • Voice session reconnect
  • Tidy up shard startup
  • Audio works if user joins 2nd
  • Audio isn't being heard, dont know why yet
  • warning fixes
  • Improve threading
  • Properly mutex everything
  • we dont need to check for epoll removal failure, if it fails its already not in the set
  • Destroy thread for socket loop before trying to destroy anything that may be within it
  • Dont resize the ke_list
  • Mutexing of timer list
  • Safety check handlers
  • Sanity checks
  • Errors were missing part of the url
  • Some unit tests improvements
  • Always populate even on timeout
  • Dont let request_verb go out of scope
  • sleep() shouldnt be used, instead use std::this_thread::sleep_for(std::chrono::seconds(6))
  • terminating.notify_all is C++20
  • Unit test no longer runs forever
  • Make poll ctor not protected
  • Put websocket events into the work queue
  • no longer any need for out_queue -> goes into the main thread pool
  • https client/queues migration to socketengine
  • Socket engine basics

👷 Build/CI

  • OSX now only tests on clang15 (#1345)
  • Macos version will now always be 15
  • Removed pkg-config from brew as no longer needed
  • Force pkgconf unlink for brew

v10.0.35 release

03 Nov 00:09
ab0142b
Compare
Choose a tag to compare

We are happy to announce the release of D++ 10.0.35, which is mainly a bugfix release. It will fix a crash that may sometimes happen after registering a slash command. There are also a couple of fixes for compilation on void linux, and ARM NEON support for voice receive is now fixed.

Release Changelog

🐞 Bug Fixes

  • Missing ctime in sslclient.h breaks on void Linux (#1314)
  • Neon now compiles (#1313)
  • Commands should no longer crash when no context is defined (#1312)

📚 Documentation

  • Install with conan doc pages (#1070)
  • Conan badge (#1311)

📜 Miscellaneous Changes

  • Sync with version from conan-center. this here for reference only. do not install via this conanfile.py

Thank you for using D++!

v10.0.34 release

27 Oct 12:02
b5ae650
Compare
Choose a tag to compare

We are proud to announce the release of D++ 10.0.34! This new release of D++ adds support for user apps, which is a new Discord feature which allows you to add a bot to a user's profile (rather than a guild) so that commands listed by the bot can be ran anywhere (including in DMs and group DMs).

We have also added some supporting infrastructure to allow us to add to Conan Centre, so you will hopefully see D++ on Conan very soon!

The changelog is listed below:

Release Changelog

✨ New Features

  • Conan 2.x recipe (#1308)
  • Add support for user apps (#1304)
  • User app commands and test program
  • Add interaction_metadata for messages
  • Add authorizing_integration_owners
  • Add support for application_integration_types
  • Add interaction_context_type support

🐞 Bug Fixes

  • Fix weird comments
  • Deprecate old fields

♻️ Refactoring

  • Dont use strings and uint64_t in dave, use snowflake type (#1307)
  • Change to register_command

📚 Documentation

  • Add documentation page for creating user app commands! (#1305)

📜 Miscellaneous Changes

  • Fix/dave segfault (#1306)
  • User-installed commands (#1223)
  • Change docker schedule to monthly, not daily

Thank you for using D++!

v10.0.33 release

20 Oct 21:38
d70cef2
Compare
Choose a tag to compare

We are proud to announce the release of D++ 10.0.33! Barely a week after our last release, we have many more features to bring to you, and some fixes relating to DAVE E2EE. When users join a DAVE voice channel, the encryption will now remain as end-to-end and not downgrade to standard. The on_voice_ready event will also now always fire after a timeout when DAVE is enabled, even if there are no other users in the VC to build an MLS group with.

We have also added the approximate_user_install_count field to dpp::application and added cluster functions to fetch a users voice state via API calls (regardless of gateway, or cache).

Please note that this release officially deprecates _sync functions. They will still operate, but will emit a warning at compile time if used. Instead of sync functions, if you are still using them, you should consider migrating to coroutines instead. CircleCI is now also officially removed from our build process, as this had been in place before we had GitHub actions and is no longer relevant.

The changelog is listed below:

Release Changelog

✨ New Features

  • Added endpoints to fetch a user's voice state (#1294)
  • Added approximate_user_install_count field to application (#1293)
  • Added NOMINMAX to CMakeLists.txt (#1292)
  • Voice ready now fires even if there are no other users in the VC (#1289)

🐞 Bug Fixes

  • Fix broken static builds (#1290)
  • Fix broken vcpkg builds which were failing because they were trying to compile as static (#1287)
  • DAVE! client join/part re-derive client ratchets and privacy code (#1264)
  • Vcpkg is always built with voice (#1272)

♻️ Refactoring

  • Cleanup namespaces and unneeded includes (#1295)
  • Libdave camel massacre 🐪🔪 (#1285)
  • Low level socket tidyups and removal of punning (#1282)
  • Breaking: Deprecate sync calls (#1280)

📚 Documentation

  • Add docblock comments to all libdave class variables (#1286)
  • Update roadmap (#1279)
  • Extend Coroutine Documentation (#1288)

💎 Style Changes

  • Clang-format file, for discussion (#1277)

📜 Miscellaneous Changes

  • Delete .circleci directory

Thank you for using D++!

v10.0.32 release

12 Oct 14:05
a1a32d2
Compare
Choose a tag to compare

We are extremely happy to announce the release of D++ 10.0.32! This new release is (to our knowledge) the first released Discord library to feature Discord's new DAVE end-to-end encryption for voice channels.

Please note that DAVE is experimental at present, and can be enabled by passing true to a boolean parameter when connecting to a voice channel. Please report any bugs, and we strongly welcome PRs. Now is your time to get involved with D++ development!

We have also removed the dependency upon libsodium for voice support. Instead, we use OpenSSL primitives for the same features, allowing us to remove a huge dependency from the library.

This new release officially bumps the audio protocol to version 8, so this is required if you wish to continue using voice with D++ past November, as Discord are enforcing Voice protocol version 8 from this date onwards.

We also have added support for named slashcommand handlers, so routing of commands to different functions based on the name of the command can be done automatically for you by the library. Check out documentation on register_command and unregister_command for more information!

The changelog is listed below:

Release Changelog

✨ New Features

  • Discord DAVE Protocol (E2EE) for voice (#1258)
  • Message forwarding (#1247)

🐞 Bug Fixes

  • Crash in threads_get_public_archived (#1268)

♻ Refactoring

  • Remove unused debug variable (#1266)
  • Why you so salty? Entirely remove libsodium from D++ (#1265)
  • Deprecation: officially deprecate commandhandler (#1263)
  • Better registration with try_emplace

📚 Documentation

  • Prevent "The Windows 7 Incident" (#1267)
  • Remove coroutine/DPP_CORO experimental warnings (#1221)

📜 Miscellaneous Changes

  • Implementing named commands handlers for the cluster (#1262)
  • This cant be fatal while we are offering documents on deprecated stuff for SEO
  • Officially deprecate commandhandler
  • Fix embeds.cpp not required intent + add cout logger (#1250)

👷 Build/CI

  • More secure llvm19 install process (#1246)

Thank you for using D++!

v10.0.31 release

21 Sep 21:14
ce18453
Compare
Choose a tag to compare

We are happy to announce the release of D++ 10.0.31! This new version is a required upgrade if you use Discord Monetization, or voice/audio. Discord have changed the requirements for encryption of voice, so this new version adds support for XChaCha20 voice encryption via sodium, and also adds the new monetization API calls. These have been tested for quite some time in production bots and can be considered as stable and ready for general availability.

This fix also contains several new features such as support for application emojis, customisable HTTP timeout durations, and a new coroutines implementation which fixes some long standing UB and minor memory leaks if you were using coroutines. If your bot does use coroutines, this is a strongly recommended upgrade which will increase performance and stability for your bots.

The changelog is listed below:

Release Changelog

✨ New Features

  • Change encryption to AEAD XChaCha20 Poly1305 (#1239)
  • XChaCha20 voice encryption (#1242)
  • std::format support for dpp::snowflake (#1203)
  • Added support for application emojis (#1207)
  • Timeout is now 20 seconds. Users can now change the timeout length (#1208)
  • Added file size limit to avatars and banners (#1209)
  • Coro: coro 2.0 (#1196)
  • Banners can now be uploaded to bots (#1197)
  • Add XBPS docs (#1192)
  • Add request_timeout, a parameter as optional to cluster::request() which allows user to set http_client::timeout and add error message for request timeouts (#1186)
  • Added warnings for certain events that require an intent (#1169)
  • New premium upsell button style (#1175)
  • Add missing entitlement type enum values (#1171)
  • Added consuming an entitlement (#1170)
  • Add result_type member type to dpp::task (#1165)

🐞 Bug Fixes

  • Added missing include to awaitable.h (#1243)
  • Improve compatiblity with socket (#1229)
  • Fix requests fizzling if the response doesn't contain Content-Length (#1232)
  • Fix guild_member::get_avatar_url() (#1230) (#1231)
  • Incorrect comment (#1228)
  • Coro: fix awaitable/task move assignment, again
  • Coro: fix dpp::task's move assignment
  • Coro: fix unused alias warning
  • Coro: fix read-after-free in dpp::async
  • Coro: fix includes, improve NOMINMAX define
  • Qol: shut up soundboard events (#1202)
  • Fixed padding in tests
  • Add and to misc-enum.h
  • Test: fix ban unit tests to be dependent upon each other (#1200)
  • Removed max limit for avatars and banners
  • Banner blob now correctly throws for banner blob size. coro and sync calls updated
  • Unit tests are now built statically when BUILD_SHARED_LIBS is off (#1193)
  • Compilation on clang-19 (#1195)
  • Add packets_left count (#1194)
  • Fix leak of in_thread, fix read-after-free, fix race condition UB after cluster shutdown (#1187)
  • Add error message for request timeouts and add timed_out member variable to https_client to check for request timeouts

♻️ Refactoring

  • Readability changes to sslclient and wsclient (#1210)
  • Changed DPP_BUFSIZE to be uint16_t instead of uint32_t
  • Removed un-needed includes, more indentation corrections
  • Removed constexpr for http_version, moved send to std::string_view, removed spaces
  • Change get_gateway_bot to use coro when available
  • Remove Cmake special options to compile on clang-19
  • Coro: coro tidy up, add sync_wait

🚨 Testing

  • Test to_binary()

📚 Documentation

  • Change init to create (#1220)
  • Fix unnecessary include of fmt in mp3 example (#1218)
  • Create Gentoo installation tutorial (#1211)
  • Remove XBPS coroutine section (#1205)
  • Added a page for editing messages from a button click (#1163)
  • Altered minimum gcc version for Coro, fixed docs issues (#1173)
  • Added a missing ref (#1179)
  • Changed wording of token page (#1161)
  • set_allow_multiselect is now correctly documented
  • Added an example on how to edit an embed (#1128)

💎 Style Changes

  • Static and reinterpret casts

📜 Miscellaneous Changes

  • Adding fix to arm-neon bug. (#1226)
  • Adding Arm-Neon implementation. (#1225)
  • Introduced DPP_HAS_FORMAT definition
  • std::format support for dpp::snowflake
  • Add requires clause to await_transform to improve error messages when trying to co_await something that can't be
  • Coro test case to detect leaks
  • Coro: allow move-only types in dpp::async, de-duplicate void specializations where possible, document some more
  • Coro: add concept awaitable_type, move dpp::detail::promise::promise to dpp::basic_promise, document some more
  • Coro: remove long-deprecated dpp::job event handlers
  • Coro: add [[nodiscard]] to dpp::task, dpp::coroutine
  • Coro: use std::memory_order
  • Updated libsodium version for rpm packages to latest (#1190)
  • Use string_view for message object ctors + setters (#1178)
  • Big number implementation, for future use in permissions bitfields (#1176)
  • Mark interaction type 10 as depreciated
  • Add Missing SKU types
  • Update Docker image to Ubuntu 24.04 LTS (#1168)
  • QoL fix: Enhance the entitlement stuff with data from the actual api docs now there are some (#1166)
  • Poll conflicting with dpp::poll (#1152)
  • Updated autocomplete tutorial (#1151)

👷 Build/CI

  • Add clang-19-libc++ as manual install (#1245)
  • Fix mac xcode version (#1244)
  • Added clang16-18 jobs for Linux, added clang16 for OSX (#1206)
  • Fixed clang16 for OSX
  • Added clang16-18 runners for Linux, added clang16 for OSX
  • Added a clang++15 osx job, fixed clang++14 job. (#1204)
  • Adds support for g++13 and g++14 CI on Ubuntu 24.04 (#1201)
  • Allow runners to use mold, increased concurrency to 4 (#1198)
  • Codeql now uses -j4
  • Updated cmake commands for Linux to be more modern
  • Arm7hf no longer uses mold
  • Allow runners to use mold, increased concurrency to 3

Thank you for using D++!

v10.0.30 release

10 May 22:34
fa5d7d5
Compare
Choose a tag to compare

After several months of development, we are happy to announce the release of D++ 10.0.30, with support for polls, voice channel statuses, improved error logging, better UTF-8 functionality, and the ability to supress embeds on other users messages.

We recommend you update to this version for the fixes here, and for the new features to keep current with Discord's feature set.

The changelog is listed below:

Release Changelog

✨ New Features

  • Poll support (#1136)
  • Added is_guild_owner for dpp::guild_member (#1109)
  • Add embed-only message ctor (#1100)
  • Added change_voice_channel to discordclient (#1083)
  • Alter set_allowed_mentions (#1081)
  • Added expire and issued timestamps in attachment (#1065)
  • Added newly_created bool to threads (#1069)
  • Added dpp::cluster::guild_member_timeout_remove and its sync/coro versions (#1067)
  • Added the ability to set voice channel statuses (#1064)

🐞 Bug Fixes

  • Error in logging with malformed json that doesnt fit the structure for an error (#1126)
  • Signal Handlers on Non-Windows Platforms in sslclient (#1123)
  • Fix uncleared track meta on stop audio (#1127)
  • Fix human_readable for good (#1135)
  • Empty presences will now warn (#1121)
  • Fix memory leak on libstdc++ (#1112)
  • Out-of-bounds read of MIME types (#1104)
  • Get size of object instead of pointer
  • Correct wrong linking order to fix static build (#1102)
  • Add version parameter as optional parameter to co_request, has been part of request for some time
  • Add version parameter to co_request
  • ts_not_null now works for all timezones (#1089)
  • Fixed getting archived threads
  • Fix bug in human readable errors (#1077)
  • Default callback parameters (#1079)
  • It's going to be OK (#1078)
  • Send stickers in message if present
  • Cmyk calculations - blue value calculations (#1053)
  • Remove unnecessary SSL_free (#1050)
  • Properly free ssl session and ssl context (#1049)
  • Avoid memory leaks in event_map (#1043)
  • Use of uninitialized value in command_option copy ctor (#1044)

♻️ Refactoring

  • Fix and improve utf8 utilities (#1046)

📚 Documentation

  • Added a timers page, added a note in setting_status for timers (#1120)
  • Rewrote the CLion VCPKG page to use VS toolchain (#1111)
  • Fixed missing/incorrect params for many functions (#1110)
  • Added a thinking page (#1092)
  • Update Xcode page. (#1061)
  • Improve Windows VS tutorials (#1058)
  • Added the homebrew version to readme (#1041)

📜 Miscellaneous Changes

  • Silence GUILD_SOUNDBOARD_* websocket events, currently undocumented (#1148)
  • QOL: non fatal utf8 handling. (#1147)
  • Capturing "bot" is not needed. Removing it resolves an unused variabl… (#1132)
  • Ability to suppress embeds (#1107)
  • Dont attempt to reschedule timers that are deleted (FIXES: #1048) (#1088)
  • Potential uninitialised value returned if empty string passed to from_string<T>() (#1087)
  • Unit-test and non unit-test jobs are now merged into one (#1051)

👷 Build/CI

  • Mac runner removal (#1144)
  • Labeler no longer fails (#1068)

Thank you for using D++!