VoiceState.member
can now beNone
in cases where Discord doesn't send the relevant information (#2038)
- Add the optional audit log
reason
argument tohikari.api.rest.RESTClient.delete_channel
andhikari.impl.rest.RESTClientImpl.delete_channel
, the same way it already exists for e.g.edit_channel
(#2058)
- Fix issue when deserializing voice states with missing member data (#2038)
- Fix
fetch_application_emojis
endpoint deserialization (#2050) - Fix uploading files when using aiohttp 3.10.6 and onwards (#2059)
- Drop Python 3.8 support. (#2008)
- Implement stage instances (#1725)
- Add Python 3.13 support (#1793)
- Add
title
anddescription
fields toAttachment
. (#1945) - Add
display_name
toPartialUser
(#1951) - Remove
Optional
type hint fromCommandInteraction.options
- it will now always be an empty sequence when not provided. (#1965) - Application-bound emojis API support. (#1990)
- Add
Member.guild_flag
and matchingGuildMemberFlags
enum. (#2004) - Add
Message.thread
field. (#2012) - Add new voice endpoints (
fetch_my_voice_state
andfetch_voice_state
) (#2016) - Add
fetch_role
method toRESTClient
(#2020)
-
Fix incorrect cleanup when failing to create request with a web reader (#1946)
-
Fix serializing JSON dicts with enum values as keys.
-
Use Discord Media Proxy instead of CDN for animated stickers urls (#1982)
-
Use correct URL route for scheduled event covers. (#1983)
-
Perform proper comparison when checking
CustomEmoji
againstKnownCustomEmoji
. (#1986) -
Add
NITRO_BASIC
attribute toPremiumType
(#1988) -
Fix incorrectly deserialized field
type
inChannelOverwriteEntryInfo
(#1993) -
Add missing
AuditLogChangeKey.COMMUNICATION_DISABLED_UNTIL
and matching key deserialization (#1996)
- Add
registered_guild_id
field toBaseCommandInteraction
(#1930) - Add
clear_fields()
method toEmbed
(#1933) - Add payload to deserialization error to make it easier to diagnose (#1943)
- Fix incorrect form uploads with transport sensitive content (#1909)
- Add monetization support. (#1803)
- Add missing link properties
- Add
message_link
property toMessageReference
- Add
channel_link
property toMessageReference
(#1877)
- Add
- Add missing
video_quality_mode
field toGuildStageChannel
(#1891) - Optimize gateway transport
- Merge cold path for zlib compression into main path to avoid additional call
- Handle data in
bytes
, rather than instr
to make good use of speedups (similar toRESTClient
) (#1898)
- Fix warning raised in aiohttp 3.9.4 when using
FormData
(most commonly, when uploading attachments) (#1881) - Properly handle websocket transport errors and recover
- Additionally, errors will now include additional information (#1897)
- Improve
Emoji.parse
typing to make it more explicit (#1870) - Add ability to edit own user banner (#1871)
- Fix incorrectly formatted error strings (#1866)
- Properly handle initial opcode as being RECONNECT (7) (#1867)
- Replace mentions of
PRIVATE_MESSAGES
withDM_MESSAGES
(#1874)
- Remove previously deprecated
Permissions.MANAGE_EMOJIS_AND_STICKERS
(#1762)
- Allow subscribing to generic events (#1814)
- Allow changing guild features (community, etc.) (#1828)
- Improve embed parameters typing (#1841)
- Fix
CommandInteractionOption.value
typehint not includingfloat
(#1805) Member.joined_at
is now nullable due to breaking API change- This will be received on guest members with temporary membership (#1812)
- Shard rate-limiters are now reset per websocket connection, avoiding a rare issue where a persistent network issue could allow the shard to be rate-limited (#1813)
- Switch documentation to mkdocs (#1810)
- Deprecate
Permissions.MANAGE_EMOJIS_AND_STICKERS
in favour ofPermissions.MANAGE_GUILD_EXPREASSIONS
(#1758)
- Add Python 3.12 support. (#1357)
- Allow class listeners (#1661)
- Add missing
clear_x
methods toInteractionMessageBuilder
- This brings the functionality more in-line with other message edit APIs (#1740)
- Add missing permissions (#1758)
- Fix optional connection "revoked" field KeyError when fetching connections. (#1720)
- Ensure shard connect and disconnect always get sent in pairs and properly waited for (#1744)
- Improve handing of force exiting a bot (double interrupt)
- Improve exception message
- Reset signal handlers to original ones after no longer capturing signals (#1745)
- Add
approximate_member_count
andapproximate_presence_count
toOwnGuild
. (#1659) - Add
CacheSettings.only_my_member
to only cache the bot member. (#1679) - Bots can now utilize
Activity.state
- When used with
type
set toActivityType.CUSTOM
, it will show as the text for the custom status. Syntactic sugar also exists to support simply usingname
instead ofstate
. - Can be used with other activity types to provide additional information on the activity. (#1683)
- When used with
- Add missing Audit Log event types to
AuditLogEventType
(#1705) - Add
approximate_guild_count
field to ownApplication
(#1712)
- Handle connection reset error on shards. (#1645)
- Retry REST requests on connection errors (#1648)
- Add support for text in stage channels (#1653)
- Fix incorrect calculation for the default avatar of migrated users (#1673)
- Fix attachments not being removed in message edits when
attachment
orattachments
isNone
(#1702)
- Remove previously deprecated
hikari.impl.bot
module (#1612)
- Deprecate
User.discriminator
(#1631)
- Implement voice messages (#1609)
- Implement username changes:
- Add
global_name
User.__str__()
respectsglobal_name
nowUser.default_avatar_url
returns correct URL for migrated accounts (#1631)
- Add
- Fix a bug in
RESTClient.edit_guild
which load to closed stream errors (#1627) - Properly handle DM channels in resolved interaction channels. (#1628)
- Remove deprecated functionality for 2.0.0.dev119
- Removed
TextInputBuilder.required
in favour ofTextInputBuilder.is_required
. - Removed the ability to pass
CommandChoices
instead ofAutocompleteChoiceBuilders
when making autocomplete responses. (#1580)
- Removed
- Fix
messages
argument typing forRESTClient.delete_messages
. (#1581) - Default
HTTPSettings.enable_cleanup_closed
toFalse
.- CPython3.11 changes around SSLProto have made this quite unstable and prone to errors when dealing with unclosed TLS transports, which ends up in aiohttp calling close and abort twice. (#1585)
Guild.get_channel
,Guild.get_emoji
,Guild.get_sticker
andGuild.get_role
now only return entries from the relevant guild. (#1608)
-
Refactors to the component builder interfaces which make them flatter:
- Removed
add_to_container
fromButtonBuilder
,LinkButtonBuilder
,InteractiveButtonBuilder
,SelectMenuBuilder
,ChannelSelectMenuBuilder
, andTextInputBuilder
; these classes are no-longer generic and no-longer takecontainer
in their inits. - Replaced
TextSelectMenuBuilder.add_to_container
with theTextSelectMenuBuilder.parent
property. This new property doesn't "finalise" the addition but rather just returns the parent object, or raises if the select menu is an orphan. This change also involves replacing thecontainer
parameter inTextSelectMenuBuilder.__init__
with an optionalparent
parameter. - Removed
SelectOptionBuilder.add_to_menu
; this class isn't generic anymore. TextSelectMenuBuilder.add_option
now takes all the option's configuration as parameters and returnsSelf
.- Split
MessageActionRowBuilder.add_button
into.add_interactive_button
and.add_link_button
. These both now take all the button's configuration as parameters and returnSelf
. MessageActionRowBuilder.add_select_menu
now takes all the menu's configuration as parameters and returnsSelf
. The new.add_channel_menu
and.add_text_menu
methods should be used for adding text and channel menus. Where.add_channel_menu
returnsSelf
and.add_text_menu
returns a text menu builder with aparent
property for getting back to the action row builder.ModalActionRowBuilder.add_text_input
now takes all the text input's configuration as parameters and returnsSelf
.min_length
andmax_length
can no-longer behikari.undefined.UNDEFINED
for the text input builder, and default to0
and4000
respectively. This change effects both the types accepted byModalActionRowBuilder.__init__
and the return types of the relevant properties.- Removed the
emoji_id
andemoji_name
parameters fromLinkButtonBuilder.__init__
, andInteractiveButtonBuilder.__init__
. - Removed the
style
andcustom_id
parameters fromLinkButtonBuilder.__init__
. - Removed the
url
parameter fromInteractiveButtonBuilder.__init__
. (#1533)
- Removed
-
Remove previously deprecated functionality:
Intents.GUILD_BANS
(deprecated alias forIntents.GUILD_MODERATION
)ComponentType.SELECT_MENU
(deprecated alias forIntents.TEXT_SELECT_MENU
)- Not passing type through
type
argument explicitly toMessageActionRowBuilder.add_select_menu
(#1535)
-
Renamed
StickerPack.banner_hash
toStickerPack.banner_asset_id
. (#1572)
- Renamed
TextInputBuilder.required
property toTextInputBuilder.is_required
. (#1533) - Passing
CommandChoice
s instead ofAutocompleteChoiceBuilder
s when making autocomplete responses. (#1539) hikari.impl.bot
moved tohikari.impl.gateway_bot
. (#1576)
-
Role.mention
now returns"@everyone"
for the@everyone
role. (#1528) -
Refactors to the component builder interfaces which make them flatter:
hikari.undefined.UNDEFINED
can now be passed toTextInputBuilder.set_placeholder
andTextInputBuilder.set_value
.- The standard implementation of a select option builder is now exposed at
hikari.impl.special_endpoints.SelectOptionBuilder
. (#1533)
-
CommandChoice.name_localizations
field and separateAutocompleteChoiceBuilder
for use when making autocomplete responses. (#1539) -
Implement guild role subscriptions. (#1550)
-
Add
Role.is_guild_linked_role
. (#1551) -
hikari.iterators.LazyIterator.flatten
method for flattening a lazy iterator of synchronous iterables. (#1562) -
Support sending stickers when creating a message. (#1571)
-
Added several set methods for required values to the builders:
CommandBuilder.set_name
SlashCommandBuilder.set_description
InteractiveButtonBuilder.set_custom_id
SelectOptionBuilder.set_label
SelectOptionBuilder.set_value
SelectMenuBuilder.set_custom_id
(#1574)
-
emoji=
can now be passed toLinkButtonBuilder.__init__
andInteractiveButtonBuilder.__init__
alone without causing serialization issues (and Pyright will now let you pass it). (#1533) -
Open
banner.txt
s withutf-8
encoding explicitly. (#1545) -
Pyright will now let you pass
role_mentions
anduser_mentions
toInteractionMessageBuilder.__init__
. (#1560) -
Fixed forum channel applied tags not being a sequence of snowflakes. (#1564)
-
Switch to using https://github.com/discord/twemoji for emoji images. (#1568)
-
Fixed sticker pack handling and typing:
- Fixed deserialization raising when
"banner_asset_id"
or"cover_sticker_id"
weren't included in the payload. StickerPack.banner_asset_id
is now correctly typed asOptional[Snowflake]
.StickerPack.banner_url
andStickerPack.make_banner_url
both now correctly returnNone
whenStickerPack.banner_asset_id
isNone
. (#1572)
- Fixed deserialization raising when
- Remove previously deprecated functionality:
delete_message_days
parameter forban
methods. (#1496)
type
can no-longer be specified while initialisehikari.impl.special_endpoints.TextSelectMenuBuilder
andhikari.impl.special_endpoints.ChannelSelectMenuBuilder
.hikari.api.special_endpoints.SelectOptionBuilder
no-longer inherits fromhikari.api.special_endpoints.ComponentBuilder
(but it still has abuild
method). (#1509)
- Pre-maturely fetch the public key if not present when starting an interaction server. (#1423)
- Add and document the new
SUPPRESS_NOTIFICATIONS
message flag. (#1504) hikari.impl.special_endpoints.ChannelSelectMenuBuilder
andhikari.impl.special_endpoints.TextSelectMenuBuilder
are now both exported directly onhikari.impl
. (#1508)type
property to the component builders. (#1509)- Traits now use
abc.abstractmethod
. This gives better type errors. (#1516) token_type
now defaults to"Bot"
when initialisingRESTBot
with a string token. (#1527)
- Re-export missing exports from
hikari.api.special_endpoints
andhikari.components
. (#1501) - Fix
PartialSticker.image_url
not accounting for stickers with GIF format. (#1506) - Await bucket manager gc task to completion when closing (#1529)
- Remove
RateLimitedError
in favour of always waiting on ratelimits. (#1441) - (#1455)
- Default logging to
sys.stdout
stream to bring more in-line with banner output. (#1485)
- Deprecate selects v1 functionality:
ComponentType.SELECT_MENU
->ComponentType.TEXT_SELECT_MENU
- Not passing
MessageActionRowBuilder.add_select_menu
'stype
argument explicitly. InteractionChannel
andResolvedOptionData
moved fromhikari.interactions.command_interactions
tohikari.interactions.base_interactions
. (#1455)
- Renamed
Intents.GUILD_BANS
toIntents.GUILD_MODERATION
. (#1471)
- Add linked roles support (models + endpoints). (#1422)
- Add selects v2 components. (#1455)
- Added
fetch_self
,edit
,delete
,sync
, andcreate_guild
methods tohikari.templates.Template
. (#1457) - Add ability to suppress optimization warnings through
suppress_optimization_warning=True
to theGatewayBot
orRESTBot
constructors. (#1459) - Support GIF sticker image format (#1464)
- Add support for guild audit log entry create events. (#1471)
- Update
RESTClient.edit_channnel
to support settingapplied_tags
on forum threads. (#1474) - Implement
reply_must_exist
in create message methods (#1475) - Support loading files through
logging.config.fileConfig
ininit_logging
. (#1485) - Add
orjson
as an optional speedup and allow to pass customjson.dumps
andjson.loads
functions to all components. (#1486)
- The global ratelimit now abides by
max_rate_limit
. (#1441) - Move
description_localizations
fromPartialCommand
toSlashCommand
(removing it fromContextMenuCommand
). (#1470) - Add missing fields to
GuildChannel.edit
. (#1474) - Fix
hikari.webhooks.ChannelFollowWebhook
not including source in all cases.source_channel
andsource_guild
will beNone
instead. (#1480)
- Fix colour logging not occurring on specific terminals (ie, Pycharm). (#1485)
- Remove previously deprecated functionality.
This includes:
RESTClient.build_action_row
(#1438)
- Fix deserializing old forum channels on
GUILD_CREATE
missing some fields. (#1439)
BulkDeleteError
:- No longer contains a
messages_skipped
attribute. messages_deleted
renamed todeleted_messages
. (#1134)
- No longer contains a
RESTApp
andRESTBucketManager
now need to be started and stopped by using.start
and.close
. (#1230)- Remove long deprecated
async with
support forEventStream
. (#1426)
- Deprecate the
delete_message_days
parameter for PartialGuild.ban and Member.ban. (#1378)
- Allow async iterators in
RESTClient.delete_messages
. (#1134) RESTClientImpl
improvements:- You can now share client sessions and bucket managers across these objects or have them created for you.
- Speedup of request lifetime
- No-ratelimit routes no longer attempt to acquire rate limits
- Just for safety, a check is in place to treat the route as a rate limited route if a bucket is ever received for it and a error log is emitted. If you spot it around, please inform us! (#1230)
- Add
save()
method toResource
. (#1272) - Allow specifying the
delete_message_seconds
parameter for PartialGuild.ban and Member.ban.- This parameter can be specified as either an int, a float, or a datetime.timedelta object. (#1378)
- Support yielding in interaction listeners. (#1383)
- Add Indonesian locale as
hikari.Locale.ID
. (#1404) - Improve pyright support (#1412)
- Improve error raised when attempting to use an asynchronous iterator synchronously. (#1419)
- Add missing
Application
fields:Application.custom_install_url
Application.tags
Application.install_parameters
(#1420)
- Add support for guild forum channels. (#1430)
- Add a warning when not running in (at least) level 1 optimization mode. (#1431)
- Buckets across different authentications are not shared any more, which would lead to incorrect rate limiting. (#1230)
- Suppress incorrect deprecation warning regarding event loops. (#1425)
- Properly close unclosed file descriptor when reading banner.
- This only affects versions of Python >= 3.9. (#1434)
- Start GC of bucket manager when creating a rest client. (#1435)
- Fix incorrect value in
CommandBuilder.is_nsfw
. (#1436)
-
Remove previously deprecated functionality.
This includes:
Message.mentions
nick
argument in rest methodsedit_permission_overwrites
,edit_my_nick
andcommand_builder
rest methodsCacheView.iterator
(#1347)
- Deprecate
RESTClientImpl.build_action_row
in favour ofRESTClientImpl.build_message_action_row
. (#1002)
- 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)
- 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
toPermissibleGuildChannel
. (#1386)
- Documentation overhaul and move to docs.hikari-py.dev domain. (#1118)
-
Moved permission overwrite mapping and permission related methods from
GuildChannel
toPermissibleGuildChannel
. (#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
andattachments
in message edits now support passing anAttachment
object to keep existing attachments.replace_attachments
has been removed, as it is now the default.attachment
andattachments
now supportsNone
to replicate the behaviour of fully removing all attachments.
InteractionMessageBuilder.clear_attachments
has been implemented to remove existing attachments from messages. (#1260)
- Thread support for REST requests and gateway events. (#811)
- Startup and shutdown callbacks for the RESTBot interface/impl. (#999)
- Support specifying
with_counts
andwith_expiration
inRESTClient.fetch_invite
(#1330) - Support for including the
SUPPRESS_EMBEDS
flag while creating a message. (#1331) - Add
MANAGE_EVENTS
permission tohikari.Permissions
(#1334)
- 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 raisehikari.errors.UnrecognisedEntityError
when they encounter an unknown type. (#1337) - Fix deprecation warnings in CPython3.11 in
hikari.internal.ux
. (#1344)
- Lifetime improvements breaking changes:
GatewayBot.join
'suntil_close
argument removed.GatewayShardImpl.get_user_id
is no longer async and will now always be available.GatewayBotAware
no longer defines the default parameters forjoin
,start
andrun
. 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)
- It is much more efficient to use a threadpool executor for I/O actions like this one
- Deprecate
CacheView.iterator
in favour of using theitertools
module. (#1289)
- 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
'sshard_ids
argument can now be atyping.Sequence
.- Improved logging.
RESTBot
:- Consistent signal handling inline with
GatewayBot
. - Improved logging.
- Improved loop closing.
- Consistent signal handling inline with
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)
- 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).
- New
- Implement slash option min/max length fields (#1216)
- Add
mention
property toPartialChannel
. (#1221) - Implement new Gateway reconnect logic enforced by Discord. (#1245)
- 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 toTrue
instead ofFalse
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 inRESTClient.create_initial_response
. (#1266) - Ignore guild create events which contain unavailable guilds (#1284)
- Removed case of
Member.mention
returning bang (!
) mention, as it is deprecated by Discord. (#1207)
RESTClient.edit_permission_overwrites
renamed toRESTClient.edit_permission_overwrite
(#1195)
- Add
hikari.events.StickersUpdateEvent
and relevant cache internals. Add sticker related public methods ontohikari.impl.CacheImpl
andhikari.guilds.Guild
. (#1126) GuildVoiceChannel
now inherits fromTextableGuildChannel
instead ofGuildChannel
. (#1189)- Add the
app_permissions
field to command and component interactions. (#1201) - Add application command badge (#1225)
- Fix how CommandBuilder handles
default_member_permissions
to match the behaviour on PartialCommand. (#1212)
- 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 fromAutocompleteInteraction
as autocomplete interactions never have resolved objects. (#1152) build
methods are now typed as returningMutableMapping[str, typing.Any]
. (#1164)
messages.Mentions
object deprecated- Alternatives can be found in the base message object (#1149)
- Add
create
method toCommandBuilder
. (#1016) - Support for attachments in REST-based interaction responses. (#1048)
- Add option to disable automatic member chunking.
Added the
auto_chunk_members
kwarg toGatewayBot
andEventManagerImpl
, which whenFalse
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
andis_dm_enabled
related fields. - Added
hikari.events.application_events.ApplicationCommandPermissionsUpdate
. - Added
APPLICATION_COMMAND_PERMISSION_UPDATE
audit log entry (#1148)
- New
- Improved pyright support. (#1108)
RESTClientImpl.fetch_bans
now return aLazyIterator
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 typehttp.HTTPStatus
orint
. (#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)
- Properly deserialize
hikari.config
has now been split up tohikari.api.config
andhikari.impl.config
to avoid leaking impl detail. This also means that config types are no-longer accessible at the top level (directly onhikari
). (#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)
- Renamed
nick
argument tonickname
for edit member and add user to guild REST methods. (#1095)
- Scheduled event support. (#1056)
get_guild()
is now available onhikari.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)
fetch_my_guilds
no-longer returns duplicate guilds nor makes unnecessary (duplicated) requests whennewest_first
is set toTrue
. (#1059)- Add
InviteEvent
tohikari.events.channel_events.__all__
,hikari.events.__all__
andhikari.__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)
- Added a
total_length
function tohikari.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 onhikari.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
andhikari.undefined
are now all explicitly exported byhikari.__init__
, allowing pyright to see them without a direct import. (#1042)
-
Fix bucket lock not being released on errors while being acquired, which locked the bucket infinitely (#841)
-
enable_signal_handlers
now only defaults toTrue
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 ofCommandInteractionOption
. (#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)
-
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)
-
Deprecated
RESTClient.command_builder
andRESTClient.create_application_command
.You should switch to
RESTClient.slash_command_builder
andRESTClient.create_slash_command
respectively. (#924)
-
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
andguild_locale
properties to interactions. (#962) -
Add ability to send attachments in an interaction initial response. (#971)
-
Add
display_avatar_url
property tohikari.Member
andhikari.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)
- 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 inGatewayBot.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)
- Add min_value and max_value to
CommandOption
(#920) - Add
flags
attribute to Application (#939) - Implement member timeouts
- Add
raw_communication_disabled_until
andcommunication_disabled_until
toMember
- Add
MODERATE_MEMBERS
toPermission
- Add
communication_disabled_until
attribute toedit_member
(#940)
- Add
- 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
andreference_message
toundefined.Undefined
in full message deserialization - Don't set
message.member
toundefined.UNDEFINED
on partial message deserialization if message was sent by a webhook (#933)
- Remove case for setting
- Remove the redundant
ChannelCreateEvent
,ChannelUpdateEvent
andChannelDeleteEvent
base classes.GuildChannelCreateEvent
,GuildChannelUpdateEvent
andGuildChannelDeleteEvent
should now be used. (#862) - Split bulk message delete from normal delete
- The new event is now
hikari.events.message_events.GuildBulkMessageDeleteEvent
(#897)
- The new event is now
- 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 returnsEventStream
. (#864)- Allow for passing a URL for avatar_url on execute_webhook. (#889)
- Add
old_message
attribute tohikari.events.message_events.MessageDelete
(#897) - Switch to more relaxed requirements. (#906)
- 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)
USE_PUBLIC_THREADS
andUSE_PRIVATE_THREADS
permissions have been removed in favour of new threads permission- New permissions are split into
CREATE_PUBLIC_THREADS
,CREATE_PRIVATE_THREADS
andSEND_MESSAGES_IN_THREADS
(#799)
- New permissions are split into
GuildAvailableEvent
will no longer fire when the bot joins new guilds- Some
guild_create
-ish methods were renamed toguild_available
(#809)
- Some
- 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)
- Add new
START_EMBEDDED_ACTIVITIES
permission (#798) - Support new
channel_types
field inCommandOption
(#800) - Add the
add_component
method tohikari.api.special_endpoints.ActionRowBuilder
(#804) - Add
old_guild
attribute toGuildLeaveEvent
. (#806) - Add
GuildJoinEvent
that will fire when the bot joins new guilds (#809)
- 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 formessages_skipped
- This affected the
__str__
andpercentage_completion
, which also returned incorrect values (#817)
- This affected the
- Add docstrings to the remaining undocumented
GatewayBot
methods (#804)
MessageType.APPLICATION_COMMAND
renamed toMessageType.CHAT_INPUT
(#775)- Removal of deprecated
hikari.impl.bot.BotApp
andhikari.traits.BotAware
- Use
hikari.impl.bot.GatewayBot
andhikari.traits.GatewayBotAware
respectively instead (#778)
- Use
- 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)
- Default retry count is 3, with a hard top of 5. This can be changed with the
- 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)
- Handling of interaction models passed to the webhook message endpoints as the "webhook" field (#759)
- Fix passing
embeds
arguments increate_interaction_response
andedit_initial_response
endpoints- Fix deserialization of embeds in
create_interaction_response
- Fix
TypeErrors
raised inedit_initial_response
when passing a list of embeds (#779)
- Fix deserialization of embeds in
- Improve typing for message objects and message update methods
- Fix the use of
typing.Optional
whereundefined.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 returnundefined.UNDEFINED
if the information is not available- Fix logic in
is_human
to account for the changes in the typing - Set
PartialMessage.member
toundefined.UNDEFINED
when Discord edit the message to display an embed/attachment (#783)
- Fix the use of
CommandInteractionOption.value
will now be cast to aSnowflake
for types 6-9 (#785)
- 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.