Как создать бота в раздоре

Обновлено: 21.11.2024

Готовы ли вы повысить уровень своих навыков в Discord? Попробуйте создать бота для развлечения (и для изучения кода).

Платформа Discord делает почти все, что вам может понадобиться для общения с друзьями, семьей и коллегами, включая голосовые вызовы, обмен мгновенными сообщениями, чаты и обмен мультимедиа. Поэтому неудивительно, что популярность сервиса резко возросла. Но большинство новых пользователей не осознают, что боты Discord могут сделать платформу еще более мощной и что их относительно легко настроить, даже если вы не являетесь (уже) программистом.

Если вы вообще использовали Discord, вы, вероятно, столкнулись с ботом Discord. Возможно, кто-то из них приветствовал вас, когда вы присоединились к новому серверу, или загрузил дерганого пользователя, нарушившего правила. Иногда они настроены на автоматический ответ на определенные слова шутками и мемами. А некоторые мощные варианты ботов Discord информируют пользователей в данном чате обо всем: от наличия вакцины от COVID-19 до наличия в местном игровом магазине новейшей консоли.

Боты могут сильно различаться по функциям и сложности, и хотя вы можете получить базу кода для одного из них, вы можете создать свой собственный. Изучение того, как создать его с нуля, не только позволит вам настроить его под свои нужды, но и поможет вам понять внутреннюю работу бота и, что важно, как устранять неполадки, когда что-то пойдет не так.

Итак, сегодня мы будем использовать Python, который известен тем, что является довольно хорошим первым языком для всех, кто хочет научиться кодировать, благодаря его относительно легкому для чтения коду и встроенному функциональному форматированию ( отступ не только полезен для чтения, он необходим!). Вот что вам нужно для начала:

  • Правильный компьютер.
  • Установка Python.
  • Интегрированная среда разработки (IDE) — здесь вы будете печатать свой код.
  • Учетная запись Discord и сервер.
  • Кофе (необязательно, настоятельно рекомендуется).

Создание приложения-бота

Я исхожу из того, что если вы пытаетесь в этом разобраться, значит, у вас уже есть учетная запись и вы используете сервер Discord. Если нет, зарегистрируйтесь и сделайте сервер. Как только вы закончите с этим, вы захотите отправиться на портал разработчика. Слева нажмите вкладку "Приложения", затем нажмите кнопку "Новое приложение" в правом верхнем углу.

Камера Logitech StreamCam

Эта веб-камера выдает изображение 1080p со скоростью 60 кадров в секунду.
Она оптимизирована для всех популярных программ для потоковой передачи (OBS, Xsplt, Streamlabs и т. д.).

Здесь вы на самом деле не называете бота как такового — это приложение, которое содержит бота. Тем не менее, нет никаких причин, по которым приложение и бот не могут использовать одно и то же имя. Создав приложение, нажмите на него, а затем нажмите на ссылку Bot на боковой панели — здесь вы можете использовать процесс Discord Build-A-Bot, чтобы создать маленький автомат.

После создания бота вы должны получить сообщение "Появился дикий бот!" Поздравляем! Это бот! Я горжусь тобой. Назовите своего бота, и под полем «Имя пользователя» вы увидите раздел токена, где ваш токен скрыт за ссылкой.

Примечание о токенах ботов

Очень важно сохранить этот токен в секрете и обеспечить его сохранность. Токен — это уникальный идентификатор, специально предназначенный для вашего бота, и если кто-то еще получит его, он сможет получить контроль над вашим ботом. Это также то, как вы подключаете код, который вы пишете, к боту. Это настолько конфиденциальная информация, что даже это не очень хорошая идея хранить ее непосредственно в коде, но мы вернемся к этому позже.

Сейчас откройте текстовый редактор и вставьте туда токен. Сохраните его в любую папку, в которой вы планируете хранить любые материалы, связанные с ботами, желательно с именем вроде token.txt, чтобы избежать путаницы в будущем.

Предоставление разрешений боту

Далее вы должны предоставить разрешения своему боту. Когда ваш бот все еще открыт, нажмите OAuth2 на боковой панели и в разделе «Области действия» на этом экране установите флажок «Бот», а затем прокрутите вниз до «Разрешения бота» и подключите его к некоторым возможностям. Флажки, которые вы отмечаете, зависят от вас, а те, которые я выбрал на снимке экрана ниже, никоим образом не являются предписанием:

Пока вы это делаете, снова нажмите на бота на боковой панели и прокрутите вниз до пункта «Намерения привилегированного шлюза». Если вы хотите, чтобы ваш бот каким-либо образом реагировал на присутствие пользователей или использовал список участников, вам необходимо включить следующее:

Назначение бота вашему серверу

