Содержание
- 1 Как создать учетную запись Discord Bot
- 2 Как пригласить вашего бота присоединиться к серверу
- 3 Как написать код для базового бота Discord с помощью библиотеки discord.py
- 4 Как улучшить бота
- 5 Как добавить в бота обнадеживающие сообщения
- 6 диссонанс
- 7 Добавление игр в библиотеку Discord
- 8 Игровая активность
- 9 Discord Library
- 10 Александр Пиндык
- 11 Настройка проекта в Unity Cloud Build
- 12 Создание и настройка Discord-гильдии (сервера)
- 13 Создание и настройка Discord-бота
- 14 Настройка Discord оповещения для Unity Cloud Build
- 15 Создание Discord-бота на Python
- 16 Итог
Асинхронная библиотека discord.py содержит все что нужно для бота, с помощью нее даже можно работать с голосовыми каналами сервера. В этой статье я расскажу как создать простенького бота для вашего discord сервера.
Получение токена и Client ID для вашего бота
Для получения токена и ID бота небходимо создать свое приложение и в разделе General Information скопировать Client ID. А в разделе настроек создать бота и скопировать его токен. Задача не сложная, думаю все с этим справятся.
Собственно пишем бота
Устанавливаем discord.py с помощью pip:
pip install discord
После успешной установки создаем файл bot.py, где будем писать бота. Импортируем все необходимое:
import discord from discord.ext import commands
Создаем переменную с вашим токеном, про который я писал выше:
TOKEN = 'Ваш токен'
Про токен Создаем тело бота:
bot = commands.Bot(command_prefix='!') #инициализируем бота с префиксом '!'
Для начала сделаем простенькую команду, аргумент которой бот будет просто пересылать:
@bot.command(pass_context=True) #разрешаем передавать агрументы async def test(ctx, arg): #создаем асинхронную фунцию бота await ctx.send(arg) #отправляем обратно аргумент
И в конце запускаем бота с вашим токеном:
bot.run(TOKEN)
В итоге должно получится вот такое:Код
import discord from discord.ext import commands TOKEN = 'Ваш токен' bot = commands.Bot(command_prefix='!') @bot.command(pass_context=True) # разрешаем передавать агрументы async def test(ctx, arg): # создаем асинхронную фунцию бота await ctx.send(arg) # отправляем обратно аргумент bot.run(TOKEN)
Теперь необходимо добавить бота на сервер. Сделать это можно с помощью ссылки:
https://discordapp.com/oauth2/authorize?&client_id={Client ID}&scope=bot&permissions={Права, например 66395456}
Число необходимых прав можно получить в разделе настроек бота. Теперь можно запускать бота:
python bot.py
После нескольких секунд, можно заметить его в сети: И наконец-то попробовать отправить команду:
Заключение
Вот так можно легко запустить у себя на сервере бота. Как можно заметить библиотека делает практически все за тебя и остается только добавлять свой функционал с использованием python. В следующий раз я покажу как следить за событиями, подключатся к голосовым каналам (избегая проблем с linux и Windows), использовать роли и права участников и другое. Надеюсь, статья была Вам полезна, удачи!22.12.2020 в 21:12
Из этого туториала Вы узнаете, как полностью создать собственного бота Discord в облаке.
Вам не нужно ничего устанавливать на свой компьютер, и вам не нужно ничего платить за размещение своего бота.
Мы будем использовать целый ряд инструментов, в том числе Discord API, библиотеки Python, и платформы облачных вычислений под названием Repl.it.
Как создать учетную запись Discord Bot
Чтобы работать с библиотекой Python и API Discord, мы должны сначала создать учетную запись Discord Bot.
Вот шаг к созданию учетной записи Discord Bot.
1. Убедитесь, что вы вошли на сайт Discord.
2. Перейдите на страницу приложения.
3. Щелкните кнопку «Новое приложение».
4. Дайте приложению имя и нажмите «Создать».
5. Перейдите на вкладку «Бот» и нажмите «Добавить бота». Вам нужно будет подтвердить действие, нажав «Yes, do it!»
Оставьте настройки по умолчанию для Public Bot и Require OAuth2 Code Grant.
Ваш бот создан. Следующим шагом будет копирование токена.
Этот токен является паролем вашего бота, поэтому не сообщайте его никому. Это может позволить кому-то войти в ваш бот и делать разные плохие вещи.
Вы можете регенерировать токен, если он случайно станет доступен.
Как пригласить вашего бота присоединиться к серверу
Теперь вам нужно подключить своего пользователя-бота к серверу. Для этого вы должны создать для него URL-адрес приглашения.
Перейдите на вкладку «OAuth2». Затем выберите «бот» в разделе «scopes».
Теперь выберите нужные разрешения для бота. Наш бот будет в основном использовать текстовые сообщения, поэтому нам не нужно много разрешений. Вам может потребоваться больше, в зависимости от того, что вы хотите, чтобы ваш бот делал. Будьте осторожны с разрешением «Администратор».
После выбора соответствующих разрешений нажмите кнопку «Copy» над разрешениями. Это скопирует URL-адрес, который можно использовать для добавления бота на сервер.
Вставьте URL-адрес в свой браузер, выберите сервер, на который будет приглашен бот, и нажмите «Авторизовать».
Чтобы добавить бота, вашей учетной записи необходимы разрешения «Управление сервером».
Теперь, когда вы создали пользователя-бота, мы начнем писать код Python для бота.
Как написать код для базового бота Discord с помощью библиотеки discord.py
Мы будем использовать библиотеку Python discord.py, чтобы написать код для бота. discord.py – это оболочка API для Discord, которая упрощает создание бота Discord на Python.
Как создать реплику и установить disocrd.py
Вы можете разработать бота на своем локальном компьютере с помощью любого редактора кода. Однако в этом уроке мы будем использовать Repl.it, потому что это упростит всем пользователям следовать его указаниям. Repl.it – это онлайн-среда IDE, которую вы можете использовать в своем веб-браузере.
Создайте новый Repl и выберите «Python» в качестве языка.
Чтобы использовать библиотеку discord.py, просто напишите import discord
вверху main.py
. Repl.it автоматически установит эту зависимость, когда вы нажмете кнопку «Run».
Если вы предпочитаете кодировать бота локально, вы можете использовать эту команду в MacOS для установки discord.py:
python3 -m pip install -U discord.py
Возможно, вам придется использовать pip3
вместо pip
.
Если вы используете Windows, вы должны вместо этого использовать следующую строку:
py -3 -m pip install -U discord.py
Как настроить события Discord для вашего бота
discord.py вращается вокруг концепции событий. Событие – это то, что вы слушаете, а затем реагируете. Например, когда происходит сообщение, вы получаете событие об этом, на которое можете ответить.
Сделаем бота, который отвечает на конкретное сообщение. Этот простой код бота вместе с объяснением кода взят из документации discord.py. Позже мы добавим в бота дополнительные функции.
Добавьте этот код в main.py. (Вы можете назвать файл как-нибудь иначе, только не discord.py.) Я вскоре объясню, что делает весь этот код.
import discord import os client = discord.Client() @client.event async def on_ready(): print('We have logged in as {0.user}'.format(client)) @client.event async def on_message(message): if message.author == client.user: return if message.content.startswith('$hello'): await message.channel.send('Hello!') client.run(os.getenv('TOKEN'))
Когда вы создали своего пользователя-бота в Discord, вы скопировали токен. Теперь мы собираемся создать файл .env
для хранения токена. Если вы запускаете свой код локально, вам не нужен файл .env
. Просто замените os.getenv('TOKEN')
токеном.
.env
файлы используются для объявления переменных среды. На Repl.it большинство создаваемых вами файлов видны всем, но .env
файлы видны только вам. Другие люди, просматривающие публичный ответ, не смогут увидеть содержимое файла .env
.
Поэтому, если вы разрабатываете на Repl.it, включайте в файл .env
только личную информацию, такую как токены или ключи.
Нажмите кнопку «Добавить файл» и создайте файл с именем .env
.
Внутри файла добавьте следующую строку, включая ваш фактический токен, который вы скопировали ранее:
TOKEN=[paste token here]
Теперь давайте рассмотрим, что делает каждая строка в коде вашего бота Discord.
- Первая строка импортирует библиотеку discord.py.
- Вторая строка импортирует библиотеку os, но она используется только для получения переменной
TOKEN
из файла.env
. Если вы не используете.env
файл, эта строка вам не нужна. - Затем мы создаем экземпляр
Client
. Это связь с Discord. - Декоратор
@client.event()
используется для регистрации события. Это асинхронная библиотека, поэтому все делается с помощью обратных вызовов. Обратный вызов – это функция, которая вызывается, когда происходит что-то еще. В этом коде событиеon_ready()
вызывается, когда бот готов к использованию. Затем, когда бот получает сообщение, вызывается событиеon_message()
. - Триггер событий каждый раз вызывает
on_message()
, когда принимается сообщение, но мы не хотим, что-то делать, если сообщение от самих себя. Поэтому, еслиMessage.author
это то же самое, что иClient.user
, просто делаем return. - Затем мы проверяем
Message.content
, начинается ли с'$hello'
. Если да, то бот отвечает'Hello!'
в канал, в котором он использовался. - Теперь, когда бот настроен, последняя строка запускает бот с токеном входа. Он получает токен из файла
.env
.
У нас есть код для бота, поэтому теперь нам просто нужно его запустить.
Как запустить бота
Теперь нажмите кнопку запуска вверху, чтобы запустить своего бота в repl.it.
Если вы пишете бота локально, вы можете использовать эти команды в терминале для запуска бота:
В Windows:
py -3 main.py
В других системах:
python3 main.py
Теперь перейдите в свою комнату в Discord и введите «$hello». Ваш бот должен ответить «Hello!».
Как улучшить бота
Теперь, когда у нас есть базовый бот, мы его улучшим. Не зря он называется «Encourage Bot».
Этот бот будет отвечать сообщением ‘Hello!’ всякий раз, когда кто-то отправляет сообщение, содержащее грустное или удручающее слово.
Любой желающий сможет добавить ободряющие сообщения для использования бота, а отправленные пользователем сообщения будут храниться в базе данных Repl.it.
Бот также вернет случайную вдохновляющую цитату из API, когда кто-то наберет в чате сообщение «$inspire».
Мы начнем с добавления функции «$inspire».
Как добавить в бота вдохновляющие цитаты
Мы будем получать вдохновляющие цитаты из API под названием zenquotes.io. Нам нужно импортировать еще пару модулей Python, добавить функцию get_quote()
и обновить код нашего бота, чтобы вызвать функцию.
Вот обновленный код. После кода я объясню новые части.
import discord import os import requests import json client = discord.Client() def get_quote(): response = requests.get("https://zenquotes.io/api/random") json_data = json.loads(response.text) quote = json_data[0]['q'] + " -" + json_data[0]['a'] return(quote) @client.event async def on_ready(): print('We have logged in as {0.user}'.format(client)) @client.event async def on_message(message): if message.author == client.user: return if message.content.startswith('$inspire'): quote = get_quote() await message.channel.send(quote) client.run(os.getenv('TOKEN'))
Теперь нам нужно импортировать модуль requests
. Этот модуль позволяет нашему коду делать HTTP-запрос для получения данных из API. API возвращает JSON, и модуль json
упрощает работу с возвращенными данными.
Функция get_quote()
очень проста. Во-первых, она использует модуль запросов для запроса данных из URL-адреса API. API возвращает случайную вдохновляющую цитату. Эту функцию можно легко переписать для получения котировок из другого API, если текущий перестанет работать.
Затем внутри функции мы используем json.loads()
для преобразования ответа API в JSON. Методом проб и ошибок я понял, как перевести цитату из JSON в нужный строковый формат. Цитата возвращается из функции в виде строки.
Последняя часть кода обновляется ближе к концу. Ранее он искал сообщение, которое начиналось с «$hello». Теперь он ищет “$inspire”. Вместо того, чтобы возвращать «Hello!», Он получает цитату quote = get_quote()
и возвращает цитату.
На этом этапе вы можете запустить свой код и попробовать его.
Как добавить в бота обнадеживающие сообщения
Теперь мы реализуем функцию, при которой бот отвечает обнадеживающими сообщениями, когда пользователь отправляет сообщение с грустным словом.
Как добавить грустные слова в бота
Для начала нам нужно создать список Python, содержащий грустные слова, на которые будет отвечать бот.
Добавьте следующую строку после создания переменной client
:
sad_words = ["sad", "depressed", "unhappy", "angry", "miserable"]
Не стесняйтесь добавлять в список больше слов.
Как добавить в бота обнадеживающие сообщения
Теперь мы добавим список ободряющих сообщений, которыми бот ответит.
Добавьте следующий список после созданного вами списка sad_words
:
starter_encouragements = [ "Cheer up!", "Hang in there.", "You are a great person / bot!" ]
Как и раньше, не стесняйтесь добавлять в список другие фразы по вашему выбору. Сейчас я использую всего три элемента, потому что позже мы добавим возможность пользователям добавлять больше ободряющих фраз для использования ботом.
Как отвечать на сообщения
Теперь нам нужно обновить нашего бота, чтобы он использовал два созданных нами списка. Во-первых, импортируйте модуль random
, потому что бот будет случайным образом выбирать сообщения из списка. Добавьте следующую строку в операторы импорта в верхней части кода:
import random
Теперь мы обновим функцию on_message()
, чтобы проверять все сообщения, чтобы увидеть, содержат ли они слово из списка sad_words
. Если будет найдено грустное слово, бот отправит случайное сообщение из списка.
Вот обновленный код:
async def on_message(message): if message.author == client.user: return msg = message.content if msg.startswith('$inspire'): quote = get_quote() await message.channel.send(quote) if any(word in msg for word in sad_words): await message.channel.send(random.choice(starter_encouragements))
Это хорошее время для тестирования бота. Теперь вы знаете достаточно, чтобы создать собственного бота.
Источник:
#Python
диссонанс
Discord – это, прежде всего, коммуникационное приложение. Он в первую очередь нацелен на геймеров, но другие сообщества, как известно, используют его. Например, многие крипто-стартапы обращаются к этому приложению чата, потому что оно не имеет ограничения на количество пользователей, присутствующих на канале, и потому, что его очень легко модерировать, дополняя запретами и отчетами, которые работают без проблем.
При этом Discord в основном используется игровым сообществом. Это место для координации с использованием частных серверов, которые поставляются с голосовыми чатами и текстовыми опциями, разработанными для работы в фоновом режиме, пока вы играете в свою любимую игру. За последние несколько лет популярность Discord резко возросла, в основном благодаря популярным играм, таким как PUBG и Minecraft. Нет более простого способа связи со всем сервером, чем с помощью приложения Discord.
Что по сути делает Discord – это объединение функций доски объявлений, лобби чата и чата VoIP в одной среде. Он поставляется как в мобильной, так и в настольной версии.
Добавление игр в библиотеку Discord
Каждый раз, когда вы устанавливаете игру, она, скорее всего, будет отображаться в разделе «Библиотека». Если вы устанавливаете Discord в первый раз, вы можете ожидать появления списка всех установленных игр на вашем устройстве в указанном разделе. Чтобы попасть в раздел «Библиотека», перейдите в Главная вкладку в верхнем левом углу экрана Discord и щелкните по нему. После этого нажмите Библиотека, В основной части экрана вы увидите список установленных игр. Используйте элементы из этого списка, чтобы быстро запустить любую игру, установленную на вашем компьютере.
Однако вы не сможете найти определенную игру в библиотеке, даже если она была законно установлена. Discord не распознает некоторые старые игры, но может просто не работать с игрой, даже если это недавний выпуск. К сожалению, нет способа добавить его в список библиотек. Вы можете связаться со службой технической поддержки Discord и узнать, что они могут с этим сделать. Однако, скорее всего, они не смогут вам в этом помочь, по крайней мере, в краткосрочной перспективе.
Игровая активность
Однако большинство пользователей Discord не используют опцию «Библиотека» просто для удобства доступа. Конечно, это делает запуск игры проще и понятнее, но простое размещение значка игры на панели задач, возможно, является более простым и элегантным решением. Необходимость запускать Steam по отдельности, а затем запускать игру может быть немного утомительной, но на самом деле это не такая большая неприятность.
Итак, зачем геймерам нужна игра на Discord? Что ж, если игра находится в Библиотеке и вы запускаете ее оттуда, для других пользователей она будет отображаться как «игра (название игры)». Таким образом, вы можете общаться с другими людьми по большим каналам (например) и играть вместе, обсуждать обсуждаемую игру и узнавать о новых советах и хитростях, которые вы, возможно, не знали раньше. Однако, если игра отсутствует в библиотеке Discord, приложение не будет автоматически отображать ваш игровой статус.
К счастью, здесь есть обходной путь. Перейдите к значку Cog (Пользовательские настройки) к правому нижнему углу главного экрана. В появившемся окне перейдите к Игровая активность Вкладка. В верхней части окна Game Activity вы, скорее всего, увидите «Игра не обнаружена». По сути, это параметр, который сообщает другим пользователям Discord, что вы играете в данный момент.
Если какой-либо конкретной игры нет в вашей Discord Library, есть вероятность, что она не появится здесь, даже когда вы запустите ее. Тем не менее, после запуска, Alt + Tab игру и откройте окно Discord. На вкладке «Активность в игре». Вот увидишь “Не видите свою игру? Добавьте это!Написано. Нажмите Добавьте это и выберите его из списка. Теперь Discord покажет вам, как вы играете в эту игру.
Discord Library
Хотя библиотека Discord не собирается обнаруживать все существующие игры, она обычно работает для большинства. Даже если игра не обнаруживается, добавление ее в ваш статус «сейчас играет» находится всего в нескольких щелчках мыши.
Что вам больше всего нравится в Discord и Discord Nitro? Вы часто используете библиотеку? Вам нужно добавить игры в ваш статус «сейчас играет»? Обсудите это и все остальное, связанное с разногласиями и играми, в разделе комментариев ниже.
Free Download WordPress ThemesDownload Best WordPress Themes Free DownloadDownload Nulled WordPress ThemesDownload Best WordPress Themes Free Downloadlynda course free downloaddownload coolpad firmwareFree Download WordPress Themes
Александр Пиндык
Senior Software Engineer в Wargaming.net
Я расскажу о создании Discord-бота на Python, который запускает сборку проекта в Unity Cloud Build и создаёт ссылку на скачивание для QA из внешней команды.
Настройка и поддержка полноценного CI занимает много времени и средств. При этом команде чаще всего нужна базовая функциональность. Так случилось и с нашим проектом. Потребовался простой способ сборки проекта в Unity Cloud Build и передачи его на внешний QA.
На начальном этапе были такие условия и ограничения:
- репозиторий проекта — Bitbucket (есть поддержка GitHub и GitLab);
- наличие лицензии Unity Teams Advanced, которая разблокирует доступ к Unity Cloud Build;
- ограниченный доступ к Unity Cloud Build для части команды;
- сборка версии проекта не после каждого коммита в ветку, а только после завершения работы над функциональностью или багом.
Для этих целей был создан Discord-бот на Python (этот язык выбрал, как самый быстрый и удобный для автоматизации). Он позволил команде запускать сборку версии в Unity Cloud Build, и после её успешного завершения формировал ссылку для скачивания QA, как внутри команды, так и вне её.
Боты для Discord на Python: проект для начинающих
Перед тем, как начать писать бот, необходимо подготовить окружение. Для этого настроим Unity Cloud Build и Discord-гильдию (сервер) на сборку проекта под разные платформы. После этого настроим отправку сообщений об успешном завершении сборки из Unity Cloud Build в канал. И создадим бота, работающего с Unity Cloud Build и Discord.
Настройка проекта в Unity Cloud Build
Переходим в Unity Dashboard: https://dashboard.unity3d.com/landing и выбираем Cloud Build:
Далее выбираем Create project и вводим имя нашего проекта (для примера, назовем его Dungeon Crawl Prototype):
После этого в списке проектов появится созданный проект. Переходим к нему и выбираем SET UP CLOUD BUILD:
На следующей странице выбираем с каким Git репозиторием будем интегрировать наш проект. В нашем случае это GitHub:
Подключаем GitHub и переходим к настройке сборки проекта:
Добавляем новую сборку SETUP NEW TARGET:
Выбираем платформу. В нашем примере было создано две сборки под Windows 64 и Android:
Вводим название Target Label, в Branch ветку в git репозитории. Для тестового примера был установлен флаг Auto Detect Version:
Для примера был выбран Debug ключ и тестовый Bundle ID:
Далее нажимаем NEXT: BUILD, после чего настройка сборки завершена. Те же шаги необходимо повторить и для других платформ. На этом заканчиваем настройку Unity Cloud Build. В будущем понадобится создать Discord-оповещения для старта построения сборки и результата сборки. Сделаем это после настройки сервера.
Создание и настройка Discord-гильдии (сервера)
Переходим по ссылке к Discord https://discord.com/, скачиваем приложение и создаем аккаунт. После того как приложение установлено и произведена авторизация в аккаунт, необходимо создать новый Discord-сервер (далее будем называть их гильдиями). Создаем новую гильдию нажав на «+». Выбираем пункт Create My Own → For me and my friends и вводим название гильдии без пробелов.
После создания сервера необходимо добавить новые роли. Для этого переходим в настройки и создаем три:
- bot для нашего бота, ci для пользователей:
- ci для пользователей, которые смогут давать команды боту:
- qa для тех, кому будет доступна ссылка на скачивания сборки.
Далее создадим три канала:
- ci для отправки команд боту;
- build для сообщений от Unity Cloud Build;
- testing отправки ссылок QA.
На этом настройка гильдии закончена. Следующим шагом будет создание Discord-бота.
Создание и настройка Discord-бота
Боты для Discord создаются на Discord Developer Portal: https://discord.com/developers/applications. Необходимо перейти по ссылке и авторизоваться. Затем создаем новое приложение, нажав на New Application. Вводим имя приложения и нажимаем Create:
Далее создаем бота. Для этого переходим в созданное приложение, выбираем вкладку Bot и нажимаем Add Bot:
Далее необходимо настроить разрешения для бота. Переходим в пункт OAuth2 и выбираем следующие опции:
После выбора всех опций копируем url кнопкой Copy. Затем в браузере переходим по скопированной ссылке, выбираем Discord-гильдию, созданную ранее, и проверяем, выставленные разрешения:
Далее в настройках Discord-гильдии добавляем нашего бота в роль bot, которую создали ранее:
Осталось настроить Discord-оповещения для Unity Cloud Build (о начале и завершении сборки, и её результате):
Настройка Discord оповещения для Unity Cloud Build
Возвращаемся в Unity Cloud Build и переходим в раздел Notifications, в котором выбираем Integrations page:
Далее создаем новую интеграцию, нажав на NEW INTEGRATION:
Выбираем Discord и нажимаем NEXT:
В появившемся окне выбираем события, при которых будут отправляться сообщения в гильдию. Затем нажимаем NEXT:
В появившемся окне авторизации выбираем нашу гильдию и канал, куда приходить сообщения. Нажимаем Authorize:
На этом настройка оповещений и окружения завершена. На следующем этапе создадим Discord-бот на Python.
Создание Discord-бота на Python
Настройка проекта
Для создания бота будем использовать Python 3.9, а для работы с Discord — библиотеку discord.py: https://pypi.org/project/discord.py/. Также понадобится библиотека python-dotenv для получения переменных окружения из .env файла.
Middle и Senior Python developer в проект Clutch
, ,
tproger.ruВакансии на tproger.ru
Создаём новый проект и добавляем в него requirements.txt с таким содержанием:
aiohttp==3.7.3 python-dotenv==0.15.0 discord.py==1.6.0
Так же создаём файл .env с переменными:
DISCORD_TOKEN= DISCORD_GUILD= DISCORD_BOT_NAME= UNITY_API_KEY= UNITY_ORGANIZATION_ID= PROJECT_ID=PROJECT_NAME=
DISCORD_GUILD — название Discord гильдии.
DISCORD_BOT_NAME — имя бота.
DISCORD_TOKEN — можно получить на Discord Developer Portal в разделе Bot, скопировав токен:
UNITY_API_KEY можно получить в настройках Unity Cloud Build:
UNITY_ORGANIZATION_ID и PROJECT_ID так же можно получить в Unity Cloud Build. Для этого открываем конфигурацию сборки и нажимаем на EDIT BASIC INFO:
Далее в строке браузера можно увидеть UNITY_ORGANIZATION_ID и PROJECT_ID:
PROJECT_NAME — имя проекта, который собирается в Unity Cloud Build:
Написание бота
Далее я опишу основные моменты реализации Discord-бота. Создаём класс DiscordBot который наследуется от discord.Client. Он реализует API, позволяющее подключиться к Discord гильдии:
import discord class DiscordBot(discord.Client): def __init__(self): super(DiscordBot, self).__init__()
Далее необходимо подключиться к Discord-гильдии:
await self.start('discord bot token', bot=True)
Метод on_ready, позволяет реагировать на событие подключения бота к Discord-гильдии:
async def on_ready(self): for guild in self.guilds: if guild.name == 'self guild name here': print('Connected to the Discord guild') return print('Fails connect to the Discord guild') await self.close()
Для обработки сообщений необходимо реализовать метод on_message:
async def on_message(self, message: discord.Message): try: # Do not process self messages or messages not from bot supported channels message_channel = message.channel.name if message.author == self.user or message_channel not in ['ci', 'build']: return if message_channel == 'build': await self._process_build_event(message) else: # React only for messages that mention bot for mention in message.mentions: if self.user == mention: await self._process_bot_command(message) return except Exception as e: print(f'Exception: {e}')
В первой проверке отсекаем все сообщения от самого бота, а также сообщения, пришедшие не из каналов, поддерживаемых ботом. Затем разделяем сообщения на два типа: команды боту и сообщения от Unity Cloud Build. В зависимости от результата передаём сообщение нужному обработчику.
Обработчик сообщений для выполнения команд ботом. Метод _get_command_for_bot читает сообщение, ищет в нем команду и параметры команды. После этого выполняется метод конкретной команды:
async def _process_bot_command(self, message: discord.Message): command, params = self._get_command_for_bot(message) if command == 'build': await self._start_build(message, params) elif command == 'build_target_info': await self._build_target_info(message, params) else: print(f'Unsupported command for bot: {command}')
Для работы с Unity Cloud Build создаём класс UnityCloudBuildWorker:
from aiohttp import ClientSession class UnityCloudBuildWorker(object): def __init__(self, base_url: str, project_id: str, api_key: str): self._base_url = base_url self._project_id = project_id self._cloud_build_targets = { 'qa_windows': 'qa-windows-64-bit', 'qa_android': 'qa-android' } self._supported_builds = list(self._cloud_build_targets.keys()) self._session = None self._base_header = { 'Content-Type': 'application/json', 'Authorization': f'Basic {api_key}', } async def start_worker(self): assert self._session is None self._session = ClientSession() async def stop_worker(self): if self._session is not None: await self._session.close() self._session = None
Разберём пример отправки команды на сборку проекта. Для этого в канал «ci» боту отправляется команда @AleksPinGames_DEV_Bot build qa_windows. Она обозначает, что необходимо начать сборку QA Windows.
Обработчик в DiscordBot получает сообщение и набор параметров и отправляет в чат ответ о начале выполнения задачи. Далее в UnityCloudBuildWorker отправляется запрос на сборку проекта через Unity Cloud Build. После получения ответа бот сообщает о том, какая сборка начала строиться и какая ветка использовалась в Git репозитории:
async def _start_build(self, message: discord.Message, params: str): await message.channel.send('Send start build command to Unity Cloud Build') result = await self._unity_cloud_build_worker.cmd_start_build(params) await message.channel.send(result)
UnityCloudBuildWorker получает команду и выполняет метод cmd_start_build. Затем формируется url запроса и выполняется запрос. Полное описание API для работы с Unity Cloud Build можно найти тут: https://build-api.cloud.unity3d.com/docs/1.0.0/index.html#intro:
async def cmd_start_build(self, build_target: str) -> str: build_target_id = self._cloud_build_targets.get(build_target, None) if build_target_id is None: return f'Unsupported build target: {build_target}' url = f'{self._base_url}/projects/{self._project_id}/buildtargets/{build_target_id}/builds' headers = {'clean': 'true'} response = await self._send(self._send_post, url, headers) result = await response.json() if response is not None else {} self._logger.info(f'{self._log_tag} cmd_start_build result: {result}') if result and len(result) > 0: result_msg = f"Start building {result[0]['buildTargetName']} | Branch: {result[0]['scmBranch']}" else: result_msg = f'Error starting build for target: {build_target}' return result_msg async def _send(self, send_method: callable, url: str, headers: dict = None): try: if headers is not None: headers.update(self._base_header) else: headers = self._base_header result = await send_method(url, headers) return result except Exception as e: print(f'Exception: {e}') return None async def _send_get(self, url: str, headers: dict = None): return await self._session.get(url=url, headers=headers, ssl=True) async def _send_post(self, url: str, headers: dict = None): return await self._session.post(url=url, headers=headers, ssl=True)
После сборки проекта Unity Cloud Build отправляет в канал build сообщение о результате сборки. На это сообщение реагирует обработчик сообщений от Unity Cloud Build.
Обработчик сообщений от Unity Cloud Build проверяет от кого пришло сообщение. Все сообщения от Unity с данными по сборке вычитываются и формируется ссылка для канала QA testing. Сообщение в канал QA попадёт только в случае build_success = True. Также в данном обработчике удаляется ссылка на скачивание собранного проекта непосредственно в Unity Cloud Build. Остаётся только внешняя ссылка, не требующая авторизации в Unity Team.
async def _process_build_event(self, message: discord.Message): try: if message.author.name != 'Unity' or len(message.embeds) <= 0: return to_delete_idx = None build_success = False embed = message.embeds[0] for idx, field in enumerate(embed.fields): field_name = field.name if field_name == 'Build success': build_success = True elif field_name == 'Download': to_delete_idx = idx if build_success: if to_delete_idx is not None: embed.remove_field(to_delete_idx) channel = self._server_text_channels['testing'] await channel.send(embed=embed) except Exception as e: print(f'Exception: {e}')
Запуск бота как сервис
Для удобства запуска бота на удаленном сервере мы добавили в репозиторий возможность собрать и запустить бота в качестве Docker-контейнера. Для этого были добавлены Dockerfile:
FROM python:3.9.2-buster ENV APP_DIR /unity_cloud_build_discord_bot ENV PYTHONPATH $PYTHONPATH:$APP_DIR WORKDIR $APP_DIR COPY requirements.txt requirements.txt RUN pip install -r requirements.txt RUN apt-get update && apt-get install -y --no-install-recommends locales locales-all COPY . $APP_DIR CMD python app/discord_bot.py
И Makefile, в котором описаны команды up и down для запуска и остановки контейнера с ботом:
TAG ?= latest CONTAINER_NAME ?= unity_cloud_build_discord_bot IMAGE_NAME ?= $(CONTAINER_NAME):$(TAG) build: docker build . -t $(IMAGE_NAME) up: build docker run -d --name $(CONTAINER_NAME) --env-file .env $(IMAGE_NAME) down: docker stop $(CONTAINER_NAME) docker rm $(CONTAINER_NAME)
Все инструкции и полная версия кода бота доступны в GitHub-репозитории: https://github.com/AleksandrPindyk/unity_cloud_build_discord_bot
Итог
На этом всё ? Мы запустили бот в качестве Docker-контейнера и настроили на Discord-гильдию, где идёт общение разработчиков и внешних QA. После нескольких дней тестирования мы пришли к выводу, что использовать бота удобнее, чем запускать сборку через веб-страницу Unity Cloud Build. В следующей версии добавим поддержку нескольких проектов и разворачивание WebGL-версии сразу на удаленном сервере в Docker-контейнере. Более детальную информацию о возможностях разработки Discord-ботов на Python, можно получить на сайте с официальной документацией: https://discord.com/developers/docs/intro.
Не смешно? А здесь смешно: @ithumor
Асинхронная библиотека discord.py содержит все что нужно для бота, с помощью нее даже можно работать с голосовыми каналами сервера. В этой статье я расскажу как создать простенького бота для вашего discord сервера.
Получение токена и Client ID для вашего бота
Для получения токена и ID бота небходимо создать свое приложение и в разделе General Information скопировать Client ID. А в разделе настроек создать бота и скопировать его токен. Задача не сложная, думаю все с этим справятся.
Собственно пишем бота
Устанавливаем discord.py с помощью pip:
pip install discord
После успешной установки создаем файл bot.py, где будем писать бота. Импортируем все необходимое:
import discord from discord.ext import commands
Создаем переменную с вашим токеном, про который я писал выше:
TOKEN = 'Ваш токен'
Про токен Создаем тело бота:
bot = commands.Bot(command_prefix='!') #инициализируем бота с префиксом '!'
Для начала сделаем простенькую команду, аргумент которой бот будет просто пересылать:
@bot.command(pass_context=True) #разрешаем передавать агрументы async def test(ctx, arg): #создаем асинхронную фунцию бота await ctx.send(arg) #отправляем обратно аргумент
И в конце запускаем бота с вашим токеном:
bot.run(TOKEN)
В итоге должно получится вот такое:Код
import discord from discord.ext import commands TOKEN = 'Ваш токен' bot = commands.Bot(command_prefix='!') @bot.command(pass_context=True) # разрешаем передавать агрументы async def test(ctx, arg): # создаем асинхронную фунцию бота await ctx.send(arg) # отправляем обратно аргумент bot.run(TOKEN)
Теперь необходимо добавить бота на сервер. Сделать это можно с помощью ссылки:
https://discordapp.com/oauth2/authorize?&client_id={Client ID}&scope=bot&permissions={Права, например 66395456}
Число необходимых прав можно получить в разделе настроек бота. Теперь можно запускать бота:
python bot.py
После нескольких секунд, можно заметить его в сети: И наконец-то попробовать отправить команду:
Заключение
Вот так можно легко запустить у себя на сервере бота. Как можно заметить библиотека делает практически все за тебя и остается только добавлять свой функционал с использованием python. В следующий раз я покажу как следить за событиями, подключатся к голосовым каналам (избегая проблем с linux и Windows), использовать роли и права участников и другое. Надеюсь, статья была Вам полезна, удачи!Используемые источники:
- https://habr.com/ru/post/494600/
- https://dev-gang.ru/article/kak-sozdat-discord-bota-s-pomosczu-python-uhacexvap5/
- https://tehnografi.com/как-добавить-игры-в-discord-library/
- https://tproger.ru/articles/discord-bot-na-python-dlja-avtomatizacii-raboty-s-unity-cloud-build-v-gamedev-komande/
- https://temofeev.ru/info/articles/sozdanie-prostogo-discord-bota-s-pomoshchyu-biblioteki-discord-py/