From d728e2d7c03c9833b73725e1dffe723778787502 Mon Sep 17 00:00:00 2001 From: weifashi <605403358@qq.com> Date: Tue, 1 Aug 2023 18:35:17 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E6=B7=BB=E5=8A=A0=E6=96=87?= =?UTF-8?q?=E5=BF=83=E4=B8=80=E7=9C=BC=E6=9C=BA=E5=99=A8=E4=BA=BA=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/Api/SystemController.php | 31 ++++++---- app/Models/UserBot.php | 1 + app/Tasks/BotReceiveMsgTask.php | 56 ++++++++++++++----- .../manage/setting/components/SystemAibot.vue | 18 ++++++ 4 files changed, 79 insertions(+), 27 deletions(-) diff --git a/app/Http/Controllers/Api/SystemController.php b/app/Http/Controllers/Api/SystemController.php index 5feb74521..f6bd709ac 100755 --- a/app/Http/Controllers/Api/SystemController.php +++ b/app/Http/Controllers/Api/SystemController.php @@ -250,18 +250,24 @@ class SystemController extends AbstractController // $type = trim(Request::input('type')); $setting = Base::setting('aibotSetting'); + + $keys = [ + 'openai_key', + 'openai_agency', + 'claude_token', + 'claude_agency', + 'wenxin_key', + 'wenxin_secret', + 'wenxin_model' + ]; + if ($type == 'save') { if (env("SYSTEM_SETTING") == 'disabled') { return Base::retError('当前环境禁止修改'); } $all = Request::input(); foreach ($all as $key => $value) { - if (!in_array($key, [ - 'openai_key', - 'openai_agency', - 'claude_token', - 'claude_agency', - ])) { + if (!in_array($key, $keys)) { unset($all[$key]); } } @@ -280,15 +286,16 @@ class SystemController extends AbstractController WebSocketDialogMsg::sendMsg(null, $dialog->id, 'text', ['text' => "设置成功"], $botUser->userid, true, false, true); } } + if ($backup['wenxin_token'] != $setting['wenxin_token']) { + $botUser = User::botGetOrCreate('ai-wenxin'); + if ($botUser && $dialog = WebSocketDialog::checkUserDialog($botUser, $user->userid)) { + WebSocketDialogMsg::sendMsg(null, $dialog->id, 'text', ['text' => "设置成功"], $botUser->userid, true, false, true); + } + } } // if (env("SYSTEM_SETTING") == 'disabled') { - foreach ([ - 'openai_key', - 'openai_agency', - 'claude_token', - 'claude_agency', - ] as $item) { + foreach ($keys as $item) { $setting[$item] = substr($setting[$item], 0, 4) . str_repeat('*', strlen($setting[$item]) - 8) . substr($setting[$item], -4); } } diff --git a/app/Models/UserBot.php b/app/Models/UserBot.php index 2172f4ca4..2bfe2c626 100644 --- a/app/Models/UserBot.php +++ b/app/Models/UserBot.php @@ -54,6 +54,7 @@ class UserBot extends AbstractModel 'approval-alert' => '审批', 'ai-openai' => 'ChatGPT', 'ai-claude' => 'Claude', + 'ai-wenxin' => 'Wenxin', 'bot-manager' => '机器人管理', default => '', // 不是系统机器人时返回空(也可以拿来判断是否是系统机器人) }; diff --git a/app/Tasks/BotReceiveMsgTask.php b/app/Tasks/BotReceiveMsgTask.php index 8fa6552a7..bc0061c64 100644 --- a/app/Tasks/BotReceiveMsgTask.php +++ b/app/Tasks/BotReceiveMsgTask.php @@ -400,6 +400,23 @@ class BotReceiveMsgTask extends AbstractTask $error = 'The client version is low (required version ≥ v0.29.11).'; } break; + // Wenxin 机器人 + case 'ai-wenxin@bot.system': + $setting = Base::setting('aibotSetting'); + $webhookUrl = "{$serverUrl}/ai/wenxin/send"; + $extras = [ + 'wenxin_key' => $setting['wenxin_key'], + 'wenxin_secret' => $setting['wenxin_secret'], + 'wenxin_model' => $setting['wenxin_model'], + 'server_url' => $serverUrl, + ]; + if (empty($extras['wenxin_key'])) { + $error = 'Robot disabled.'; + } elseif (in_array($this->client['platform'], ['win', 'mac', 'web']) + && !Base::judgeClientVersion("0.29.11", $this->client['version'])) { + $error = 'The client version is low (required version ≥ v0.29.12).'; + } + break; // 其他机器人 default: $userBot = UserBot::whereBotId($botUser->userid)->first(); @@ -414,21 +431,30 @@ class BotReceiveMsgTask extends AbstractTask return; } // - Ihttp::ihttp_post($webhookUrl, [ - 'text' => $command, - 'token' => User::generateToken($botUser), - 'dialog_id' => $dialog->id, - 'dialog_type' => $dialog->type, - 'msg_id' => $msg->id, - 'msg_uid' => $msg->userid, - 'mention' => $this->mention ? 1 : 0, - 'bot_uid' => $botUser->userid, - 'version' => Base::getVersion(), - 'extras' => Base::array2json($extras) - ], 10); - if ($userBot) { - $userBot->webhook_num++; - $userBot->save(); + try { + $res = Ihttp::ihttp_post($webhookUrl, [ + 'text' => $command, + 'token' => User::generateToken($botUser), + 'dialog_id' => $dialog->id, + 'dialog_type' => $dialog->type, + 'msg_id' => $msg->id, + 'msg_uid' => $msg->userid, + 'mention' => $this->mention ? 1 : 0, + 'bot_uid' => $botUser->userid, + 'version' => Base::getVersion(), + 'extras' => Base::array2json($extras) + ], 10); + if ($userBot) { + $userBot->webhook_num++; + $userBot->save(); + } + if($res['data'] && $data = json_decode($res['data'])){ + if($data['code'] != 200 && $data['message']){ + WebSocketDialogMsg::sendMsg(null, $msg->dialog_id, 'text', ['text' => $res['data']['message']], $botUser->userid, false, false, true); + } + } + } catch (\Throwable $th) { + //throw $th; } } diff --git a/resources/assets/js/pages/manage/setting/components/SystemAibot.vue b/resources/assets/js/pages/manage/setting/components/SystemAibot.vue index 74394d4e1..b38f2c22d 100644 --- a/resources/assets/js/pages/manage/setting/components/SystemAibot.vue +++ b/resources/assets/js/pages/manage/setting/components/SystemAibot.vue @@ -27,6 +27,24 @@ +
+

Wenxin

+
+ + + + + + + + + + +
+