После того, как вы предоставили соответствующие разрешения, вам нужно будет скопировать ссылку под панелью "Области", открыть новую вкладку браузера и вставить ее в адресную строку/строку поиска, а затем нажать Enter. Это приведет вас к этому экрану, где вы выберете сервер (или то, что иногда упоминается в официальном API бота Python Discord как «гильдия»), на который вы поместите своего бота. Нажмите «Продолжить», и вы попадете на экран для подтверждения разрешений бота для этого сервера:

Примечание: разрешения вашего бота зависят от сервера, поэтому, если вы хотите просмотреть разрешения, которые были предоставлены вашему боту, вы должны сделать это с этого конкретного сервера. Если вы просто хотите просмотреть их, сделайте следующее: щелкните правой кнопкой мыши свой сервер в левом верхнем углу окна Discord, выберите «Настройки сервера», затем «Интеграции». Здесь вы увидите своего бота под заголовком «Боты и приложения». Нажмите на нее, и вы увидите все разрешения, которые вы предоставили своему боту. Если вы хотите изменить их, вам нужно пойти другим путем, щелкнув «Роли» вместо «Интеграции», а затем щелкнув своего бота и перейдя на вкладку «Разрешения» на следующем экране.

После того, как вы подтвердите разрешения, которые вы предоставили своему боту, нажмите «Авторизовать» и вуаля! Вы создали бота и назначили его серверу. Теперь вы должны увидеть сообщение «Появился дикий [имя бота]». Теперь пришло время запрограммировать бота! Если вы пытались раньше и потерпели неудачу, скорее всего, вы отказались от этого пункта. Попробуем еще раз — у вас получилось.

Вдохните жизнь в своего бота

Чтобы продолжить, убедитесь, что у вас установлен Python. Есть много руководств по этому поводу — мне нравится это. После того, как вы настроите Python, вам понадобится модуль Discord. Он содержит все специфичные для Discord команды, которые вам понадобятся. Если вы работаете в Windows, откройте командную строку, выполнив шаги, описанные здесь, и введите следующее, нажав Enter, когда закончите:

py -3 -m pip install -U discord.py

Если вы используете macOS или Linux, откройте Терминал и введите:

python3 -m pip install -U discord.py

Выполнив этот шаг, откройте любую интегрированную среду разработки, которую вы выбрали. Лично мне нравится Sublime, но вы можете использовать все, что захотите. Черт возьми, вы даже можете использовать обычный текстовый редактор, если вам не по себе. В открытом редакторе создайте новый файл и введите его в первой строке:

Это добавит библиотеку Discord в ваш код. Далее вам нужен способ связать вашего бота с этим кодом. Это означает вызов токена для бота — но помните, я сказал, что лучше не хранить этот токен непосредственно в вашем коде, а вместо этого хранить его в файле .txt? Следующая строка — это то, как вы получаете это из этого файла .txt:

В этой строке вы создаете свою первую переменную: строку символов, которую вы можете ввести для ссылки на определенное действие. Здесь TOKEN — это переменная, знак = сообщает компьютеру, что он собирается интерпретировать эту переменную как что-то, а следующий за ней текст — это что-то. Здесь open() сообщает компьютеру, что он собирается открыть файл, а внутри круглых скобок находится пара аргументов, первый из которых идентифицирует файл, который вы хотите открыть (если вы не вызвали свой файл token.txt, тогда замените токен здесь на то, что вы назвали), и r указывает ему режим, в котором вы хотите его открыть. Нам нужно только прочитать токен, поэтому мы используем r, чтобы открыть его в режиме чтения. Бит .readline() сообщает ему, какую строку читать. Поскольку читать нужно только одно, круглые скобки оставляйте пустыми.

Несогласие с намерениями

Из-за недавних изменений в том, как Discord обрабатывает подписки на события ботов, вам потребуется предпринять некоторые дополнительные шаги, чтобы ваш бот реагировал на определенные события, например, на присоединение участника. Discord называет эти специальные разрешения намерениями, а некоторые разрешения более высокого уровня, такие как мониторинг пользователей, называются привилегированными намерениями (переключатели, которые вы, возможно, переключали ранее в процессе). Помимо включения их во время настройки вашего бота, вам также необходимо включить намерения в коде. Во-первых, если вы просто хотите работать с подписками на события по умолчанию, определите намерения как значения по умолчанию:

Затем вы установите значение True для любого из дополнительных намерений. Кроме того, вам могут не понадобиться все значения по умолчанию, и вы можете захотеть, чтобы ваш бот реагировал только на ограниченное количество типов событий. В этом случае вместо вышеперечисленного вы можете сделать следующее:

Последний шаг, который мы сделаем в этом разделе, — это определение вашего клиента и обеспечение:

Клиент = discord.Client(намерения = намерения)

Программирование действий

Хорошо, теперь мы готовы сообщить нашему боту, что делать.Во-первых, полезно добавить оператор print(), чтобы у вас было подтверждение того, что ваша программа успешно выполнила вход в систему. Этот фрагмент кода напечатает или отобразит оператор в вашей среде выполнения (терминал или иной), подтверждающий, что ваш бот подключен и работает:

асинхронная защита on_ready():

print('Выполнен вход как '.format(client))

Причина, по которой мы используем здесь асинхронность, заключается в том, что Python по умолчанию является синхронным, то есть он запускает команду и ждет ее завершения, прежде чем двигаться дальше. Вы не обязательно хотите этого при общении с сервером, потому что, если сервер зависает или что-то в этом роде, то и ваша программа тоже. Если последующий код вообще не зависит от этой строки кода, почему бы не позволить вашей программе просто продолжать выполнять свой другой код? Таким образом, вы будете использовать асинхронность (сокращение от асинхронного), чтобы позволить вашему серверу продолжать выполнять ваш другой код. Когда Discord ответит, ваш код продолжит с того места, где он остановился, и выполнит все операторы, которые пришли после асинхронного обработчика, который вы использовали (в данном случае это on_ready()).

Далее давайте рассмотрим, как заставить вашего бота реагировать на команды. В качестве примера, пусть бот поздоровается с вами. Во-первых, вам нужно вызвать обработчик сообщений:

асинхронное определение on_message(сообщение):

Затем, чтобы ваш бот не отвечал сам себе, пусть код возвращается без каких-либо действий, если бот что-то говорит:

Наконец, команда, которая вызывает ответ бота:

Итак, весь блок вместе будет выглядеть так:

асинхронное определение on_message(сообщение):

Код предотвращения зацикливания здесь, конечно, не обязателен; бот в любом случае не застрянет, отвечая сам себе здесь. Однако по мере усложнения кода вы можете обнаружить, что случайно программируете бота, который потенциально может запускать сам себя и в конечном итоге попасть в цикл самозапуска и ответа — скажем, если вы создадите бота со случайной цитатой из фильма и один из ваших триггеров. слова на самом деле находятся в цитате из любой библиотеки цитат, которую вы захватили.

Следующий фрагмент кода позволяет вашему боту отправить приветственное сообщение. Вот где намерения, которые мы включили в верхней части нашего кода, являются необходимостью, поскольку для этого требуется, чтобы бот отслеживал список участников, что Discord считает привилегированным намерением:

асинхронное определение on_member_join(member):

print('есть что-то')

channel = client.get_channel([Идентификатор канала здесь])

await channel.send('Добро пожаловать на этот канал!')

Этот оператор печати предназначен для целей отладки. Во время тестирования приветственного сообщения у меня была фиктивная учетная запись, которая присоединялась и покидала сервер Discord, и долгое время не могла вызвать приветственное сообщение. Я вставил оператор печати, чтобы убедиться, что async def on_member_join(member): фактически запускает программу для запуска последующего кода. Если бы это было так, оператор печати в Терминале сказал бы «есть вещь». Это было не так, поэтому мне пришлось отлаживать. Ключевая строка кода оказалась наверху:

Клиент = discord.Client(намерения = намерения)

Мне нужен был этот код, чтобы бот (Клиент) получил разрешения, которые я ему дал. Вы делаете это, помещая аргумент в круглые скобки выше, который устанавливает намерения бота, равные тем, которые определены в верхней части нашего кода. Я, конечно, пропустил всю эту строку кода, поэтому мой бот на самом деле не использовал намерения, которые я для него включил.

Чтобы получить идентификатор канала: пока вы находитесь на канале, для которого вам нужен идентификатор, вам нужно посмотреть в адресной строке, где должен быть URL-адрес, за которым следуют два длинных набора чисел, разделенных по а/. Второй набор — это идентификатор вашего канала, а первый — идентификатор вашего сервера или гильдии. Используйте идентификатор канала в аргументе выше.

Наконец, компонент await этого набора кода необходим при использовании асинхронности. Если ваш бот собирается ответить, ему нужна какая-то функция обратного вызова, чтобы он знал, что делать, когда сервер, наконец, ответит; await выполняет эту функцию, в данном случае говоря боту отправить сообщение на ранее определенный канал: «Добро пожаловать на этот канал!»

За последние пять или около того лет Discord неизменно демонстрировал, что это платформа для обмена мгновенными сообщениями не только для геймеров, но и для всех, кто хочет общаться, общаться в видеочате или транслировать с друзьями в Интернете. Среди причин почему Discord боты. Боты могут помочь вам делать все, от автоматизации рутинных задач до воспроизведения музыки на вашем сервере, и в этом руководстве мы покажем вам, как создать бота Discord.

Сложность

Продолжительность

Что вам нужно

Хотя автоматизация является основной причиной использования бота Discord, вы действительно можете запрограммировать его так, чтобы он делал что угодно (по крайней мере, все, что вы можете втиснуть в код JavaScript). Вам также не нужны какие-либо знания в области программирования, чтобы начать работу. Наше руководство поможет вам начать создавать собственных ботов Discord, даже если вы никогда раньше не работали с кодом.

Как создать Discord-бота

Шаг 1. Загрузите Node.js и настройте учетную запись Discord.

Вам также понадобится программа текстового редактора, например Notepad++ для Windows, для написания кода.

Шаг 2. Теперь вам нужно создать приложение в Discord, чтобы ваш бот заработал. Это требует немного усилий, но это не слишком сложно. Цель здесь — получить токен авторизации для бота, чтобы Discord распознал ваш код и добавил его в бот на своих серверах.

Теперь в меню справа выберите Бот. В новом меню нажмите Добавить бота в разделе Создать бота. Если у вас есть только одно приложение — то, которое мы только что сделали, — оно должно появиться автоматически. В противном случае выберите его.

Шаг 3. В поле с пометкой Пользователь бота приложения найдите слова Токен: нажмите, чтобы показать. Нажмите на эту ссылку, и вы увидите строку текста. Это токен авторизации вашего бота, который позволяет вам отправлять ему код. Не делитесь им ни с кем — этот токен позволяет любому, у кого он есть, создавать код для бота, а это значит, что тот, у кого он есть, может управлять вашим ботом. Если вы считаете, что токен был скомпрометирован, хорошая новость заключается в том, что вы можете легко создать новый с помощью кнопки Создать новый токен. Отметьте свой токен. Он понадобится вам через секунду.

Шаг 4. Теперь прокрутите вверх до поля с пометкой Сведения о приложении и найдите свой идентификатор клиента (длинное число). Скопируйте номер и добавьте его в этот URL вместо слова CLIENTID.

Скопируйте URL-адрес с вашим идентификационным номером клиента в адресную строку браузера. Это приведет вас на веб-сайт, где вы сможете указать Discord, куда отправить своего бота. Вы узнаете, что это сработало, если откроете Discord в приложении или браузере и перейдете на свой сервер. Канал сообщит, что к комнате присоединился бот, и вы увидите это в правом боковом меню под списком онлайн-участников.

Шаг 5. Пока вы это делаете, вы также можете создать папку в легкодоступном месте на своем компьютере, где вы сможете хранить все файлы своего бота. Назовите его как-нибудь просто, например «DiscordBot» или «MyBot», чтобы вы точно знали, что это такое.

Шаг 6. Вы создадите три файла для своего бота в текстовом редакторе. В первое вставьте этот код:

«токен»: «Токен вашего бота»

Замените «Токен вашего бота» на токен, который вы создали ранее на странице приложения вашего бота. Убедитесь, что токен находится внутри кавычек. Затем сохраните файл в папке бота Discord, которую вы создали на рабочем столе, используя имя файла «auth.json». Не забудьте сохранить его как файл .txt — он не будет работать, если это .txt вместо .json.

Создайте новый файл и вставьте в него этот код:

«description»: «Мой первый Discord-бот»,

"автор": "Ваше имя",

Замените имя автора своим именем, если хотите; вы также можете изменить описание на что-то другое, если хотите, чтобы оно больше соответствовало тому, что вы делаете, что будет удобно для запоминания того, что должен делать ваш бот.

Сохраните этот файл как package.json в папке бота Discord.

Шаг 7. Необходимо создать еще один текстовый файл, и это важный файл, который управляет поведением вашего бота. Вы захотите познакомиться с JavaScript, чтобы действительно иметь полный контроль над своим ботом и знать, что вы делаете, но если вы новичок в программировании и просто хотите что-то сделать, вы можете скопировать и вставить этот код в файл. сделать простого бота, который будет приветствовать вас на вашем сервере.

(Спасибо пользователю Medium Ренемари Падилло, чье руководство по созданию бота помогло нам создать это. Ознакомьтесь с его руководством, чтобы узнать об устранении неполадок в коде и получить другие советы.)

var Discord = require('discord.io');

var logger = require('winston');

var auth = require('./auth.json');

// Настраиваем параметры регистратора

// Инициализировать бота Discord

