Skip to main content

Миграция с discord.py

После прекращения поддержки discord.py (см. здесь), многие вилки оболочки API разветвлялись для поддержки библиотеки, чтобы постоянно обновлять её последними функциями и изменениями Discord API - disnake является одним из таких форков.

Таким образом, если вы выбрали disnake в качесте своего форка для реализации взаимодействий/компонентов и других функций, эта страница поможет вам понять изменения в синтаксисе и стремиться сделать прогресс миграции максимально плавным.

Различия между библиотеками​

disnake основан на discord.py 2.0, который претерпел серьёзные изменения по сравнению с предыдущей версией. Поэтому, если вы переходите на disnake с версии discord.py ниже версии 2.0 вам придётся внести некоторые важные синтаксические изменения в свой код. Вы можете обратиться к этой странице для получения полного списка последних изменений discord.py 2.0, хотя здесь мы перечислим некоторые основные изменения в ссылках API:

  • Методы и атрибуты, которые возвращали TextChannel и т.д., теперь могут возвращать Thread.
  • Атрибуты, которые возвращали Asset, переименовы, например, атрибуты, заканчивающиеся на _url (т.е. avatar_url), изменяющийся на avatar.url. User.avatar возвращает None в случае, если используется аватар по умолчанию.
  • on_presence_update заменяет on_member_update для обновления Member.status и Member.activities.
  • Вебхуки значительно изменены: WebhookAdapter удалён, а синхронные запросы используют requests теперь находится внутри SyncWebhook.
  • Методы edit больше не обновляют кэш и вместо этого возвращают изменённый экземпляр.
  • Client.logout удалён; вместо этого используйте Client.close.
  • Message.type для ответов теперь является MessageType.reply.
  • Свойство Reaction.custom_emoji изменяется на метод Reaction.is_custom_emoji.
  • Атрибуты и аргументы missing_perms переименовываются в missing_permissions.
  • Многие аргументы теперь только позициональные или только именованные; например, oauth_url теперь именованный аргумент, а методы, начинающиеся с get_ или fetch_, принимают только позициональные аргументы.

Изменение требований​

Чтобы избежать конфликтов между библиотеками вы должны удалить discord.py. Вы можете сделать это, используя следующую команду в вашем терминале:

py -3 -m pip uninstall discord

Чтобы установить disnake, вы можете следовать инструкциям на этой странцие.

Перепысывание вашего бота​

Как обсуждалось выше, переписывание вашего кода со старой версии discord.py на disnake потребует некоторых серьёзных изменений синтаксиса. Но если вы мигрируете с discord.py 2.0, все, что теперь осталось, - это изменить ссылки на библиотеки во всём коде, поскольку базовый код для обеих библиотек практически одинаков.

Существует три способа переключения между библиотеками:

Замените discord на disnake​

  1. Импортируйте disnake в вашем коде (и удалите строки, в которых импортируете discord).

    import disnake
    from disnake.ext import commands
  2. С помощью вашего любимого редактора замените каждую ссылку discord в вашем коде на disnake (это довольно просто, если в вашем редакторе есть инструмент "Найти и заменить").

Импортируйте disnake as discord​

Импортируйте disnake as discord в вашем коде (и удалите строки, в которых вы импортируете discord). Это сокращает затраты на изменение всех ссылок во всём коде.

import disnake as discord
from disnake.ext import commands

Using the discord shim​

Использование шим discord позволяет вам использовать disnake без необходимости импортировать его напрямую или импортировать как discord - таким образом, отпадает необходимость вообще изменять ваш код. Чтобы установить шим, вы можете использовать следующую команды в вашем терминале:

py -3 -m pip install disnake[discord]
Предупреждение

Мы не рекомендуем использовать шим, так как она обновляется реже и в некоторых случаях может нарушить поведение взаимодействий/компонентов. Если возможно, выполните одну из двух других упомянутых процедур.

И это всё! Поскольку disnake - форк discord.py, он наследует много общего - хотя мы рекомендуем вам всегда запускать свой код, чтобы устранить любые возможные проблемы.