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, он наследует много общего - хотя мы рекомендуем вам всегда запускать свой код, чтобы устранить любые возможные проблемы.