var bot = новый Discord.Client(

bot.on('готово', функция (evt)

bot.on('сообщение', функция (пользователь, идентификатор пользователя, идентификатор канала, сообщение, событие)

Этот код устанавливает бота Discord, который будет отвечать на определенные сообщения, в частности, на все, что начинается с «!» персонаж. В частности, мы программируем бота так, чтобы он реагировал на команду «!intro», поэтому, если кто-то введет ее на вашем сервере, пока на нем находится бот, бот ответит запрограммированным сообщением. В нашем коде мы определили сообщение как «Приветствую! Добро пожаловать на сервер!» Вы можете изменить как подсказку, так и ответное сообщение, переопределив их в приведенном выше коде. Просто убедитесь, что сообщения заключены в одинарные кавычки.

Сохраните этот последний текстовый файл как «bot.js» в папке бота Discord.

Шаг 8. На ПК с Windows вы можете легко открыть командную строку, щелкнув значок Windows и введя в поле «Командная строка». Когда он откроется, введите «cd», а затем путь к папке. На нашем тестовом компьютере команда выглядит так: «c:UsersPhil’s DesktopDesktopDiscordBot». Это должно изменить строку командной строки, чтобы включить путь к вашей папке.

Кроме того, вы можете перейти к своей папке в Windows и, удерживая Shift, щелкнуть правой кнопкой мыши пустую область папки, а затем выбрать Открыть командную строку.. р>

Шаг 9. Пришло время использовать Node.js. В командной строке с папкой бота Discord в строке пути к файлу введите «npm install discord.io winston –save». Это автоматически установит файлы, необходимые для вашего бота Discord, прямо в папку.

Это должно обеспечить вас всеми необходимыми файлами.

Шаг 10. Теперь вы готовы к работе. Чтобы попробовать запустить бота, введите «node bot.js» в командной строке (убедитесь, что вы все еще находитесь в папке бота Discord).

Чтобы проверить функциональность своего бота, вернитесь на свой сервер Discord и попробуйте ввести «!intro» или «!» за которым следует сообщение с подсказкой, которое вы создали в файле «bot.js». Если вы правильно закодировали своего бота, отправив эту команду, ваш бот ответит вам установленным сообщением.

Поздравляем, вы гордитесь тем, что создали бота Discord.

Самое замечательное в Discord — это сообщество с общими интересами и навыками. Пользователи Discord всегда создают новые инструменты для улучшения сервиса, включая ботов. Некоторые создатели загружают своих ботов в общедоступные базы данных и позволяют другим загружать ботов и использовать их для своих серверов. Боты, перечисленные в базах данных, могут иметь различные функции, поэтому вы, скорее всего, сможете найти то, что вам нужно. Прежде чем создавать своего бота, немного изучите Discord, чтобы узнать, не создал ли кто-то еще именно того бота, который вам нужен.

Рассказывайте анекдоты, включайте музыку в своей трансляции, приветствуйте новых пользователей на своем сервере. что не может бот Discord? Ничего, когда за программированием стоите вы.

В Discord люди сотрудничают, чтобы делиться идеями, обсуждать проекты и болтать о жизни и увлечениях в целом. Но боты Discord могут сделать ваши чаты более увлекательными в дополнение к автоматизации задач. Это может быть что угодно: от случайных шуток до воспроизведения определенной музыки и т. д.

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

Приступим.

1. Создайте свой Discord-сервер

Прежде чем создавать бота Discord, необходимо начать с создания сервера, так как это место назначения бота.

Сервер Discord или чат — это место, где вы управляете каналами и общением на платформе.

Чтобы создать сервер Discord, перейдите на веб-сайт Discord и войдите в свою панель управления Discord. Или создайте учетную запись, если у вас ее еще нет.

После входа в панель управления выполните следующие действия, чтобы создать сервер Discord:

    Нажмите значок добавления (+) на левой боковой панели.

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

2. Настройте и создайте своего бота Discord

Далее вы хотите создать бота Discord внутри приложения Discord, перейдя на портал разработчиков Discord. Или вместо этого вы можете ввести следующий URL-адрес в поле адреса браузера:

В консоли разработчика:

    Нажмите «Новое приложение» в левом верхнем углу.

Теперь нужно связать ваш сервер с ботом.

Связать сервер с вашим ботом Discord

Как мы уже упоминали, бот работает в основном внутри сервера. Следовательно, после создания бота Discord, как это сделали мы, вам придется назначить его серверу, на котором вы хотите, чтобы он работал.

Поэтому, как только вы скопируете сгенерированный URL-адрес, выполните следующие шаги, чтобы связать свою комнату чата с ботом Discord:

  1. Вставьте скопированный URL-адрес в адресную строку браузера и войдите в систему.
  2. В приглашении нажмите «Выбрать сервер» и выберите тот, который вы создали ранее.

Теперь вы создали бота Discord. Вернитесь на панель управления сервером, и вы увидите робота на правой боковой панели. Но, как видите, в настоящее время он не в сети. Так что пока вы не запрограммируете его на это, он не будет работать.

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

3. Запрограммируйте своего бота Discord с помощью Python

В этом руководстве мы будем использовать Python и размещать бота Discord на локальном компьютере. Вы можете разместить свой в облачных сервисах, таких как Heroku, если хотите, когда все настроено. Давайте углубимся.

Настройка Python и библиотек

Чтобы запрограммировать бота Discord с помощью Python, вы будете использовать модуль discord.py, который работает только с Python 3.5.3 или более поздней версии.

Вы можете проверить версию Python, установленную на вашем ПК, введя в терминале следующую команду:

Если Python обновлен, откройте терминал в корне проекта. Затем активируйте виртуальную среду Python.

Кроме того, вам потребуется установить discord.py и пакет голосовой поддержки под названием discord.py[voice].

При активной виртуальной среде выполните в терминале следующую команду, чтобы установить эти пакеты:

Отправить сообщение с помощью бота Discord

Здесь вы запрограммируете своего бота Discord отвечать пользовательским сообщением, когда вы отправляете текст в канале.

Но сначала введите следующий код в верхней части скрипта, чтобы инициализировать бота Discord:

Переменная бота вызывает пользовательские команды из класса команд. И command_prefix в скобках позволяет указать символ, который ему предшествует. Такие символы, как знак доллара ($), восклицательный знак (!), амперсанд (&) и другие, являются распространенными префиксами, которые предшествуют командам бота.

Но в нашем случае мы отключили префикс. Так что он вам не нужен при обучении бота Discord.

Обратите внимание, что пользовательские команды являются функциями Python:

Теперь запустите скрипт Python в своем терминале. Затем перейдите в Discord и отправьте «Привет», чтобы увидеть, как разворачивается волшебство.

Присмотревшись, вы увидите, что мы использовали асинхронный метод ожидания для обслуживания функции. Это важно, так как это единственный способ связи модуля с Discord.

Экземпляр ctx представляет собой контекст и выполняет множество функций. Но в этом случае он позволяет вашему боту Discord отправить сообщение.

Приветствуйте новых участников канала с помощью своего бота

В этом примере вы увидите, как использовать события для запуска приветствия, когда кто-то присоединяется к вашему серверу. Вы также узнаете, как отобразить имя пользователя нового участника и сервер, к которому он присоединился, в приветственном сообщении.

Вместо этого мы будем использовать @bot.event. Вот как это работает:

Функция on_member_join — это тип события. Однако есть много других. Например, метод on_ready широко используется для проверки готовности бота.

Кроме того, условие, следующее за оператором if, проверяет, существует ли подключенный сервер (гильдия или чат). Если это так, он использует метод строкового формата Python для вывода имени пользователя нового участника и сервера, к которому он присоединился.

Теперь попросите друга присоединиться к вашему серверу, чтобы посмотреть, что произойдет. Однако вы можете сначала попробовать это с фиктивной учетной записью Discord, чтобы убедиться, что это работает.

Попросите бота Discord присоединиться к аудиоканалу или покинуть его

Теперь давайте расширим код. И на этот раз вы скажете своему боту присоединиться к звуковому каналу или покинуть его, когда он получит определенную команду.

В приведенном ниже примере кода бот Discord присоединяется к вам в аудиоканале, когда вы вводите «ввод»:

Условие в операторе if проверяет, присоединились ли вы уже к аудиоканалу. Если это так, ключевое слово await связывает с ним вашего бота Discord.

Это означает, что вы должны подключиться к аудиоканалу, прежде чем команда сработает.

Примечание. Обязательно останавливайте и перезапускайте скрипт Python после каждого обновления. Это позволяет Python синхронизировать ваши изменения.

После повторного выполнения скрипта Python, открытия Discord и ввода введите Enter — теперь вы увидите, что ваш бот Discord присоединился к аудиоканалу.

Попросить бота покинуть канал так же просто, как добавить его.

Следующий код сообщает ему покинуть канал, когда вы вводите соответствующую команду. В этом случае мы будем использовать слово «оставить»:

Остановитесь и снова выполните скрипт. Бот Discord теперь должен покинуть аудиоканал, когда вы отправляете команду «покинуть».

Продолжайте улучшать своего Discord-бота

Вот оно! Вы сделали себе функционального бота Discord. Соберите примеры блоков кода вместе и продолжайте добавлять функции в своего бота Discord. Например, вы можете указать ему воспроизводить музыку с вашего ПК или потоковой платформы, как только он присоединится к аудиоканалу.

Боты Discord очень интересны в использовании. Если вы еще не автоматизируете с их помощью задачи в своих чатах, вы упускаете серьезную эффективность.

Если вы еще не знакомы с Discord, это как Slack, Teams или Mattermost, хорошая бесплатная альтернатива.

Во-первых, если у вас нет учетной записи Discord, вам необходимо ее создать ;-).

Включить режим разработчика

Чтобы иметь достаточные права, вам необходимо включить режим разработчика в своей учетной записи Discord. Для этого в приложении Discord нажмите кнопку «Настройки пользователя»:

Затем нажмите «Дополнительно» и включите режим разработчика:

Создать приложение Discord

Теперь вы можете заполнить описание и добавить значок в только что созданное приложение.

Создать бота

Нажмите на меню бота, а затем на кнопку "Добавить бота".

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

Сообщение "Появился дикий бот!" должен появиться в вашем интерфейсе:

Теперь перейдите в меню OAuth2 и нажмите кнопку "Копировать", чтобы получить информацию об идентификаторе клиента:

Создать ссылку для приглашения бота

Чтобы связать нашего бота с одним из наших серверов Discord, нам нужно создать ссылку-приглашение со скопированным идентификатором клиента:

Выйти из полноэкранного режима

Когда мы переходим по этому URL-адресу, появляется окно подключения:

Выберите сервер Discord (который вы создали или имеете права администратора), затем нажмите кнопку «Продолжить» и подтвердите, что вы разрешаете разрешения для своего бота.

Теперь вашему приложению разрешено делать «что-то» на вашем сервере Discord :-).

Теперь вы должны увидеть своего бота (как и других участников) на своем сервере Discord:

Сохранить токен

И последнее, что нужно сделать, чтобы наше приложение Go могло подключиться к серверу Discord: нам нужен токен.

Для этого вернитесь на веб-сайт разработчиков приложений Discord, затем щелкните меню бота, а затем нажмите кнопку «Копировать», чтобы скопировать токен (и сохранить его где-нибудь):

Вам нужно будет вставить этот токен далее в эту статью ;-).

