Skip to content

Instantly share code, notes, and snippets.

@dellyis
Last active December 16, 2022 19:14
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dellyis/c39cbbe4bdbe474d4bd7235d98c45228 to your computer and use it in GitHub Desktop.
Save dellyis/c39cbbe4bdbe474d4bd7235d98c45228 to your computer and use it in GitHub Desktop.

Кардинальные изменения в discord.py 2.0

Это кардинальные изменения в 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 повышена

Требуется 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).

[У] Client.request_offline_members

Устарел с версии 1.5.

[У] Client.logout

Этот метод был псевдонимом Client.close, который остается.

[П] Изменение Embed.__bool__

Embed имеющая значение, всегда считается истиной. Ранее он рассматривал только текстовые поля.

[П] Дублирующая регистрация когов

Bot.add_cog теперь появляется, когда ког с тем же именем уже зарегистрирован. Аргумент override может быть использован для возврата к поведению версий 1.x.

[У] ExtensionNotFound.original

Это всегда возвращало None для совместимости.

[У] MemberCacheFlags.online

Из-за изменений в Discord этот флаг кэша больше не доступен. У MemberCacheFlags аргумент online удален по аналогичным причинам.

[П] Message.type для ответов

Message.type теперь возвращает MessageType.reply для ответов вместо default.

[У] on_private_channel_create/delete

Эти события больше не будут отправляться из-за изменений в Discord.

[Т] Command.clean_params

Command.clean_params теперь является dict, а не OrderedDict.

[Т] DMChannel.recipient

DMChannel.recipient теперь является необязательным и во многих случаях возвращает None.

[У] User.permissions_in, Member.permissions_in

Вместо этого используйте abc.GuildChannel.permissions_for.

[С] permissions_for: только позициональные аргументы

первый аргумент метода permissions_for теперь является только позиционным.

[У] Аргумент guild_subscriptions

Аргумент guild_subscriptions для Client заменяется на систему намерений.

[У] Аргумент fetch_offline_members

Этот аргумент Client был псевдонимом chunk_guilds_at_startup начиная с версии 1.5.

[УНП] Webhook changes

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")

[У] HelpCommand.clean_prefix

Это было перемещено в Context.clean_prefix.

[У] Sticker.preview_image

Это было удалено, поскольку Discord больше не предоставляет эти данные.

[RT] Изменение класса Asset

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
# То же самое относится к стикерам и встроенных смайликам.

[Н] Colour.blurple

Color.blurple переименован в Color.og_blurple, а Color.blurple теперь возвращает другой цвет.

[У] Аргумент self_bot

Аргумент self_bot для Bot удален, поскольку пользовательские боты (селф-боты) больше не поддерживаются.

[У] Атрибуты VerificationLevel

VerificationLevel.table_flip (синоним high) удалён. Атрибуты extreme, very_high и double_table_flip удалены и заменены на highest.

[С] oauth_url принимает только именованные аргументы

Аргументы oauth_url: permissions, guild, redirect_uri и scopesтеперь являются именованными.

[П] Изменения StageChannel

В связи с введением StageInstance, представляющего текущую сессию StageChannel,

  • StageChannel.edit больше не может редактировать topic. Вместо этого исопльзуйте StageInstance.edit.
  • StageChannel.clone больше не клонирует свою тему.

[Т] Message.channel

Message.channel теперь можем возвращать Thread.

[С] Методы Guild принимать только именованные аргументы

Первые аргументы Guild.get_channel, get_role, get_member_named, fetch_member и fetch_emoji теперь только позиционные.

[Т] Аргумент темы в Guild.create_text_channel

Аргумент темы Guild.create_text_channel больше не принимает значение None.

[RT] Reaction.custom_emoji

Reaction.custom_emoji теперь является методом, называемым Reaction.is_custom_emoji для обеспечения согласованности.

[С] Аргументы Reaction.users тепрь именованные

Аргументы для Reaction.users теперь являются именованными.

[Т] IntegrationAccount.id

IntegrationAccount.id теперь является str, а не int, из-за изменений в Discord.

[С] Новый обязательный аргумент в BadInviteArgument

BadInviteArgument теперь требует один аргумент - argument.

[Н] missing_perms

Аргументы missing_perms и атрибуты MissingPermissions и BotMissingPermissions переименованы в missing_permissions.

[Т] Guild.vanity_invite

Guild.vanity_invite теперь может возвращать None.

[С] Артументы abc.Messageable.fetch_message только позиционные

Его первый аргумент теперь является только позиционным.

[С] Аргументы get_partial_message только позиционные

Его первый аргумент теперь является только позиционным.

[Т] Аргумент name для Template.edit

Аргумент name для Template.edit больше не принимает None.

[Т] Аргумент roles для Member.edit

Аргумент roles для Member.edit больше не принимает None.

[С] Новый обязательный аргумент для CommandOnCooldown

CommandOnCooldown теперь требует новый обязательный аргумент - type.

[Т] fetch_channel

Client.fetch_channel и Guild.fetch_channel теперь могут вернуть Thread.

[П] Разделение on_member_update и on_presence_update

Событие member_update больше не отправляется для изменения статуса/активности. Вместо этого используйте presence_update.

[У] StickerType

StickerType, перечисление форматов стикеров, переименовано в StickerFormatType. Старое имя используется для нового перечисления с другой целью (проверка, является ли наклейка наклейкой гильдии или наклейкой Nitro).

[Т] Message.stickers

Message.stickers теперь является List[StickerItem] вместо List[Sticker]. В то время как StickerItem поддерживает некоторые операции предыдущего Sticker, атрибуты description и pack_id не существуют. Sticket может быть получен с помощью метода StickerItem.fetch.

[У] Sticker.image

Sticker.image удаляется. Sticker по-прежнему можно получить через Sticker.read или Sticker.save, а его URL-адрес можно получить через Sticker.url, как и новый Emoji.

[У] Sticker.tags

В связи с введением GuildSticker, Sticker.tags удаляется из родительского класса Sticker и перемещается в StandardSticker.tags.

[Т] AuditLogDiff.type

AuditLogDiff.type теперь является Union[ChannelType, StickerType] вместо ChannelType.

[Т] ChannelNotReadable.argument

ChannelNotReadable.argument теперь может возвращать Thread.

[Т] NSFWChannelRequired.channel

NSFWChannelRequired.channel теперь может возвращать Thread.

[Т] Bot.add_listener и Bot.remove_listener

Аргумент name для Bot.add_listener и Bot.remove_listener больше не принимает None.

[Т] Атрибуты Context

Следующие атрибуты Context теперь могут быть None: prefix, command, invoked_with, invoked_subcommand. Обратите внимание, что, хотя изменение документации предполагает потенциально критическое изменение, код указывает, что так было всегда.

[Т] Command.help

Command.help теперь может быть None.

[Т] Client.get_channel

Client.get_channel теперь может возвращать Thread.

[С] Методы Client принимают только позиционные аргументы

Первые аргументы методов Client.get_guild, get_user и get_emoji теперь только позиционные.

[П] Поведение метода edit

Методы edit большинства классов больше не обновляют кэш на месте, а вместо этого возвращают измененный объект.

[П] Поведение on_socket_raw_receive

on_socket_raw_receive больше не отправляется для неполных данных, и переданное значение всегда распаковывается и декодируется в str. Ранее, при получении многосоставного двоичного сообщения, сжатого с помощью zlib, on_socket_raw_receive отправлялся на все сообщения со сжатыми, закодированными bytes.

[С] Guild.get_member принимает только позиционные аргументы

Первый аргумент метода Guild.get_member теперь является только позиционным.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment