Changelog#

Attention

Major and minor releases also include the changes specified in prior development releases.

Unreleased changes (2022-12-05)#

No significant changes.


2.0.0.dev113 (2022-12-04)#

Breaking Changes#

  • Remove previously deprecated functionality.

    This includes:

    • Message.mentions

    • nick argument in rest methods

    • edit_permission_overwrites, edit_my_nick and command_builder rest methods

    • CacheView.iterator (#1347)

Deprecation#

  • Deprecate RESTClientImpl.build_action_row in favour of RESTClientImpl.build_message_action_row. (#1002)

Features#

  • Implement modal interactions.

    • Additionally, it is now guaranteed (typing-wise) that top level components will be an action row (#1002)

  • Add new UserFlag.ACTIVE_DEVELOPER. (#1355)

  • Allow specifying a filename to hikari.files.URL. (#1368)

  • Only subscribe to voice events when needed in the voice manager. (#1369)

  • Add functionality to create and deserialize age-restricted (NSFW) commands. (#1382)

  • Threads cache. (#1384)

Bugfixes#

  • Allow re-uploading attachments when creating messages (#1367)

  • Fix error caused when disconnecting the bot and having active voice connections. (#1369)

  • Remove incorrect is_nsfw field from threads.

    • The “NSFW” status is inherited from the parent object and not sent for threads.

    • This also involved moving the base attribute from GuildChannel to PermissibleGuildChannel. (#1386)

Documentation Improvements#

  • Documentation overhaul and move to docs.hikari-py.dev domain. (#1118)


2.0.0.dev112 (2022-11-06)#

Breaking Changes#

  • Moved permission overwrite mapping and permission related methods from GuildChannel to PermissibleGuildChannel. (#811)

  • Support v10 attachments edits

    This includes breaking changes, features and things to look out for when editing messages:

    • Modifying attachments in messages that contain embeds with any image attached to them now requires the images of that embed image to be re-passed in the edit or they will be lost.

    • attachment and attachments in message edits now support passing an Attachment object to keep existing attachments.

    • replace_attachments has been removed, as it is now the default.

      • attachment and attachments now supports None to replicate the behaviour of fully removing all attachments.

    • InteractionMessageBuilder.clear_attachments has been implemented to remove existing attachments from messages. (#1260)

Features#

  • Thread support for REST requests and gateway events. (#811)

  • Startup and shutdown callbacks for the RESTBot interface/impl. (#999)

  • Support specifying with_counts and with_expiration in RESTClient.fetch_invite (#1330)

  • Support for including the SUPPRESS_EMBEDS flag while creating a message. (#1331)

  • Add MANAGE_EVENTS permission to hikari.Permissions (#1334)

Bugfixes#

  • Wrong typehint for InviteGuild.features. (#1307)

  • Fix aiohttp error “charset must not be in content type” when using InteractionServer (#1320)

  • The REST list methods (e.g. fetch_channels) no-longer raise hikari.errors.UnrecognisedEntityError when they encounter an unknown type. (#1337)

  • Fix deprecation warnings in CPython3.11 in hikari.internal.ux. (#1344)


2.0.0.dev111 (2022-09-26)#

Breaking Changes#

  • Lifetime improvements breaking changes:

    • GatewayBot.join’s until_close argument removed.

    • GatewayShardImpl.get_user_id is no longer async and will now always be available.

    • GatewayBotAware no longer defines the default parameters for join, start and run. It is left to implementation detail. (#1204)

  • Remove support for ProcessPoolExecutor executor when reading files

    • It is much more efficient to use a threadpool executor for I/O actions like this one

      • Due to the nature of process pool, we were also not able to perform proper chunking when reading off the file (#1273)

Deprecation#

  • Deprecate CacheView.iterator in favour of using the itertools module. (#1289)

Features#

  • Add python 3.11-dev support. (#847)

  • Support for Application Command Localizations. (#1141)

  • Improve components lifetimes:

    • GatewayBot:

      • General speedups.

      • Fix a lot of edge cases of hard crashes if the application shuts unexpectedly.

      • More consistent signal handling.

      • run’s shard_ids argument can now be a typing.Sequence.

      • Improved logging.

    • RESTBot:

      • Consistent signal handling inline with GatewayBot.

      • Improved logging.

      • Improved loop closing.

    • GatewayShardImpl:

      • New is_connected property to determine whether the shard is connected to the gateway.

      • Faster websocket pulling and heartbeating.

      • Improved error handling.

      • Rate limiting changes:

        • Chunking no longer has its own special ratelimit. Now it is shared with the rest of “non-priority” packages sent, which is of 117/60s (3 less than the hard limit).

          • “priority” packages currently only include heartbeating. (#1204)

  • Implement slash option min/max length fields (#1216)

  • Add mention property to PartialChannel. (#1221)

  • Implement new Gateway reconnect logic enforced by Discord. (#1245)

Bugfixes#

  • Lifetime improvements bugfixes:

    • GatewayShardImpl can now be instantiated out of an async environment for consistency with other components.

    • Correct signal handling in RESTBot. (#1204)

  • Improve BadRequestError’s error string. (#1213)

  • Fix hikari.impl.VoiceImpl.connect_to silently failing if the guild or voice channel do not exist by providing a timeout. (#1242)

  • dm_permission now correctly defaults to True instead of False when parsing command objects from Discord. (#1243)

  • Fix float precision issues when creating a snowflake from a datetime object. (#1247)

  • Fix reposition_channels to use the correct route. (#1259)

  • Allow for replace_attachments kwarg to be used in RESTClient.create_initial_response. (#1266)

  • Ignore guild create events which contain unavailable guilds (#1284)


2.0.0.dev110 (2022-08-08)#

Breaking Changes#

  • Removed case of Member.mention returning bang (!) mention, as it is deprecated by Discord. (#1207)

Deprecation#

  • RESTClient.edit_permission_overwrites renamed to RESTClient.edit_permission_overwrite (#1195)

Features#

  • Add hikari.events.StickersUpdateEvent and relevant cache internals. Add sticker related public methods onto hikari.impl.CacheImpl and hikari.guilds.Guild. (#1126)

  • GuildVoiceChannel now inherits from TextableGuildChannel instead of GuildChannel. (#1189)

  • Add the app_permissions field to command and component interactions. (#1201)

  • Add application command badge (#1225)

Bugfixes#

  • Fix how CommandBuilder handles default_member_permissions to match the behaviour on PartialCommand. (#1212)


2.0.0.dev109 (2022-06-26)#

Breaking Changes#

  • Removal of all application commands v1 related fields and endpoints.

    • Discord has completely disabled some endpoints, so we unfortunately can’t deprecate them instead of removing them (#1148)

  • Removed the resolved attribute from AutocompleteInteraction as autocomplete interactions never have resolved objects. (#1152)

  • build methods are now typed as returning MutableMapping[str, typing.Any]. (#1164)

Deprecation#

  • messages.Mentions object deprecated

    • Alternatives can be found in the base message object (#1149)

Features#

  • Add create method to CommandBuilder. (#1016)

  • Support for attachments in REST-based interaction responses. (#1048)

  • Add option to disable automatic member chunking. Added the auto_chunk_members kwarg to GatewayBot and EventManagerImpl, which when False will disable automatic member chunking. (#1084)

  • Allow passing multiple event types to the listen decorator. Parse union type hints for events if listen decorator is empty. (#1103)

  • Animated guild banner support. (#1116)

  • Implement application commands permission v2.

    • New default_member_permissions and is_dm_enabled related fields.

    • Added hikari.events.application_events.ApplicationCommandPermissionsUpdate.

    • Added APPLICATION_COMMAND_PERMISSION_UPDATE audit log entry (#1148)

Bugfixes#

  • Improved pyright support. (#1108)

  • RESTClientImpl.fetch_bans now return a LazyIterator to allow pagination of values. (#1119)

  • Fix unicode decode error caused by latin-1 encoding when sending the banner. (#1120)

  • Don’t error on an out-of-spec HTTP status code (e.g one of Cloudflare’s custom status codes). HTTPResponseError.status may now be of type http.HTTPStatus or int. (#1121)

  • Fix name of polish locale (hikari.Locale.OL -> hikari.Locale.PL) (#1144)

  • Properly garbage collect message references in the cache

    • Properly deserialize PartialMessage.referenced_message as a partial message (#1192)


2.0.0.dev108 (2022-03-27)#

Breaking Changes#

  • hikari.config has now been split up to hikari.api.config and hikari.impl.config to avoid leaking impl detail. This also means that config types are no-longer accessible at the top level (directly on hikari). (#1067)

  • Hide the entity factory’s component deserialize methods. (#1074)

  • Remove nonce parameter from create message. This was purposely removed from the bot api documentation inferring that its no-longer officially supported. (#1075)

  • Remove VoiceRegion.is_vip due to Discord no longer sending it. (#1086)

  • Remove store sku related application fields and store channels. (#1092)

Deprecation#

  • Renamed nick argument to nickname for edit member and add user to guild REST methods. (#1095)

Features#

  • Scheduled event support. (#1056)

  • get_guild() is now available on hikari.GuildChannel. (#1057)

  • Optimize receiving websocket JSON for the happy path. (#1058)

  • The threaded file reader now persists the open file pointer while the context manager is active. (#1073)

  • Optimize event dispatching by only deserializing events when they are needed. (#1094)

  • Add hikari.locales.Locale to help with Discord locale strings. (#1090)

Bugfixes#

  • fetch_my_guilds no-longer returns duplicate guilds nor makes unnecessary (duplicated) requests when newest_first is set to True. (#1059)

  • Add InviteEvent to hikari.events.channel_events.__all__, hikari.events.__all__ and hikari.__all__. (#1065)

  • Fix incorrect type for ATTACHMENT option values. (#1066)

  • EventManager.get_listeners now correctly defines polymorphic and returns accordingly. (#1094)

  • Take the major param for webhook without token endpoints when handling bucket ratelimits. (#1102)

  • Fix incorrect value for GuildFeature.MORE_STICKERS. (#1989)


2.0.0.dev107 (2022-03-04)#

Features#

  • Added a total_length function to hikari.embeds.Embed

    • Takes into account the character length of the embed’s title, description, fields (all field names and values), footer, and author combined.

    • Useful for determining if the embed exceeds Discord’s 6000 character limit. (#796)

  • Added attachment command option type support. (#1015)

  • Add MESSAGE_CONTENT intent. (#1021)

  • Custom substitutions can now be used in hikari.internal.ux.print_banner. (#1022)

  • get_guild() is now available on hikari.Member. (#1025)

  • The notorious “failed to communicate with server” log message is now a warning rather than an error. (#1041)

  • hikari.applications, hikari.files, hikari.snowflakes and hikari.undefined are now all explicitly exported by hikari.__init__, allowing pyright to see them without a direct import. (#1042)

Bugfixes#

  • Fix bucket lock not being released on errors while being acquired, which locked the bucket infinitely (#841)

  • enable_signal_handlers now only defaults to True when the run/start method is called in the main thread. This avoids these functions from always raising when being run in a threaded environment as only the main thread can register signal handlers. (#998)

  • Sub-command options are now properly deserialized in the autocomplete flow to AutocompleteInteractionOption instead of CommandInteractionOption. (#1012)

  • Attempt to reconnect on a gateway TimeoutError. (#1014)

  • Properly close GatewayBot when not fully started. (#1023)

  • The async context manager returned by File.stream now errors on enter if the target file doesn’t exist to improve error handling when a file that doesn’t exist is sent as an attachment.

    The multiprocessing file reader strategy now expands user relative (~) links (like the threaded strategy). (#1046)


2.0.0.dev106 (2022-02-03)#

Breaking Changes#

  • Running the standard interaction server implementation now requires a hikari[server] install.

    This matches a switch over to PyNacl for the cryptographic payload validation. (#986)

Deprecation#

  • Deprecated RESTClient.command_builder and RESTClient.create_application_command.

    You should switch to RESTClient.slash_command_builderand RESTClient.create_slash_command respectively. (#924)

Features#

  • Add context menu commands and command autocomplete. (#924)

  • Added support for GET /users/@me/guilds/{guild}/member. (#955)

  • Add the SUPPRESS_USER_JOIN_REPLIES system channel flag. (#957)

  • Add new message content intent related application flags. (#958)

  • Add the BOT_HTTP_INTERACTIONS user flag. (#959)

  • Add new presence activity flags. (#960)

  • Add URL methods and properties for rich presence assets. (#961)

  • Add locale and guild_locale properties to interactions. (#962)

  • Add ability to send attachments in an interaction initial response. (#971)

  • Add display_avatar_url property to hikari.Member and hikari.User. (#975)

  • old_x keyword arguments in the event factory now default to None. (#984)

  • Strip tokens in the standard bot impls and RESTApp.

    This helps avoids a common mistake with trailing new-lines which leads to confusing errors on request. (#989)

Bugfixes#

  • Relaxed typing of methods with union entry specific specialisations through overloads. (#876)

  • Fix deprecation warnings raised by usage of asyncio.gather outside of an active event loop in GatewayBot.run. (#954)

  • UTF-8 characters are now properly handled for audit-log reasons in REST requests. (#963)

  • Fix magic methods for UserImpl and its subclasses. (#982)


2.0.0.dev105 (2022-01-01)#

Features#

  • Add min_value and max_value to CommandOption (#920)

  • Add flags attribute to Application (#939)

  • Implement member timeouts

    • Add raw_communication_disabled_until and communication_disabled_until to Member

    • Add MODERATE_MEMBERS to Permission

    • Add communication_disabled_until attribute to edit_member (#940)

Bugfixes#

  • Improved pyright compatibility and introduced pyright “type-completeness” checking. (#916)

  • Add EventStream.filter specialisation to the abc. (#917)

  • Update the app command name regex to account for more recently documented support for non-english characters on Discord’s end. (#918)

  • Fix reposition_roles using the wrong route. (#928)

  • Fix PartialSticker.image_url not passing the hash as a string (#930)

  • Fixed the url being generated for role icons to not erroneously insert “.png” before the file extension (#931)

  • Fix some bugs in message deserialization

    • Remove case for setting member and reference_message to undefined.Undefined in full message deserialization

    • Don’t set message.member to undefined.UNDEFINED on partial message deserialization if message was sent by a webhook (#933)


2.0.0.dev104 (2021-11-22)#

Breaking Changes#

  • Remove the redundant ChannelCreateEvent, ChannelUpdateEvent and ChannelDeleteEvent base classes. GuildChannelCreateEvent, GuildChannelUpdateEvent and GuildChannelDeleteEvent should now be used. (#862)

  • Split bulk message delete from normal delete

    • The new event is now hikari.events.message_events.GuildBulkMessageDeleteEvent (#897)

Deprecation#

  • edit_my_nick rest method. (#827)

  • EventStream is now a sync context manager, not async. (#864)

Features#

  • User banners and accent colors to user models. (#811)

  • Add attachment “is_ephemeral” field (#824)

  • Guild member avatars (#825)

  • RESTClient edit_my_member method which currently only takes “nick”. (#827)

  • Add role icons (#838)

  • RESTClient.entity_factory property (#848)

  • Added component support to InteractionMessageBuilder. (#851)

  • EventStream.filter now always returns EventStream. (#864)

  • Allow for passing a URL for avatar_url on execute_webhook. (#889)

  • Add old_message attribute to hikari.events.message_events.MessageDelete (#897)

  • Switch to more relaxed requirements. (#906)

Bugfixes#

  • Don’t raise in bulk delete when message not found by delete single message endpoint (#828)

  • Setup basic handler if no handlers are defined in favour passed to logging.config.dictConfig (#832)

  • InteractionMessageBuilder and RESTClientImpl.create_interaction_response now cast content to str to be consistent with the other message create methods. (#834)

  • create_sticker method failing due to using an incorrect body. (#858)

  • Fix logic for asserting listeners to not error when using defaults for other arguments (#911)

  • Fix error message given by action row when a conflicted type is added. (#912)


2.0.0.dev103 (2021-10-06)#

Breaking Changes#

  • USE_PUBLIC_THREADS and USE_PRIVATE_THREADS permissions have been removed in favour of new threads permission

    • New permissions are split into CREATE_PUBLIC_THREADS, CREATE_PRIVATE_THREADS and SEND_MESSAGES_IN_THREADS (#799)

  • GuildAvailableEvent will no longer fire when the bot joins new guilds

    • Some guild_create-ish methods were renamed to guild_available (#809)

  • Remove hikari.errors.RESTErrorCode enum

    • The message that is sent with the error code is the info that the enum contained (#816)

  • PermissionOverwrite doesn’t inherit from Unique anymore and isn’t hashable. Equality checks now consider all its fields. (#820)

Features#

  • Add new START_EMBEDDED_ACTIVITIES permission (#798)

  • Support new channel_types field in CommandOption (#800)

  • Add the add_component method to hikari.api.special_endpoints.ActionRowBuilder (#804)

  • Add old_guild attribute to GuildLeaveEvent. (#806)

  • Add GuildJoinEvent that will fire when the bot joins new guilds (#809)

Bugfixes#

  • Fix re-uploading forms with resources (#787)

  • Prevent double linking embed resources, which causes them to upload twice

    • This was caused by attempting to move the resource from one embed to another (#788)

  • Fix BulkDeleteError returning incorrect values for messages_skipped

    • This affected the __str__ and percentage_completion, which also returned incorrect values (#817)

Documentation Improvements#

  • Add docstrings to the remaining undocumented GatewayBot methods (#804)


2.0.0.dev102 (2021-09-19)#

Deprecations and Removals#

  • MessageType.APPLICATION_COMMAND renamed to MessageType.CHAT_INPUT (#775)

  • Removal of deprecated hikari.impl.bot.BotApp and hikari.traits.BotAware

    • Use hikari.impl.bot.GatewayBot and hikari.traits.GatewayBotAware respectively instead (#778)

Features#

  • Message components support (#684)

  • Web dashboard example with rillrate (#752)

  • Sticker methods to PartialGuild (#754)

  • Sticker audit log event types (#756)

  • Helpful Application object methods (#757)

  • Missing audit log change keys (#759)

  • Retry request on 500, 502, 503 and 504 errors

    • Default retry count is 3, with a hard top of 5. This can be changed with the max_retries argument (#763)

  • New is_for_emoji methods to relevant reaction events (#770)

  • Add USE_EXTERNAL_STICKERS permission (#774)

  • Add MessageType.CONTEXT_MENU_COMMAND message type (#775)

  • Add ApplicationCommand.version (#776)

Bugfixes#

  • Handling of interaction models passed to the webhook message endpoints as the “webhook” field (#759)

  • Fix passing embeds arguments in create_interaction_response and edit_initial_response endpoints

    • Fix deserialization of embeds in create_interaction_response

    • Fix TypeErrors raised in edit_initial_response when passing a list of embeds (#779)

  • Improve typing for message objects and message update methods

    • Fix the use of typing.Optional where undefined.UndefinedOr should have been used

    • Remove trying to acquire guild_id from the cached channel on PartialMessage

      • Instead, clearly document the issue Discord imposes by not sending the guild_id

    • is_webhook will now return undefined.UNDEFINED if the information is not available

    • Fix logic in is_human to account for the changes in the typing

    • Set PartialMessage.member to undefined.UNDEFINED when Discord edit the message to display an embed/attachment (#783)

  • CommandInteractionOption.value will now be cast to a Snowflake for types 6-9 (#785)

Documentation Improvements#

  • Fix typo in Colorish docstring (#755)

  • Remove duplicate raise type in REST and guilds docstrings (#768)

  • Fix various spelling mistakes (#773)


The changelog was added during the development of version 2.0.0.dev102, so nothing prior is documented here.