Пришло время создать нашего замечательного бота!

Хорошо, все настроено в Discord, вы знаете, я люблю конкретные вещи, так что пришло время поиграть с Go и написать код нашего простого (но такого милого) бота! :-D

Инициализация

Мы создали наш репозиторий Git в предыдущей статье, поэтому теперь нам просто нужно получить его локально:

Выйти из полноэкранного режима

Мы создадим папку go-gopher-bot-discord для нашего CLI-приложения и зайдем в нее:

Выйти из полноэкранного режима

Теперь нам нужно инициализировать модули Go (управление зависимостями):

Выйти из полноэкранного режима

Это создаст файл go.mod следующего вида:

Выйти из полноэкранного режима

Прежде чем запустить наше суперприложение CLI, в соответствии с передовой практикой мы создадим простую организацию кода.

Создайте следующую организацию папок:

Выйти из полноэкранного режима

И это? Да, остальная часть нашего кода будет создана в ближайшее время ;-).

Чего мы хотим?

Подождите, что мы хотим от нашего бота?

Нам нужен бот для Discord, который будет:

  • Отображать симпатичного суслика, когда мы будем вводить !gopher на нашем любимом(ых) сервере(ах) Discord
  • Отобразить список доступных сусликов, когда мы введем !gophers
  • Отобразить случайного суслика, когда мы введем !random

