事件列表 及 數(shù)據(jù)結構
user.register
- 含義
用戶注冊時觸發(fā) - 數(shù)據(jù)結構
plugin\user\app\model\User
實例
示例
<?php
use plugin\user\app\model\User;
return [
'user.register' => [
function (User $user) {
echo $user->id;
echo $user->username;
echo $user->nickname;
echo $user->avatar;
}
]
];
user.login
- 含義
用戶登錄時觸發(fā) - 數(shù)據(jù)結構
plugin\user\app\model\User
實例
user.logout
- 數(shù)據(jù)結構
plugin\user\app\model\User
實例
ai.menu.list
- 含義
渲染左側圖標菜單時觸發(fā) - 數(shù)據(jù)結構
plugin\ai\app\event\data\EventData
實例
示例
<?php
use plugin\ai\app\event\data\EventData;
return [
// 渲染左側圖標菜單時觸發(fā)
'ai.menu.list' => [
function (EventData $object) {
// $data里是所有的菜單數(shù)據(jù)
$data = $object->data;
// 添加一條invite圖標菜單
$data['invite'] = [
'enabled' => true, // 是否啟用該菜單
'title' => '邀請好友', // 菜單標題
'icon' => [
'light' => '<i class="bi bi-share"></i>', // 明亮主題下的圖標
'dark' => '<i class="bi bi-share"></i>', // 暗黑主題下的圖標
'active' => '<i class="bi bi-share-fill"></i>' // 被選中后的圖標
],
'url' => '/app/foo', // iframe url 地址
'mobile' => true, // 是否在移動端顯示圖標菜單
];
$object->data = $data;
}
]
];
ai.payment.success
- 含義
支付成功時觸發(fā) - 數(shù)據(jù)結構
plugin\ai\app\event\data\PaymentData
實例
示例
<?php
use plugin\ai\app\event\data\PaymentData;
return [
'ai.payment.success' => function (PaymentData $paymentData) {
var_export($paymentData->userId);
var_export($paymentData->data);
}
];
打印類似
1066
array (
'plan' => 1,
'price' => 29,
'months' => 1,
'name' => '月度會員',
'gpt3' => 3000,
'gpt4' => 100,
'ernie' => 3000,
'qwen' => 3000,
'spark' => 3000,
'gemini' => 3000,
'chatglm' => 3000,
'midjourney' => 100,
)
ai.model.handler.dispatch
- 含義
大模型請求時,分發(fā)處理器前觸發(fā) - 數(shù)據(jù)結構
plugin\ai\app\event\data\HandlerData
實例
示例
<?php
use plugin\ai\app\event\data\HandlerData;
return [
'ai.model.handler.dispatch' => function (HandlerData $handlerData) {
var_export($handlerData->options);
var_export($handlerData->data);
var_export($handlerData->handler);
// 將所有大模型請求交給Gpt4處理
$handlerData->handler = plugin\ai\app\handler\Gpt4::class;
}
];
打印類似
array (
'stream' =>
\Closure::__set_state(array(
)),
'complete' =>
\Closure::__set_state(array(
)),
)
array (
'model' => 'gpt-3.5-turbo',
'stream' => true,
'messages' =>
array (
0 =>
array (
'role' => 'system',
'content' => '你是一個智能助手',
),
1 =>
array (
'role' => 'assistant',
'content' => '你好,我是AI助手,請問您需要什么幫助?',
),
2 =>
array (
'role' => 'user',
'content' => 'hello',
),
),
'temperature' => 0.5,
)
'plugin\\ai\\app\\handler\\Gpt3'
options是請求的回調(diào)函數(shù),stream代表收到流式響應時觸發(fā),complete代表響應完畢時觸發(fā)。原型類似如下:
[
'stream' => function ($data) {
var_export($data);
},
'complete' => function ($result, $response) {
var_export($result);
}
]
data是請求的參數(shù)
handler是處理器類名
以上參數(shù)都可以進行修改,達到介入請求處理的目的
ai.chat.completions.request
- 含義
聊天類大模型請求時觸發(fā)
示例
<?php
use plugin\ai\app\event\data\ModelRequestData;
return [
'ai.chat.completions.request' => function (ModelRequestData $modelRequestData) {
var_export($modelRequestData->options);
var_export($modelRequestData->data);
// 如果請求模型是gpt-3.5,將其轉(zhuǎn)換為gpt-4
if ($modelRequestData->data['model'] === 'gpt-3.5') {
$modelRequestData->data['model'] = 'gpt-4';
}
}
];
打印類似
array (
'stream' =>
\Closure::__set_state(array(
)),
'complete' =>
\Closure::__set_state(array(
)),
)
array (
'model' => 'gpt-4',
'stream' => true,
'messages' =>
array (
0 =>
array (
'role' => 'assistant',
'content' => '你好,我是AI助手,請問您需要什么幫助?',
),
1 =>
array (
'role' => 'user',
'content' => 'hello
',
),
),
'temperature' => 0.5,
)
ai.chat.completions.response
- 含義
聊天類大模型響應時觸發(fā) - 數(shù)據(jù)結構
plugin\ai\app\event\data\ModelResponseData
實例
示例
<?php
use plugin\ai\app\event\data\ModelResponseData;
return [
'ai.chat.completions.response' => function (ModelResponseData $responseData) {
var_export($responseData->modelRequestData);
// $responseData->data 如果是字符串,則代表返回的數(shù)據(jù)內(nèi)容,如果是數(shù)組,則代表發(fā)送錯誤
var_export($responseData->data);
}
];
打印類似
\plugin\ai\app\event\data\ModelRequestData::__set_state(array(
'data' =>
array (
'model' => 'gpt-4',
'stream' => true,
'messages' =>
array (
0 =>
array (
'role' => 'system',
'content' => '你是一個智能助手',
),
1 =>
array (
'role' => 'assistant',
'content' => '你好,我是AI助手,請問您需要什么幫助?',
),
2 =>
array (
'role' => 'user',
'content' => 'hello',
),
),
'temperature' => 0.5,
),
'options' =>
array (
'stream' =>
\Closure::__set_state(array(
)),
'complete' =>
\Closure::__set_state(array(
)),
),
))
// 如果成功代表返回的數(shù)據(jù)內(nèi)容
'Hello! How can I assist you today?'
// 如果是錯誤打印類似
array (
'error' =>
array (
'message' => 'xxx',
'type' => 'xxx',
),
)
ai.image.generations.request
- 含義
圖片生成類大模型請求時觸發(fā) 例如Dall-e (Midjourney屬于任務類,不會觸發(fā)此事件,見下面文檔) - 數(shù)據(jù)結構
plugin\ai\app\event\data\ModelRequestData
實例
示例
<?php
use plugin\ai\app\event\data\ModelRequestData;
return [
'ai.image.generations.request' => function (ModelRequestData $modelRequestData) {
var_export($modelRequestData->options);
var_export($modelRequestData->data);
}
];
打印類似
array (
'complete' =>
\Closure::__set_state(array(
)),
)
array (
'model' => 'dall.e',
'prompt' => '狗',
'n' => 1,
'size' => '1024x1024',
)
ai.image.generations.response
- 含義
圖片生成類大模型響應時觸發(fā) 例如Dall-e (Midjourney屬于任務類,不會觸發(fā)此事件,見下面文檔) - 數(shù)據(jù)結構
plugin\ai\app\event\data\ModelResponseData
實例
示例
<?php
use plugin\ai\app\event\data\ModelResponseData;
return [
'ai.image.generations.response' => function (ModelResponseData $responseData) {
var_export($responseData->modelRequestData);
// $responseData->data 為數(shù)組
var_export($responseData->data);
}
];
打印類似
\plugin\ai\app\event\data\ModelRequestData::__set_state(array(
'data' =>
array (
'model' => 'dall.e',
'prompt' => '狗',
'n' => 1,
'size' => '1024x1024',
),
'options' =>
array (
'complete' =>
\Closure::__set_state(array(
)),
),
))
array (
'created' => 1713958340,
'data' =>
array (
0 =>
array (
'revised_prompt' => 'A beautiful scene of a playful dog in a lush green park. The dog, boasting a glossy brown coat, energetically chases a brightly colored ball. The park surrounding the dog is vibrantly green with beautiful flowers scattered around. The sun shines brightly in the blue sky, casting playful shadows on the ground.',
'url' => 'https://dalleproduse.blob.core.windows.net/private/images/0acac2d3-3951-4e60-a18b-ae717db0be22/generated_00.png?se=2024-04-25T11%3A32%3A35Z&sig=IX4p2s6lAG6yDqc6hJd8RGARfofWPcVpzemLDl615Lw%3D&ske=2024-04-30T21%3A52%3A45Z&skoid=09ba021e-c417-441c-b203-c81e5dcd7b7f&sks=b&skt=2024-04-23T21%3A52%3A45Z&sktid=33e01921-4d64-4f8c-a055-5bdaffd5e33d&skv=2020-10-02&sp=r&spr=https&sr=b&sv=2020-10-02',
),
),
)
ai.task.imagine.request
- 含義
任務類大模型畫圖任務請求時觸發(fā) 例如 Midjourney畫圖 - 數(shù)據(jù)結構
plugin\ai\app\event\data\ModelRequestData
實例
示例
<?php
use plugin\ai\app\event\data\ModelRequestData;
return [
'ai.task.imagine.request' => function (ModelRequestData $modelRequestData) {
var_export($modelRequestData->options);
var_export($modelRequestData->data);
}
];
打印類似
array (
'complete' =>
\Closure::__set_state(array(
)),
)
array (
'model' => 'midjourney',
'images' =>
array (
),
'notifyUrl' => 'http://127.0.0.1:8787/app/ai/task/notify',
'prompt' => 'cat --v 6.0 --relax',
'allowFast' => false,
)
ai.task.imagine.response
- 含義
任務類大模型畫圖任務響應時觸發(fā) 例如 Midjourney畫圖 - 數(shù)據(jù)結構
plugin\ai\app\event\data\ModelResponseData
實例
示例
<?php
use plugin\ai\app\event\data\ModelResponseData;
return [
'ai.task.imagine.response' => function (ModelResponseData $responseData) {
var_export($responseData->modelRequestData);
// $responseData->data 為數(shù)組
var_export($responseData->data);
}
];
打印類似
\plugin\ai\app\event\data\ModelRequestData::__set_state(array(
'data' =>
array (
'model' => 'midjourney',
'images' =>
array (
),
'notifyUrl' => 'http://127.0.0.1:8787/app/ai/task/notify',
'prompt' => 'cat --v 6.0 --relax',
'allowFast' => false,
),
'options' =>
array (
'complete' =>
\Closure::__set_state(array(
)),
),
))
array (
'code' => 0,
'msg' => 'ok',
'taskId' => '1713960408131596202',
'data' =>
array (
),
)
ai.task.action.request
- 含義
任務類大模型圖片操作請求時觸發(fā) 例如 Midjourney任務選圖、變換等 - 數(shù)據(jù)結構
plugin\ai\app\event\data\ModelRequestData
實例
示例
<?php
use plugin\ai\app\event\data\ModelRequestData;
return [
'ai.task.action.request' => function (ModelRequestData $modelRequestData) {
var_export($modelRequestData->options);
var_export($modelRequestData->data);
}
];
打印類似
array (
'complete' =>
\Closure::__set_state(array(
)),
)
array (
'model' => 'midjourney',
'taskId' => '1713960408131596202',
'customId' => 'MJ::JOB::upsample::3::fb4b8cfa-2be7-4ae8-9013-1234567',
'prompt' => NULL,
'mask' => NULL,
'allowFast' => false,
'notifyUrl' => 'http://127.0.0.1:8787/app/ai/task/notify',
)
ai.task.action.response
- 含義
任務類大模型圖片操作響應時觸發(fā) 例如 Midjourney任務選圖、變換等 - 數(shù)據(jù)結構
plugin\ai\app\event\data\ModelResponseData
實例
示例
<?php
use plugin\ai\app\event\data\ModelResponseData;
return [
'ai.task.action.response' => function (ModelResponseData $responseData) {
var_export($responseData->modelRequestData);
// $responseData->data 為數(shù)組
var_export($responseData->data);
}
];
打印類似
\plugin\ai\app\event\data\ModelRequestData::__set_state(array(
'data' =>
array (
'model' => 'midjourney',
'taskId' => '1713960408131596202',
'customId' => 'MJ::JOB::upsample::2::fb4b8cfa-2be7-4ae8-9013-123456',
'prompt' => NULL,
'mask' => NULL,
'allowFast' => false,
'notifyUrl' => 'http://127.0.0.1:8787/app/ai/task/notify',
),
'options' =>
array (
'complete' =>
\Closure::__set_state(array(
)),
),
))
array (
'code' => 0,
'msg' => 'ok',
'taskId' => '1713960713762262689',
'data' =>
array (
),
)
ai.task.status.request
- 含義
任務類大模型任務狀態(tài)請求時觸發(fā) 例如 Midjourney任務狀態(tài)查詢 - 數(shù)據(jù)結構
plugin\ai\app\event\data\ModelRequestData
實例
示例
<?php
use plugin\ai\app\event\data\ModelRequestData;
return [
'ai.task.status.request' => function (ModelRequestData $modelRequestData) {
var_export($modelRequestData->options);
var_export($modelRequestData->data);
}
];
打印類似
array (
'complete' =>
\Closure::__set_state(array(
)),
)
array (
'model' => 'midjourney',
'taskId' => '1713960907174341346',
)
ai.task.status.response
- 含義
任務類大模型任務狀態(tài)響應時觸發(fā) 例如 Midjourney任務狀態(tài)查詢 - 數(shù)據(jù)結構
plugin\ai\app\event\data\ModelResponseData
實例
示例
<?php
use plugin\ai\app\event\data\ModelResponseData;
return [
'ai.task.status.response' => function (ModelResponseData $responseData) {
var_export($responseData->modelRequestData);
var_export($responseData->data);
$$data = $responseData->data;
// 圖片進度
$progress = $data['data']['progress'] ?? '';
// mj返回的原始url地址
$url = $data['data']['imageRawUrl'] ?? '';
// 圖片進度100%則替換圖片地址域名部分,讓其可以被國內(nèi)訪問 https://cdn.imgin.top 是一個mj圖片代理
if ($progress === '100%' && $url) {
$data['data']['imageUrl'] = str_replace('https://cdn.discordapp.com', 'https://cdn.imgin.top', $url);
$responseData->data = $data;
// 返回false代表事件到此結束,不再執(zhí)行 ai.task.status.response 的其它事件函數(shù)
// 包括 plugin/ai/config/event.php 中定義的 ai.task.status.response 事件函數(shù)不會再執(zhí)行
return false;
}
}
];
打印類似
\plugin\ai\app\event\data\ModelRequestData::__set_state(array(
'data' =>
array (
'model' => 'midjourney',
'taskId' => '1713961086218383903',
),
'options' =>
array (
'complete' =>
\Closure::__set_state(array(
)),
),
))
array (
'code' => 0,
'msg' => 'success',
'data' =>
array (
'id' => '1713961086218383903',
'action' => 'UPSCALE',
'status' => 'FINISHED',
'submitTime' => 1713961086,
'startTime' => 1713961086,
'finishTime' => 1713961087,
'progress' => '100%',
'imageUrl' => 'https://cdn.imgin.top/attachments/1148151204875075657/1232666884860547194/imgind_cat_39d7cf9f-c2f0-4adf-a124-0020fb9f867f.png?ex=662a49ff&is=6628f87f&hm=a378497666bf451f80564587869cc96b551347df7fce375f5cae5acb678dbb8e&',
'imageRawUrl' => 'https://cdn.imgin.top/attachments/1148151204875075657/1232666884860547194/imgind_cat_39d7cf9f-c2f0-4adf-a124-0020fb9f867f.png?ex=662a49ff&is=6628f87f&hm=a378497666bf451f80564587869cc96b551347df7fce375f5cae5acb678dbb8e&',
'prompt' => 'cat --v 6.0 --relax',
'finalPrompt' => 'cat --v 6.0',
'params' =>
array (
'customId' => 'MJ::JOB::upsample::1::fb4b8cfa-2be7-4ae8-9013-8d0cf7f27390',
'messageId' => '1232664428378591342',
'index' => '1',
),
'images' =>
array (
),
'attachments' =>
array (
),
'description' => NULL,
'failReason' => NULL,
'messageHash' => '39d7cf9f-c2f0-4adf-a124-0020fb9f867f',
'nonce' => '1713961086218123456',
'messageId' => '123266688516123456',
'discordId' => '114815120487123456',
'data' =>
array (
'uid' => 1713961086,
),
'buttons' =>
array (
0 =>
array (
0 =>
array (
'type' => 2,
'style' => 2,
'label' => 'Upscale (Subtle)',
'emoji' =>
array (
'name' => 'upscale_1',
'id' => '940147353879478324',
),
'custom_id' => 'MJ::JOB::upsample_v6_2x_subtle::1::39d7cf9f-c2f0-4adf-a124-0020fb9f867f::SOLO',
),
1 =>
array (
'type' => 2,
'style' => 2,
'label' => 'Upscale (Creative)',
'emoji' =>
array (
'name' => 'upscale_1',
'id' => '940147353879478324',
),
'custom_id' => 'MJ::JOB::upsample_v6_2x_creative::1::39d7cf9f-c2f0-4adf-a124-0020fb9f867f::SOLO',
),
2 =>
array (
'type' => 2,
'style' => 2,
'label' => 'Vary (Subtle)',
'emoji' =>
array (
'name' => '??',
),
'custom_id' => 'MJ::JOB::low_variation::1::39d7cf9f-c2f0-4adf-a124-0020fb9f867f::SOLO',
),
3 =>
array (
'type' => 2,
'style' => 2,
'label' => 'Vary (Strong)',
'emoji' =>
array (
'name' => '??',
),
'custom_id' => 'MJ::JOB::high_variation::1::39d7cf9f-c2f0-4adf-a124-0020fb9f867f::SOLO',
),
4 =>
array (
'type' => 2,
'style' => 2,
'label' => 'Vary (Region)',
'emoji' =>
array (
'name' => '???',
),
'custom_id' => 'MJ::Inpaint::1::39d7cf9f-c2f0-4adf-a124-0020fb9f867f::SOLO',
),
),
1 =>
array (
0 =>
array (
'type' => 2,
'style' => 2,
'label' => 'Zoom Out 2x',
'emoji' =>
array (
'name' => '??',
),
'custom_id' => 'MJ::Outpaint::50::1::39d7cf9f-c2f0-4adf-a124-0020fb9f867f::SOLO',
),
1 =>
array (
'type' => 2,
'style' => 2,
'label' => 'Zoom Out 1.5x',
'emoji' =>
array (
'name' => '??',
),
'custom_id' => 'MJ::Outpaint::75::1::39d7cf9f-c2f0-4adf-a124-0020fb9f867f::SOLO',
),
2 =>
array (
'type' => 2,
'style' => 2,
'label' => 'Custom Zoom',
'emoji' =>
array (
'name' => '??',
),
'custom_id' => 'MJ::CustomZoom::39d7cf9f-c2f0-4adf-a124-0020fb9f867f',
),
),
2 =>
array (
0 =>
array (
'type' => 2,
'style' => 2,
'emoji' =>
array (
'name' => '??',
),
'custom_id' => 'MJ::JOB::pan_left::1::39d7cf9f-c2f0-4adf-a124-0020fb9f867f::SOLO',
),
1 =>
array (
'type' => 2,
'style' => 2,
'emoji' =>
array (
'name' => '??',
),
'custom_id' => 'MJ::JOB::pan_right::1::39d7cf9f-c2f0-4adf-a124-0020fb9f867f::SOLO',
),
2 =>
array (
'type' => 2,
'style' => 2,
'emoji' =>
array (
'name' => '??',
),
'custom_id' => 'MJ::JOB::pan_up::1::39d7cf9f-c2f0-4adf-a124-0020fb9f867f::SOLO',
),
3 =>
array (
'type' => 2,
'style' => 2,
'emoji' =>
array (
'name' => '??',
),
'custom_id' => 'MJ::JOB::pan_down::1::39d7cf9f-c2f0-4adf-a124-0020fb9f867f::SOLO',
),
),
),
),
)
ai.task.notify
- 含義
任務類大模型任務狀態(tài)通知時觸發(fā) 例如 Midjourney任務狀態(tài)通知。 - 數(shù)據(jù)結構
plugin\ai\app\event\data\EventData
實例
示例
<?php
use plugin\ai\app\event\data\EventData;
return [
'ai.task.notify' => function (EventData $object) {
var_export($object->data);
}
];
打印類似
array (
'id' => '1713961086218383903',
'action' => 'UPSCALE',
'status' => 'FINISHED',
'submitTime' => 1713961086,
'startTime' => 1713961086,
'finishTime' => 1713961087,
'progress' => '100%',
'imageUrl' => 'https://cdn.imgin.top/attachments/1148151204875075657/1232666884860547194/imgind_cat_39d7cf9f-c2f0-4adf-a124-0020fb9f867f.png?ex=662a49ff&is=6628f87f&hm=a378497666bf451f80564587869cc96b551347df7fce375f5cae5acb678dbb8e&',
'imageRawUrl' => 'https://cdn.discordapp.com/attachments/1148151204875075657/1232666884860547194/imgind_cat_39d7cf9f-c2f0-4adf-a124-0020fb9f867f.png?ex=662a49ff&is=6628f87f&hm=a378497666bf451f80564587869cc96b551347df7fce375f5cae5acb678dbb8e&',
'prompt' => 'cat --v 6.0 --relax',
'finalPrompt' => 'cat --v 6.0',
'params' =>
array (
'customId' => 'MJ::JOB::upsample::1::fb4b8cfa-2be7-4ae8-9013-8d0cf7f27390',
'messageId' => '1232664428378591342',
'index' => '1',
),
'images' =>
array (
),
'attachments' =>
array (
),
'description' => NULL,
'failReason' => NULL,
'messageHash' => '39d7cf9f-c2f0-4adf-a124-0020fb9f867f',
'nonce' => '1713961086218383903',
'messageId' => '1232666885166989353',
'discordId' => '1148151204875075657',
'data' =>
array (
'uid' => 1713961086,
),
'buttons' =>
array (
0 =>
array (
0 =>
array (
'type' => 2,
'style' => 2,
'label' => 'Upscale (Subtle)',
'emoji' =>
array (
'name' => 'upscale_1',
'id' => '940147353879478324',
),
'custom_id' => 'MJ::JOB::upsample_v6_2x_subtle::1::39d7cf9f-c2f0-4adf-a124-0020fb9f867f::SOLO',
),
1 =>
array (
'type' => 2,
'style' => 2,
'label' => 'Upscale (Creative)',
'emoji' =>
array (
'name' => 'upscale_1',
'id' => '940147353879478324',
),
'custom_id' => 'MJ::JOB::upsample_v6_2x_creative::1::39d7cf9f-c2f0-4adf-a124-0020fb9f867f::SOLO',
),
2 =>
array (
'type' => 2,
'style' => 2,
'label' => 'Vary (Subtle)',
'emoji' =>
array (
'name' => '??',
),
'custom_id' => 'MJ::JOB::low_variation::1::39d7cf9f-c2f0-4adf-a124-0020fb9f867f::SOLO',
),
3 =>
array (
'type' => 2,
'style' => 2,
'label' => 'Vary (Strong)',
'emoji' =>
array (
'name' => '??',
),
'custom_id' => 'MJ::JOB::high_variation::1::39d7cf9f-c2f0-4adf-a124-0020fb9f867f::SOLO',
),
4 =>
array (
'type' => 2,
'style' => 2,
'label' => 'Vary (Region)',
'emoji' =>
array (
'name' => '???',
),
'custom_id' => 'MJ::Inpaint::1::39d7cf9f-c2f0-4adf-a124-0020fb9f867f::SOLO',
),
),
1 =>
array (
0 =>
array (
'type' => 2,
'style' => 2,
'label' => 'Zoom Out 2x',
'emoji' =>
array (
'name' => '??',
),
'custom_id' => 'MJ::Outpaint::50::1::39d7cf9f-c2f0-4adf-a124-0020fb9f867f::SOLO',
),
1 =>
array (
'type' => 2,
'style' => 2,
'label' => 'Zoom Out 1.5x',
'emoji' =>
array (
'name' => '??',
),
'custom_id' => 'MJ::Outpaint::75::1::39d7cf9f-c2f0-4adf-a124-0020fb9f867f::SOLO',
),
2 =>
array (
'type' => 2,
'style' => 2,
'label' => 'Custom Zoom',
'emoji' =>
array (
'name' => '??',
),
'custom_id' => 'MJ::CustomZoom::39d7cf9f-c2f0-4adf-a124-0020fb9f867f',
),
),
2 =>
array (
0 =>
array (
'type' => 2,
'style' => 2,
'emoji' =>
array (
'name' => '??',
),
'custom_id' => 'MJ::JOB::pan_left::1::39d7cf9f-c2f0-4adf-a124-0020fb9f867f::SOLO',
),
1 =>
array (
'type' => 2,
'style' => 2,
'emoji' =>
array (
'name' => '??',
),
'custom_id' => 'MJ::JOB::pan_right::1::39d7cf9f-c2f0-4adf-a124-0020fb9f867f::SOLO',
),
2 =>
array (
'type' => 2,
'style' => 2,
'emoji' =>
array (
'name' => '??',
),
'custom_id' => 'MJ::JOB::pan_up::1::39d7cf9f-c2f0-4adf-a124-0020fb9f867f::SOLO',
),
3 =>
array (
'type' => 2,
'style' => 2,
'emoji' =>
array (
'name' => '??',
),
'custom_id' => 'MJ::JOB::pan_down::1::39d7cf9f-c2f0-4adf-a124-0020fb9f867f::SOLO',
),
),
),
);