Введение
В данном практическом руководстве показывается, как создать простую автоматизацию, используя команду 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": "1118961510123847772",
"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": "1118961510123847772",
"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": "1118961510123847772",
"id": "938956540159881230",
"name": "imagine",
"type": 1,
"options": [
{
"type": 3,
"name": "prompt",
"value": "Тут будет ваш запрос (prompt) к Midjourney"
}
],
"application_command": {
"id": "938956540159881230",
"application_id": "936929561302675456",
"version": "1118961510123847772",
"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.