DiscordGo

Для этого нам нужен клиент, взаимодействующий с серверами Go. Не забывайте, что в Go существует множество полезных и классных библиотек, нам не нужно изобретать велосипед, поэтому мы будем использовать библиотеку DiscordGo.

DiscordGo — это пакет Go, обеспечивающий низкоуровневую привязку к API клиента чата Discord. DiscordGo почти полностью поддерживает все конечные точки API Discord, интерфейс веб-сокетов и голосовой интерфейс.
Круто!

Давайте установим DiscordGo, чтобы использовать его в нашем коде:

Выйти из полноэкранного режима

Хорошо, теперь мы можем создать файл main.go и скопировать/вставить в него следующий код.

Код Go организован в пакеты. Итак, сначала мы инициализируем пакет, называемый main, и все зависимости/библиотеки, которые нам нужно импортировать и использовать в нашем основном файле:

Выйти из полноэкранного режима

Затем мы инициализируем переменную Token, которая будет необходимым параметром для нашего приложения Bot, URL-адрес KuteGo API и функцию init(), которые определяют, что нам нужен токен:

Выйти из полноэкранного режима

И функция main(), которая создает сеанс Discord, регистрируется в событиях MessageCreate и запускает нашего бота:

Выйти из полноэкранного режима

Далее нам нужно определить и реализовать структуру Gopher и функцию messageCreate, которая будет вызываться каждый раз при отправке сообщения на наш сервер Discord.

Выйти из полноэкранного режима

Давайте копаться в коде, шаг за шагом

Я знаю, что последний блок кода огромен, и есть небольшие советы и механизмы, которые нужно знать, поэтому давайте копаться в блоках кода, шаг за шагом и медленно :-).

Игнорировать все сообщения, созданные ботом

Каждый раз, когда на сервере Discord отправляется сообщение, выполняется наша функция, поэтому первым делом нужно сказать, что мы игнорируем все сообщения, созданные самим ботом:

