Наличие собственного сервера Discord иногда требует много работы, поэтому популярны боты, выполняющие административные функции. Такого бота легко создать самостоятельно, используя библиотеку Python discord.py и базовые знания Python.
Шаг за шагом к собственному боту Discord на Python
Прежде чем вы сможете начать программировать своего бота, вы должны создать бота Discord. Вы можете создать для этого собственное приложение на Discord. После этого ничто не помешает вашему боту Discord. Код, который вам нужен для вашего бота Discord, зависит от того, какие задачи вы хотите автоматизировать. Бот, представленный в этом руководстве, предназначен для добавления ролей на сервере Discord.
Шаг 1: Установите discord.py
При создании своего бота вы в первую очередь будете использовать библиотеку Python discord.py, поэтому вы должны сначала установить ее в своей системе. Как обычно в Python, установка выполняется с помощью pip. В Windows необходимая команда терминала выглядит так:
py -3 -m pip install -U discord.py
Шаг 2: Создайте документ Python
Создайте новый документ Python, в котором вы будете кодировать своего бота. Вы можете использовать различные редакторы кода или интегрированную среду разработки (IDE), такую как Pycharm, для файла Python.
Шаг 3: Подключитесь к Discord
Сначала импортируйте библиотеку Discord в свой документ Python и установите токен бота, который вы получили при регистрации бота Discord на странице разработчика Discord. Для этого замените заполнитель на ваш индивидуальный токен бота:
import discord TOKEN = token_placeholder
Вам нужна библиотека для взаимодействия с Discord API. Для того, чтобы вы могли подключиться к Discord, также требуется экземпляр так называемого клиентского объекта. Вы создаете это с помощью следующего кода:
client = discord.Client()
Шаг 4: Проверьте, успешно ли установлено соединение
Затем вы должны включить асинхронный метод в свой документ Python, который проверит, что подключение вашего бота к серверу Discord работает без сбоев. Для этого вы отвечаете на on_readyсобытие, определенное в API discord.py. Чтобы ваша функция работала как обработчик событий, используйте декоратор функций Python.@client.event
@client.event async def on_ready(): print(f'{client.user} ist mit folgenden Servern verbunden:\n') for server in client.guilds: print(f'{server.name}(id: {server.id})')
Шаг 5. Добавьте функции своему боту
API discord.py определяет событие, которое поможет вам запустить функциональность вашего бота — on_messageсобытие. Это событие запускается всякий раз, когда ваш бот Discord получает сообщение. Метод, обрабатывающий это событие, должен сначала проверить, от какого отправителя пришло сообщение, а затем выполнить нужный функционал — в нашем случае добавить роли.
@client.event async def on_message(message): if message.author == client.user: return if message.content.startswith('!add_role'): # Rollenname herausfinden role_name = message.content.split(' ')[1] # entsprechende Discord-Rolle suchen role = discord.utils.get(message.guild.roles, name=role_name) # Überprüfung, ob die Rolle existiert if role is None: await message.channel.send(f'Role "{role_name}" existiert nicht) return # Zuweisung der Rolle await message.author.add_roles(role) await message.channel.send(f'Rolle "{role_name}" wurde hinzugefuegt zu {message.author}')
Во-первых, функция проверяет, получено ли сообщение от самого бота Discord. В этом случае функция завершается returnс оператором.
На втором этапе содержание сообщения изучается более тщательно. Если он начинается со строки !add_role, бот интерпретирует ее как команду. Это означает, что пользователи сервера !add_roleдолжны запускать запросы к боту Discord со строкой. Конечно, вы можете использовать любую строку символов в качестве команды. Однако рекомендуется убедиться, что это строки символов, которые не встречаются в естественном языке.
Из сообщения, которое бот интерпретирует как правильную команду, с помощью функции Pythonsplit() узнаётся имя нужной роли. На следующем этапе выполняется поиск соответствующей роли на вашем сервере. Вы можете messageиспользовать для этой цели объект, который содержит различную информацию о вашем сервере под пунктом.message.guild
Если роль не существует и, следовательно, имеет значение «Нет», выводится сообщение об ошибке и функция завершается returnс оператором. В противном случае роль будет назначена соответствующим образом. Здесь используется функция add_rolesиз библиотеки dicord.py, которая messageтакже определена на объекте.








