Это кардинальные изменения в discord.py версии 2.0.
"Кардинальные изменения" включают в себя:
- [У]далено: функция удалена.
- [Н]азвание изменено: функция переименована.
- [П]оведение: что-то ведет себя не так, как в 1.x.
- [Т]ипы: типы аргументов, атрибутов или возвращаемых значений изменены. (например, None больше не принимается)
- [С]интаксис: синтаксис, ранее разрешенный для операции, больше не разрешен. (например, позиционные аргументы, теперь именованные)
Обзор:
- Требуется Python 3.8 или новее.
- Методы и атрибуты, которые возвращали
TextChannel
и т.д., теперь могут возвращатьThread
. - Атрибуты, которые возвращали
Asset
, переименованы, например, атрибуты, заканчивающиеся на_url
(т.е.avatar_url
), изменяются наavatar.url
.User.avatar
возвращаетNone
в случае, если используется аватар по умолчанию. on_presence_update
заменено наon_member_update
для обновленийMember.status
иMember.activities
.- дата и время (datetime) теперь зависят от часового пояса.
- Изменения стикеров:
StickerType
был переименован вStickerFormatType
, а типMessage.stickers
изменен.Sticker.preview_image
,Sticker.image
иSticker.tags
удалены. - Вебхуки значительно изменены:
WebhookAdapter
удален, а синхронные запросы с использованиемrequests
теперь находятся внутриSyncWebhook
. - метод
edit
больше не обновляет кэш и вместо этого возвращает измененный экземпляр. - Пользовательские боты (селф-боты) больше не поддерживаются.
Client.logout
удален; вместо этого используйтеClient.close
.- события
on_private_channel_create/delete
удалены. User.permissions_in
удален; вместо этого используйтеabc.GuildChannel.permissions_in
.Message.type
для ответов теперь являетсяMessageType.reply
.- Свойство
Reaction.custom_emoji
изменено на методReaction.is_custom_emoji
. - Атрибуты и аргументы
missing_perms
переименованы вmissing_permissions
. - Многие аргументы методов теперь отвергают значение
None
. - Многие аргументы теперь задаются как только позиционные или только именонные; например,
oauth_url
теперь принимает только именованные аргументы, а методы, начинающиеся сget_
илиfetch_
, принимают только позиционные аргументы.
Изменения упорядочены по дате их внесения.
Требуется Python 3.8 или новее.
Пользовательские бота ("селф-боты") больше не поддерживаются. Таким образом, эти функции, которые были применимы только к ним, удалены:
- аргумент
bot
вClient.start
/run
- аргумент
afk
вClient.change_presence
- Классы:
Profile
,Relationship
,CallMessage
,GroupCall
RelationshipType
,HypeSquadHouse
,PremiumType
,UserContentFilter
,FriendFlags
,Theme
GroupChannel.add_recipients
,remove_recipients
,edit
(ПРИМЕЧАНИЕ:GroupChannel
все еще остается)Guild.ack
Client.fetch_user_profile
Message.call
иack
ClientUser.email
,premium
,premium_type
,get_relationship
,relationships
,friends
,blocked
,create_group
,edit_settings
- Аргументы класса
ClientUser.edit
:password
,new_password
,email
,house
User.relationship
,mutual_friends
,is_friend
,is_blocked
,block
,unblock
,remove_friend
,send_friend_request
,profile
- События:
on_relationship_add
иon_relationship_update
Это означает, что обнаружение нитро больше невозможно.
TL;DR: utcnow
становится now(datetime.timezone.utc)
. Если вы сами создаёте datetime
, передайте tzinfo=datetime.timezone.utc
.
embed = discord.Embed(
title = "День числа Пи 2021 (UTC)",
timestamp = datetime(2021, 3, 14, 15, 9, 2, tzinfo=timezone.utc)
)
Обратите внимание, что недавно добавленный discord.utils.utcnow()
может использоваться в качестве псевдонима datetime.datetime.now(datetime.timezone.utc)
.
Устарел с версии 1.5.
Этот метод был псевдонимом Client.close
, который остается.
Embed
имеющая значение, всегда считается истиной. Ранее он рассматривал только текстовые поля.
Bot.add_cog
теперь появляется, когда ког с тем же именем уже зарегистрирован. Аргумент override
может быть использован для возврата к поведению версий 1.x.
Это всегда возвращало None
для совместимости.
Из-за изменений в Discord этот флаг кэша больше не доступен. У MemberCacheFlags
аргумент online
удален по аналогичным причинам.
Message.type
теперь возвращает MessageType.reply
для ответов вместо default
.
Эти события больше не будут отправляться из-за изменений в Discord.
Command.clean_params
теперь является dict
, а не OrderedDict
.
DMChannel.recipient
теперь является необязательным и во многих случаях возвращает None
.
Вместо этого используйте abc.GuildChannel.permissions_for
.
первый аргумент метода permissions_for
теперь является только позиционным.
Аргумент guild_subscriptions
для Client
заменяется на систему намерений.
Этот аргумент Client
был псевдонимом chunk_guilds_at_startup
начиная с версии 1.5.
Webhook был капитально изменён.
Webhook
иWebhookMessage
теперь всегда асинхронны. Для использования синхронных (requests
), используйтеSyncWebhook
иSyncWebhookMessage
.WebhookAdapter
,AsyncWebhookAdapter
иRequestsWebhookAdapter
удалены, поскольку они не нужны.- аргумент
adapter
дляWebhook.partial
иWebhook.from_url
удалён. Сессии теперь передаются непосредственно вpartial
/from_url
.
webhook = discord.SyncWebhook.from_url(
f"https://discord.com/api/webhooks/{id}/{token}"
)
webhook.send("Привет от discord.py 2.0")
async with aiohttp.ClientSession() as session:
webhook = discord.Webhook.partial(
id,
token,
session=session
)
await webhook.send("Привет от discord.py 2.0")
Это было перемещено в Context.clean_prefix
.
Это было удалено, поскольку Discord больше не предоставляет эти данные.
Assets были изменены.
- Атрибуты, связанные с Asset, которые ранее возвращали хэш-строки (например,
User.avatar
), теперь возвращаютAsset
.Asset.key
с этого момента возвращает хэш. Class.x_url
иClass.x_url_as
удалены. МетодыAsset.replace
илиAsset.with_x
можно использовать для получения определенных размеров или типов asset.Emoji.url
иPartialEmoji.url
теперь являютсяstr
.Emoji.save
иEmoji.read
добавляются для сохранения или чтения смайликов.Emoji.url_as
иPartialEmoji.url_as
удалены.- Некоторые атрибуты
AuditLogDiff
теперь возвращаютAsset
вместоstr
:splash
,icon
,avatar
User.avatar
возвращаетNone
, если аватар не установлен и вместо этого является аватаром по умолчанию; используйтеUser.display_avatar
для поведения до версии 2.0.
avatar_url = user.display_avatar.url # ранее str(avatar_url)
avatar_128x128_url = user.display_avatar.with_size(128).url # ранее str(avatar_url_as(size=128))
avatar_128x128_png_url = user.display_avatar.replace(size=128, static_format="png").url
# ранее str(avatar_url_as(size=128, static_format="png"))
# Приведенный выше код также может быть записан как:
avatar_128x128_png_url = user.display_avatar.with_size(128).with_static_format("png").url
avatar_bytes = await user.display_avatar.read() # ранее avatar_url.read
# Эмодзи и стикеры - это особый случай:
emoji_url = emoji.url # ранее str(emoji.url)
emoji_32x32_url = emoji.with_size(32).url # ранее str(emoji.url_as(size=32))
emoji_32x32_png_url = emoji.replace(size=32, static_format="png").url
# ранее str(url_as(size=128, static_format="png"))
emoji_bytes = await emoji.read() # ранее emoji.url.read
# То же самое относится к стикерам и встроенных смайликам.
Color.blurple
переименован в Color.og_blurple
, а Color.blurple
теперь возвращает другой цвет.
Аргумент self_bot
для Bot
удален, поскольку пользовательские боты (селф-боты) больше не поддерживаются.
VerificationLevel.table_flip
(синоним high
) удалён. Атрибуты extreme
, very_high
и double_table_flip
удалены и заменены на highest
.
Аргументы oauth_url
: permissions
, guild
, redirect_uri
и scopes
теперь являются именованными.
В связи с введением StageInstance
, представляющего текущую сессию StageChannel
,
StageChannel.edit
больше не может редактироватьtopic
. Вместо этого исопльзуйтеStageInstance.edit
.StageChannel.clone
больше не клонирует свою тему.
Message.channel
теперь можем возвращать Thread
.
Первые аргументы Guild.get_channel
, get_role
, get_member_named
, fetch_member
и fetch_emoji
теперь только позиционные.
Аргумент темы Guild.create_text_channel
больше не принимает значение None
.
Reaction.custom_emoji
теперь является методом, называемым Reaction.is_custom_emoji
для обеспечения согласованности.
Аргументы для Reaction.users
теперь являются именованными.
IntegrationAccount.id
теперь является str
, а не int
, из-за изменений в Discord.
BadInviteArgument
теперь требует один аргумент - argument
.
Аргументы missing_perms
и атрибуты MissingPermissions
и BotMissingPermissions
переименованы в missing_permissions
.
Guild.vanity_invite
теперь может возвращать None
.
Его первый аргумент теперь является только позиционным.
Его первый аргумент теперь является только позиционным.
Аргумент name
для Template.edit
больше не принимает None
.
Аргумент roles
для Member.edit
больше не принимает None
.
CommandOnCooldown
теперь требует новый обязательный аргумент - type
.
Client.fetch_channel
и Guild.fetch_channel
теперь могут вернуть Thread
.
Событие member_update
больше не отправляется для изменения статуса/активности. Вместо этого используйте presence_update
.
StickerType
, перечисление форматов стикеров, переименовано в StickerFormatType
. Старое имя используется для нового перечисления с другой целью (проверка, является ли наклейка наклейкой гильдии или наклейкой Nitro).
Message.stickers
теперь является List[StickerItem]
вместо List[Sticker]
. В то время как StickerItem
поддерживает некоторые операции предыдущего Sticker
, атрибуты description
и pack_id
не существуют. Sticket
может быть получен с помощью метода StickerItem.fetch
.
Sticker.image
удаляется. Sticker
по-прежнему можно получить через Sticker.read
или Sticker.save
, а его URL-адрес можно получить через Sticker.url
, как и новый Emoji
.
В связи с введением GuildSticker
, Sticker.tags
удаляется из родительского класса Sticker
и перемещается в StandardSticker.tags
.
AuditLogDiff.type
теперь является Union[ChannelType, StickerType]
вместо ChannelType
.
ChannelNotReadable.argument
теперь может возвращать Thread
.
NSFWChannelRequired.channel
теперь может возвращать Thread
.
Аргумент name
для Bot.add_listener
и Bot.remove_listener
больше не принимает None
.
Следующие атрибуты Context
теперь могут быть None
: prefix
, command
, invoked_with
, invoked_subcommand
. Обратите внимание, что, хотя изменение документации предполагает потенциально критическое изменение, код указывает, что так было всегда.
Command.help
теперь может быть None
.
Client.get_channel
теперь может возвращать Thread
.
Первые аргументы методов Client.get_guild
, get_user
и get_emoji
теперь только позиционные.
Методы edit
большинства классов больше не обновляют кэш на месте, а вместо этого возвращают измененный объект.
on_socket_raw_receive
больше не отправляется для неполных данных, и переданное значение всегда распаковывается и декодируется в str
. Ранее, при получении многосоставного двоичного сообщения, сжатого с помощью zlib, on_socket_raw_receive
отправлялся на все сообщения со сжатыми, закодированными bytes
.
Первый аргумент метода Guild.get_member
теперь является только позиционным.