Выйти из полноэкранного режима

Если отправленное сообщение равно !gopher

Если на сервере Discord отправляется текстовое сообщение !gopher, мы запрашиваем у dr-who Gopher API KuteGo, закрываем тело ответа, а затем, если все в порядке, отправляем сообщение со встроенным нашим милым Доктором Кто Gopher.

Выйти из полноэкранного режима

API KuteGo

Как вы, возможно, заметили, в нашем приложении мы называем URL-адрес, начинающийся с "https://kutego-api-", но что это такое?

На самом деле это REST API под названием KuteGo API, созданный моей подругой Гаэль Акас. Этот API работает с моим репозиторием Gophers GitHub и размещен в частном Google Cloud Run.

Выйти из полноэкранного режима

Поэтому, если вы хотите использовать его, вы можете установить его локально (или где угодно) и изменить URL-адрес kutego-api на localhost:8080 ;-).

Если отправленное сообщение равно !random

Если на сервере Discord отправляется !random текстовое сообщение, мы запрашиваем у KuteGo API случайного Gopher, закрываем тело ответа и затем, если все в порядке, отправляем сообщение со встроенным нашим милым случайным Gopher. Сюрприз!

Выйти из полноэкранного режима

Если отправленное сообщение равно !gophers

Давайте приступим к разбору JSON :-D.

В Golang, когда вам нужно отобразить информацию, содержащуюся в объекте JSON, появляется несколько новых слов: marshal и unmarshal.

Unmarshal — это способ превратить документ JSON в структуру Go.
У Marshal все наоборот: мы включаем Go struct to JSON document.

Поэтому, когда мы разархивируем документ JSON, мы преобразуем его в структурированные данные, к которым у нас есть легкий доступ. Если документ не вписывается в структуру, он выдаст ошибку.

Итак, в следующем блоке кода:

  • мы инициализируем структуру с именем Gopher, которая содержит имя и будет соответствовать имени слова в документе JSON
  • мы вызываем маршрут /gophers из KuteGo API
  • читаем тело ответа (чтобы получить массив байтов)
  • мы закрываем тело ответа (хорошая практика, показанная в предыдущей статье ;-))
  • мы создаем массив Gopher (наша структура Go, содержащая только ту информацию, которую мы хотим отображать/обрабатывать)
  • мы помещаем документ JSON в наш массив Gopher
  • мы создаем список сусликов только с именами всех существующих сусликов
  • отправляем сообщение на сервер Discord с этим списком сусликов

Выйти из полноэкранного режима

Подождите. strings.Builder что это такое?

В Go, как и в других языках, для объединения и построения строк существует несколько способов сделать это.

Самый простой способ — просто объединить строки с помощью оператора + следующим образом:

Выйти из полноэкранного режима

Легко, но не очень эффективно, когда мы объединяем множество строк ;-).

Еще одно (но старое) решение — использовать bytes.Buffer, а затем преобразовать его в строку после объединения всего:

Выйти из полноэкранного режима

И да, выбранное нами решение, рекомендуемое и новое с версии Go 1.10, заключается в использовании строк. Builder:

Выйти из полноэкранного режима

"Строитель используется для эффективного построения строки с использованием методов Write. Он сводит к минимуму копирование памяти. Нулевое значение готово к использованию."

Проверьте!

После объяснения кода пришло время протестировать нашего бота!

Во-первых, вы можете экспортировать токен:

Выйти из полноэкранного режима

Давайте прямо сейчас запустим локально нашего бота:

Выйти из полноэкранного режима

Ваш бот запущен на вашем локальном компьютере и теперь подключен к Discord.

Давайте введем несколько сообщений на наш сервер Discord:

Отлично, когда мы вводим команду !gopher , появляется наш Who Gopher!

Создай!

Теперь ваше приложение готово, вы можете его создать.
Для этого, как и в предыдущих статьях, мы будем использовать Taskfile для автоматизации наших общих задач.

Поэтому и для этого приложения я создал файл Taskfile.yml со следующим содержимым:

Выйти из полноэкранного режима

Благодаря этому мы можем легко создать наше приложение:

Выйти из полноэкранного режима

Давайте проверим это еще раз с нашим новым исполняемым двоичным файлом:

Выйти из полноэкранного режима

или через задачу:

Выйти из полноэкранного режима

Отлично, команда !gophers тоже работает, теперь мы знаем всех существующих Gophers :-).

И у нас есть случайный суслик!

Заключение

Как вы видели в этой и предыдущих статьях, на Go можно создавать приложения: CLI, REST API. но и забавные приложения, такие как Discord Bot! :-)

Если вы заинтересованы в создании собственного бота для Discord в Go, доступно несколько примеров с DiscordGo.

В следующих статьях мы создадим другие виды/типы приложений в Go.

Читайте также: