
Введение
В данном практическом руководстве показывается, как создать простую автоматизацию, используя команду Midjourney /imagine в качестве примера.
Для этой задачи вам понадобится учетная запись Discord с активной подпиской на Midjourney, базовый план за $10 подойдет идеально.
Следуйте этим простым шагам, чтобы получить:
Идентификатор сервера Discord, который будет упомянут в этой статье как
server_idИдентификатор канала Discord, который будет упомянут в этой статье как
channel_idТокен Discord, который будет упомянут в этой статье как
discord_token
Мы будем использовать следующие общедоступные Discord API:
Application Commands для получения подробностей о команде imagine Midjourney и для размещения взаимодействия с imagine в желаемом канале Discord
Get Channel Messages для получения результатов (сообщений) взаимодействия с imagine из канала Discord
Для удобства вы можете использовать коллекцию Postman. Убедитесь, что вы обновили значения в переменных коллекции и сохранили их перед выполнением запросов GET и POST в коллекции:

Авторизация Discord API
Все упомянутые здесь вызовы Discord API требуют заголовка HTTP Authorization с discord_token, пример:
Authorization: discord_token
Получение подробностей о команде imagine Discord
Выполните GET-запрос application-commands https://discord.com/api/v10/channels/channel_id/application-commands/search?type=1&include_applications=true&query=imagine
{ "applications": [ { "id": "936929561302675456", "name": "Midjourney Bot", "icon": "f6ce562a6b4979c4b1cbc5b436d3be76", "description": "Generate an image based on a text prompt in under 60 seconds using the </imagine:938956540159881230> command!\n\nhttps://docs.midjourney.com/docs/terms-of-service", "summary": "", "type": null, "bot": { "id": "936929561302675456", "username": "Midjourney Bot", "global_name": null, "avatar": "f6ce562a6b4979c4b1cbc5b436d3be76", "discriminator": "9282", "public_flags": 589824, "bot": true, "avatar_decoration_data": null } } ], "application_commands": [ { "id": "938956540159881230", "application_id": "936929561302675456", "version": "1166847114203123795", "default_member_permissions": null, "type": 1, "nsfw": false, "name": "imagine", "description": "Create images with Midjourney", "dm_permission": true, "contexts": [ 0, 1, 2 ], "integration_types": [ 0 ], "options": [ { "type": 3, "name": "prompt", "description": "The prompt to imagine", "required": true } ] } ], "cursor": { "previous": "WzExNTE1NDQ4NzM4MjA4OTMzMDYsIDAsIDkzODk1NjU0MDE1OTg4MTIzMF0=", "next": null, "repaired": false } }
Нам потребуется объект application_commands[0], который содержит подробности о команде imagine, извлекем его для будущих ссылок:
{ "id": "938956540159881230", "application_id": "936929561302675456", "version": "1166847114203123795", "default_member_permissions": null, "type": 1, "nsfw": false, "name": "imagine", "description": "Create images with Midjourney", "dm_permission": true, "contexts": [ 0, 1, 2 ], "integration_types": [ 0 ], "options": [ { "type": 3, "name": "prompt", "description": "The prompt to imagine", "required": true } ] }
Составление и выполнение команды imagine в вашем канале Discord
Выполните POST-запрос interactions https://discord.com/api/v10/interactions.
{ "type": 2, "application_id": "936929561302675456", "guild_id": "server_id", "channel_id": "channel_id", "session_id": "$randomInt", "data": { "version": "1166847114203123795", "id": "938956540159881230", "name": "imagine", "type": 1, "options": [ { "type": 3, "name": "prompt", "value": "Тут будет ваш запрос (prompt) к Midjourney" } ], "application_command": { "id": "938956540159881230", "application_id": "936929561302675456", "version": "1166847114203123795", "default_member_permissions": null, "type": 1, "nsfw": false, "name": "imagine", "description": "Create images with Midjourney", "dm_permission": true, "contexts": [ 0, 1, 2 ], "integration_types": [ 0 ], "options": [ { "type": 3, "name": "prompt", "description": "The prompt to imagine", "required": true } ] }, "attachments": [] } }
Поля application_id и application_command должны быть установлены в значения, извлеченные на предыдущем шаге. Поместите ваш запрос (prompt) для Midjourney в поле data.options[0].value. Поле session_id может быть произвольным целым числом. Если вы используете вышеуказанную коллекцию Postman, это значение будет сгенерировано автоматически Postman.
Статус HTTP-ответа должен быть 204 No Content, любой другой статус ответа указывает на проблему с вашим запросом.
Получение результатов команды imagine
Выполните GET-запрос messages https://discord.com/api/v10/channels/channel_id/messages
Ответ (сокращено для краткости):
[ { "id": "<Discord message id>", "type": 0, "content": "**Тут будет ваш запрос (prompt) к Midjourney --s 750 --v 5.2** - <@Discord user id> (fast)", "channel_id": "<Discord channel id>", "attachments": [ { "url": "<generated image url>", "proxy_url": "<generated proxy image url>", "width": 2048, "height": 2048, "content_type": "<generated image type>", "id": "<Discord image id>", "filename": "<generated image name>", "size": 7204115 } ], "components": [ { "type": 1, "components": [ { "type": 2, "custom_id": "MJ::JOB::upsample::1::45e9bf62-5f3d-4bd6-a567-958af28f15d3", "style": 2, "label": "U1" }, { "type": 2, "custom_id": "MJ::JOB::upsample::2::45e9bf62-5f3d-4bd6-a567-958af28f15d3", "style": 2, "label": "U2" }, { "type": 2, "custom_id": "MJ::JOB::upsample::3::45e9bf62-5f3d-4bd6-a567-958af28f15d3", "style": 2, "label": "U3" }, { "type": 2, "custom_id": "MJ::JOB::upsample::4::45e9bf62-5f3d-4bd6-a567-958af28f15d3", "style": 2, "label": "U4" }, { "type": 2, "custom_id": "MJ::JOB::reroll::0::45e9bf62-5f3d-4bd6-a567-958af28f15d3::SOLO", "style": 2, "emoji": { "name": "🔄" } } ] }, { "type": 1, "components": [ { "type": 2, "custom_id": "MJ::JOB::variation::1::45e9bf62-5f3d-4bd6-a567-958af28f15d3", "style": 2, "label": "V1" }, { "type": 2, "custom_id": "MJ::JOB::variation::2::45e9bf62-5f3d-4bd6-a567-958af28f15d3", "style": 2, "label": "V2" }, { "type": 2, "custom_id": "MJ::JOB::variation::3::45e9bf62-5f3d-4bd6-a567-958af28f15d3", "style": 2, "label": "V3" }, { "type": 2, "custom_id": "MJ::JOB::variation::4::45e9bf62-5f3d-4bd6-a567-958af28f15d3", "style": 2, "label": "V4" } ] } ], }, ]
Discord API messages возвращает 50 последних сообщений из channel_id, с самым свежим сообщением в начале. В зависимости от настроек Midjourney и нагрузки серверов, создание изображения может занять от примерно 20 секунд (fast mode) до 10 минут (relax mode).
Вы можете выполнить вышеприведенный вызов в цикле с задержкой от 10 до 20 секунд между вызовами, пока массив components не будет пустым. Затем извлеките созданное изображение из поля attachments[0].url.
В следующей публикации мы рассмотрим систему модерации Midjourney и обработку Discord rate limits.
