Migrating to v2.0¶
v2.0 introduced new Discord features and deprecated some old ones.
Part of the redesign involves making application commands and components. These changes include a new Bot class, ui.View, and a new ApplicationContext class. If you’re interested in creating them, please check out our guide.
Python Version Change¶
In order to make development easier and also to allow for our dependencies to upgrade to allow usage of 3.8 or higher, the library had to remove support for Python versions lower than 3.7, which essentially means that support for Python 3.7 and below has been dropped.
Major Model Changes¶
Below are major changes that have happened in v2.0:
Dropped User Accounts Support¶
Before v2.0, user accounts were supported. This has been against the spirit of the library and discord ToS and has been removed. Thus, these features that were only applicable to them are removed:
botargument ofClient.start()andClient.run()afkargument ofClient.change_presence()Classes
Profile,Relationship,Call Message,Group CallRelationshipType,HypeSquadHouse,PremiumType,UserContentFilter,FriendFlags,ThemeGroupChannel.add_recipients,remove_recipients,edit(NOTE:GroupChannelitself still remains)Guild.ackClient.self_botClient.fetch_user_profileMessage.callandackClientUser.email,premium,premium_type,get_relationship,relationships,friends,blocked,create_group,edit_settingsArguments of
ClientUser.edit:password,new_password,email,houseUser.relationship,mutual_friends,is_friend,is_blocked,block,unblock,remove_friend,send_friend_request,profileEvents:
on_relationship_addandon_relationship_update
Timezone-aware Time¶
utcnow becomes now(datetime.timezone.utc). If you are constructing datetime.datetime` yourself, pass tzinfo=datetime.timezone.utc.
embed = discord.Embed(
title = "Pi Day 2021 in UTC",
timestamp = datetime(2021, 3, 14, 15, 9, 2, tzinfo=timezone.utc)
)
Note that newly-added utils.utcnow() can be used as an alias of datetime.datetime.now(datetime.timezone.utc).
Asset Changes¶
Asset-related attributes that previously returned hash strings (e.g. User.avatar) now returns Asset. Asset.key returns the hash from now on.
Class.x_urlandClass.x_url_asare removed.Asset.replace()orAsset.with_x()methods can be used to get specific asset sizes or types.Emoji.urlandPartialEmoji.urlare nowstr.Emoji.save()andEmoji.read()are added to save or read emojis.Emoji.url_asandPartialEmoji.url_asare removed.Some
AuditLogDiffattributes now returnAssetinstead ofstr:AuditLogDiff.splash,AuditLogDiff.icon,AuditLogDiff.avatarUser.avatarreturnsNoneif the avatar is not set and is instead the default avatar; useUser.display_avatarfor pre-2.0 behavior.
Before |
After |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Webhook Changes¶
WebhookandWebhookMessageare now always asynchronous. For synchronous use (requests), useSyncWebhookandSyncWebhookMessage.WebhookAdapter,AsyncWebhookAdapter, andRequestsWebhookAdapterare removed, since they are unnecessary.adapterarguments ofWebhook.partial()andWebhook.from_url()are removed. Sessions are now passed directly topartial/from_url.
webhook = discord.SyncWebhook.from_url(
f"https://discord.com/api/webhooks/{id}/{token}"
)
webhook.send("Hello from Pycord 2.0")
async with aiohttp.ClientSession() as session:
webhook = discord.Webhook.partial(
id,
token,
session=session
)
await webhook.send("Hello from Pycord 2.0")
Intents Changes¶
Intents.message_content is now a privileged intent. Disabling it causes Message.content,
Message.embeds, Message.components, and Message.attachments to be empty (an empty string
or an empty array), directly causing ext.commands.Command s to not run.
See here for more information.
Threads Introduced¶
The following methods and attributes can return Thread objects:
Permission Changes¶
permissions_in has been removed in favor of checking the permissions of the channel for said user.
Before |
After |
|
|
|
|
Edit Method Behavior Change¶
edit methods of most classes no longer update the cache in-place, and instead returns the modified object.
Positional-Keyword Argument Split¶
The following are now positional only:
The following are now keyword only:
Event Changes¶
on_presence_update()replaces on_member_update for updates toMember.statusandMember.activities.on_private_channel_create/deletewill no longer be dispatched due to Discord changes.on_socket_raw_receive()is no longer dispatched for incomplete data, and the value passed is always decompressed and decoded tostr. Previously, when received a multi-part zlib-compressed binary message,on_socket_raw_receive()was dispatched on all messages with the compressed, encodedbytes.
Message.type For Replies¶
Message.type now returns MessageType.reply for replies, instead of MessageType.default.
Sticker Changes¶
Sticker.preview_imagewas removed as Discord no longer provides the data.StickerType, an enum of sticker formats, is renamed toStickerFormatType. Old name is used for a new enum with different purpose (checking if the sticker is guild sticker or Nitro sticker).Message.stickersis now List[StickerItem] instead of List[Sticker]. WhileStickerItemsupports some operations of previousSticker,descriptionandpack_idattributes do not exist.Stickercan be fetched viaStickerItem.fetch()method.Sticker.imageis removed.Stickercan still be fetched viaSticker.read()orSticker.save()and its URL can be accessed viaSticker.url, just like newEmoji.Due to the introduction of
GuildSticker,Sticker.tagsis removed from the parent classStickerand moved toStandardSticker.tags.
Type Changes¶
Many method arguments now reject None or return None.
DMChannel.recipientis now optional, and will returnNonein many cases.User.avatarreturnsNoneif the avatar is not set and is instead the default avatar.Guild.create_text_channel’stopicargument no longer acceptsNone.Guild.vanity_invitecan now returnNone.Template.edit’snameargument no longer acceptsNone.Member.edit’srolesargument no longer acceptsNone.Bot.add_listenerandBot.remove_listener’snamearguments no longer acceptNone.The following
ext.commands.Contextattributes can now beNone:prefix,command,invoked_with,invoked_subcommand.ext.commands.Command.helpcan now beNone.
Miscellaneous Changes¶
The following were removed:
Client.request_offline_membersClient.logoutExtensionNotFound.originalMemberCacheFlags.onlineguild_subscriptionsargument ofClientfetch_offline_membersargument ofClientHelpCommand.clean_prefixmoved toext.commands.Context.clean_prefixVerificationLevel.table_flip(alias ofhigh) was removed.extreme,very_high, anddouble_table_flipattributes were removed and replaced withVerificationLevel.highest.
The following were renamed:
Colour.blurpleis renamed toColour.og_blurple, andColour.blurplenow returns the newer color.missing_permsarguments and attributes ofext.commands.MissingPermissionsandext.commands.BotMissingPermissionsare renamed tomissing_permissions.
The following were changed in behavior:
Embedthat has a value is always considered truthy. Previously it only considered text fields.Bot.add_cog()now raises an error when a cog with the same name is already registered.overrideargument can be used to bring back the 1.x behavior.StageChannel.edit()can no longer edittopic. UseStageInstance.edit()instead.StageChannel.clone()no longer clones its topic.
The following were changed in types:
ext.commands.Command.clean_paramsis now adict, notOrderedDict.Reaction.custom_emojiis nowReaction.is_custom_emojifor consistency.IntegrationAccount.idis nowstr, instead ofint, due to Discord changes.AuditLogDiff.typeis now Union[ChannelType,StickerType], instead ofChannelType.
Parting Words¶
The v2.0 of the library implemented a lot of new features. To implement newer features, such as slash commands, they can be seen on our guide.