Compare commits

..

No commits in common. "130c8bf3b1190697bdd88c15b2a239d6a21358b7" and "ab4640382dde48dcda8587b7a34c2ab358ad40cb" have entirely different histories.

33 changed files with 110 additions and 575 deletions

View File

@ -445,6 +445,28 @@ class DialogController extends AbstractController
}
$data = WebSocketDialog::synthesizeData($dialog->id, $user->userid);
if ($userid > 0) {
$botTarget = User::whereUserid($userid)->whereBot(1)->first();
if ($botTarget) {
$userBot = UserBot::whereBotId($botTarget->userid)->first();
if ($userBot) {
$userBot->dispatchWebhook(UserBot::WEBHOOK_EVENT_DIALOG_OPEN, [
'dialog_id' => $dialog->id,
'dialog_type' => $dialog->type,
'session_id' => $dialog->session_id,
'dialog_name' => $dialog->getGroupName(),
'user' => [
'userid' => $user->userid,
'email' => $user->email,
'nickname' => $user->nickname,
],
], 10, [
'dialog' => $dialog->id,
'operator' => $user->userid,
]);
}
}
}
return Base::retSuccess('success', $data);
}
@ -3688,61 +3710,4 @@ class DialogController extends AbstractController
//
return Base::retSuccess('重命名成功', $session);
}
/**
* @api {get} api/dialog/open/webhook 打开机器人会话推送 webhook
*
* @apiDescription 需要token身份
* @apiVersion 1.0.0
* @apiGroup dialog
* @apiName open__webhook
*
* @apiParam {Number} dialog_id 对话ID
*
* @apiSuccess {Number} ret 返回状态码1正确、0错误
* @apiSuccess {String} msg 返回信息(错误描述)
* @apiSuccess {Object} data 返回数据
*/
public function open__webhook()
{
$user = User::auth();
//
$dialog_id = intval(Request::input('dialog_id'));
if (empty($dialog_id)) {
return Base::retError('错误的会话');
}
//
$dialog = WebSocketDialog::checkDialog($dialog_id);
if (empty($dialog)) {
return Base::retError('打开会话失败');
}
$data = WebSocketDialog::synthesizeData($dialog->id, $user->userid);
if ($data['bot'] == 1) {
$botTarget = User::whereUserid($data['dialog_user']['userid'])->whereBot(1)->first();
if ($botTarget) {
$userBot = UserBot::whereBotId($botTarget->userid)->first();
if ($userBot) {
// 每个机器人1分钟只触发一次 webhook
Cache::remember('webhook_dialog_open_' . $botTarget->userid, 60, function () use ($userBot, $dialog, $user) {
$userBot->dispatchWebhook(UserBot::WEBHOOK_EVENT_DIALOG_OPEN, [
'dialog_id' => $dialog->id,
'dialog_type' => $dialog->type,
'session_id' => $dialog->session_id,
'dialog_name' => $dialog->getGroupName(),
'user' => [
'userid' => $user->userid,
'email' => $user->email,
'nickname' => $user->nickname,
],
], 10, [
'dialog' => $dialog->id,
'operator' => $user->userid,
]);
return true;
});
}
}
}
return Base::retSuccess('success');
}
}

View File

@ -107,10 +107,10 @@ class SystemController extends AbstractController
}
}
if ($all['voice2text'] == 'open' && !Setting::AIOpen()) {
return Base::retError('开启语音转文字功能需要在应用启用 AI 助手。');
return Base::retError('开启语音转文字功能需要先设置 AI 助理。');
}
if ($all['translation'] == 'open' && !Setting::AIOpen()) {
return Base::retError('开启翻译功能需要在应用启用 AI 助手。');
return Base::retError('开启翻译功能需要先设置 AI 助理。');
}
if ($all['system_alias'] == env('APP_NAME')) {
$all['system_alias'] = '';

View File

@ -1551,6 +1551,11 @@ class UsersController extends AbstractController
return Base::retSuccess('success', $data);
}
protected function buildUserTagResponse(?User $viewer, int $targetUserId, string $message = 'success')
{
return Base::retSuccess($message, UserTag::listWithMeta($targetUserId, $viewer));
}
/**
* @api {get} api/users/tags/lists 10.1. 获取个性标签列表
*
@ -1588,7 +1593,7 @@ class UsersController extends AbstractController
if (empty($target)) {
return Base::retError('会员不存在');
}
return Base::retSuccess('success', UserTag::listWithMeta($target->userid, $viewer));
return $this->buildUserTagResponse($viewer, $target->userid);
}
/**
@ -1637,7 +1642,7 @@ class UsersController extends AbstractController
]);
$tag->save();
return Base::retSuccess('添加成功', UserTag::listWithMeta($userid, $viewer));
return $this->buildUserTagResponse($viewer, $userid, '添加成功');
}
/**
@ -1692,7 +1697,7 @@ class UsersController extends AbstractController
}
$tag->save();
return Base::retSuccess('保存成功', UserTag::listWithMeta($tag->user_id, $viewer));
return $this->buildUserTagResponse($viewer, $tag->user_id, '保存成功');
}
/**
@ -1727,7 +1732,7 @@ class UsersController extends AbstractController
$userId = $tag->user_id;
$tag->delete();
return Base::retSuccess('删除成功', UserTag::listWithMeta($userId, $viewer));
return $this->buildUserTagResponse($viewer, $userId, '删除成功');
}
/**
@ -1770,7 +1775,7 @@ class UsersController extends AbstractController
$message = '认可成功';
}
return Base::retSuccess($message, UserTag::listWithMeta($tag->user_id, $viewer));
return $this->buildUserTagResponse($viewer, $tag->user_id, $message);
}
/**

View File

@ -116,7 +116,7 @@ class Setting extends AbstractModel
}
/**
* 是否开启 AI
* 是否开启 AI
* @return bool
*/
public static function AIOpen()

View File

@ -446,7 +446,7 @@ API接口文档
会议已结束
请选择举报类型
请填写举报原因
开启语音转文字功能需要在应用启用 AI 助手
开启语音转文字功能需要先设置 AI 助理
语音转文字功能未开启
语音文件不存在
语音转文字失败
@ -615,7 +615,7 @@ webhook地址最长仅支持255个字符。
消息不存在或已被删除
此消息不支持翻译
消息内容为空
开启翻译功能需要在应用启用 AI 助手
开启翻译功能需要先设置 AI 助理
翻译功能未开启
翻译失败
@ -940,17 +940,3 @@ URL格式不正确
汇报内容解析失败
整理汇报失败
整理后的内容为空
生日格式错误
地址最多只能设置(*)个字
个人简介最多只能设置(*)个字
会员不存在
请输入个性标签
标签名称最多只能设置(*)个字
标签已存在
每位会员最多添加(*)个标签
参数错误
标签不存在
无权操作该标签
已取消认可
认可成功

View File

@ -1500,6 +1500,7 @@ License Key
转文字
语音转文字
长按语音消息可转换成文字。
需要先设置 AI 助理
关闭语音转文字功能。
你确定要删除文件【(*)】吗?
查看附件
@ -2146,7 +2147,7 @@ API URL
代理
请输入代理
选填,支持 http、https、socks5 协议
需要在应用启用 AI 助手
需要先设置 AI 助理
打开签到机器人
下载内容
@ -2257,29 +2258,3 @@ AI 整理汇报
AI 未返回整理内容
没有可应用的内容
已应用整理结果
Webhook事件
接收消息
打开会话
成员加入
成员退出
是否拨打电话给(*)
是否发送邮件给(*)
个人信息
我的群组
个性标签管理
请输入个性标签
还没有个性标签,快来添加吧~
认可
由(*)创建
当前共(*)个标签
删除标签
地址
请输入地址
个人简介
请输入个人简介
个性标签
暂无个性标签
管理

View File

@ -30419,6 +30419,18 @@
"id": "Anggota Departemen",
"ru": "Члены отдела"
},
{
"key": "需要先设置 AI 助理",
"zh": "",
"zh-CHT": "需要先設定 AI 助理",
"en": "You need to set up an AI assistant first",
"ko": "AI 도우미를 먼저 설정해야 합니다",
"ja": "AIアシスタントを先に設定する必要があります",
"de": "Sie müssen zuerst einen KI-Assistenten einrichten",
"fr": "Vous devez d'abord configurer l'assistant IA",
"id": "Anda harus mengatur asisten AI terlebih dahulu",
"ru": "Сначала нужно настроить AI-ассистента"
},
{
"key": "AI 助手",
"zh": "",
@ -30575,6 +30587,30 @@
"id": "Opsional, mendukung protokol http, https, socks5",
"ru": "Необязательно, поддерживаются протоколы http, https, socks5"
},
{
"key": "开启语音转文字功能需要先设置 AI 助理。",
"zh": "",
"zh-CHT": "開啟語音轉文字功能需先設置 AI 助理。",
"en": "To enable speech-to-text, please set up the AI assistant first.",
"ko": "음성 인식 기능을 사용하려면 AI 어시스턴트를 먼저 설정해야 합니다.",
"ja": "音声から文字への変換機能を有効にするには、先にAIアシスタントを設定してください。",
"de": "Um die Sprach-zu-Text-Funktion zu aktivieren, richten Sie bitte zuerst den KI-Assistenten ein.",
"fr": "Pour activer la fonction de conversion vocale en texte, veuillez d'abord configurer l'assistant IA.",
"id": "Untuk mengaktifkan fitur konversi suara ke teks, silakan atur asisten AI terlebih dahulu.",
"ru": "Чтобы включить функцию преобразования речи в текст, сначала настройте AI-ассистента."
},
{
"key": "开启翻译功能需要先设置 AI 助理。",
"zh": "",
"zh-CHT": "開啟翻譯功能需先設置 AI 助理。",
"en": "To enable translation, please set up the AI assistant first.",
"ko": "번역 기능을 사용하려면 AI 어시스턴트를 먼저 설정해야 합니다.",
"ja": "翻訳機能を有効にするには、先にAIアシスタントを設定してください。",
"de": "Um die Übersetzungsfunktion zu aktivieren, richten Sie bitte zuerst den KI-Assistenten ein.",
"fr": "Pour activer la fonction de traduction, veuillez d'abord configurer l'assistant IA.",
"id": "Untuk mengaktifkan fitur terjemahan, silakan atur asisten AI terlebih dahulu.",
"ru": "Чтобы включить функцию перевода, сначала настройте AI-ассистента."
},
{
"key": "腾讯地图Key",
"zh": "",
@ -32434,401 +32470,5 @@
"fr": "Le contenu organisé est vide",
"id": "Konten yang telah diatur kosong",
"ru": "Упорядоченное содержимое пусто"
},
{
"key": "需要在应用启用 AI 助手",
"zh": "",
"zh-CHT": "需要在應用啟用 AI 助手",
"en": "AI Assistant must be enabled in the app",
"ko": "앱에서 AI 도우미를 활성화해야 합니다",
"ja": "アプリでAIアシスタントを有効にする必要があります",
"de": "Der KI-Assistent muss in der App aktiviert sein",
"fr": "Lassistant IA doit être activé dans lapplication",
"id": "Asisten AI harus diaktifkan di aplikasi",
"ru": "Необходимо включить ИИ‑помощника в приложении"
},
{
"key": "Webhook事件",
"zh": "",
"zh-CHT": "Webhook事件",
"en": "Webhook events",
"ko": "Webhook 이벤트",
"ja": "Webhookイベント",
"de": "Webhook-Ereignisse",
"fr": "Événements Webhook",
"id": "Peristiwa Webhook",
"ru": "События Webhook"
},
{
"key": "接收消息",
"zh": "",
"zh-CHT": "接收消息",
"en": "Receive messages",
"ko": "메시지 수신",
"ja": "メッセージを受信",
"de": "Nachrichten empfangen",
"fr": "Recevoir des messages",
"id": "Menerima pesan",
"ru": "Получать сообщения"
},
{
"key": "打开会话",
"zh": "",
"zh-CHT": "打開會話",
"en": "Open conversation",
"ko": "대화 열기",
"ja": "会話を開く",
"de": "Konversation öffnen",
"fr": "Ouvrir la conversation",
"id": "Buka percakapan",
"ru": "Открыть диалог"
},
{
"key": "成员加入",
"zh": "",
"zh-CHT": "成員加入",
"en": "Member joined",
"ko": "구성원 참가",
"ja": "メンバーが参加",
"de": "Mitglied beigetreten",
"fr": "Membre ajouté",
"id": "Anggota bergabung",
"ru": "Участник присоединился"
},
{
"key": "成员退出",
"zh": "",
"zh-CHT": "成員退出",
"en": "Member left",
"ko": "구성원 탈퇴",
"ja": "メンバーが退出",
"de": "Mitglied hat verlassen",
"fr": "Membre parti",
"id": "Anggota keluar",
"ru": "Участник вышел"
},
{
"key": "开启语音转文字功能需要在应用启用 AI 助手。",
"zh": "",
"zh-CHT": "開啟語音轉文字功能需要在應用啟用 AI 助手。",
"en": "To enable speech-to-text, the AI Assistant must be enabled in the app.",
"ko": "음성→텍스트 기능을 켜려면 앱에서 AI 도우미를 활성화해야 합니다.",
"ja": "音声文字変換を有効にするには、アプリでAIアシスタントを有効にする必要があります。",
"de": "Um Sprache-zu-Text zu aktivieren, muss der KI-Assistent in der App aktiviert sein.",
"fr": "Pour activer la conversion voix en texte, lassistant IA doit être activé dans lapplication.",
"id": "Untuk mengaktifkan suara ke teks, Asisten AI harus diaktifkan di aplikasi.",
"ru": "Чтобы включить функцию распознавания речи, нужно активировать ИИ‑помощника в приложении."
},
{
"key": "开启翻译功能需要在应用启用 AI 助手。",
"zh": "",
"zh-CHT": "開啟翻譯功能需要在應用啟用 AI 助手。",
"en": "To enable translation, the AI Assistant must be enabled in the app.",
"ko": "번역 기능을 켜려면 앱에서 AI 도우미를 활성화해야 합니다.",
"ja": "翻訳機能を有効にするには、アプリでAIアシスタントを有効にする必要があります。",
"de": "Um die Übersetzungsfunktion zu aktivieren, muss der KI-Assistent in der App aktiviert sein.",
"fr": "Pour activer la traduction, lassistant IA doit être activé dans lapplication.",
"id": "Untuk mengaktifkan terjemahan, Asisten AI harus diaktifkan di aplikasi.",
"ru": "Чтобы включить перевод, нужно активировать ИИ‑помощника в приложении."
},
{
"key": "生日格式错误",
"zh": "",
"zh-CHT": "生日格式錯誤",
"en": "Invalid birthday format",
"ko": "생일 형식이 올바르지 않습니다",
"ja": "誕生日の形式が正しくありません",
"de": "Ungültiges Geburtsdatumformat",
"fr": "Format danniversaire invalide",
"id": "Format tanggal lahir tidak valid",
"ru": "Неверный формат даты рождения"
},
{
"key": "地址最多只能设置(%T1)个字",
"zh": "",
"zh-CHT": "地址最多只能設定(%T1)個字",
"en": "The address can contain at most (%T1) characters",
"ko": "주소는 최대 (%T1)자까지 입력할 수 있습니다",
"ja": "住所は最大(%T1)文字まで設定できます",
"de": "Die Adresse darf höchstens (%T1) Zeichen enthalten",
"fr": "Ladresse peut contenir au maximum (%T1) caractères",
"id": "Alamat dapat diisi maksimal (%T1) karakter",
"ru": "Адрес может содержать не более (%T1) символов"
},
{
"key": "个人简介最多只能设置(%T1)个字",
"zh": "",
"zh-CHT": "個人簡介最多只能設定(%T1)個字",
"en": "The bio can contain at most (%T1) characters",
"ko": "개인 소개는 최대 (%T1)자까지 설정할 수 있습니다",
"ja": "自己紹介は最大(%T1)文字まで設定できます",
"de": "Die Kurzbiografie darf höchstens (%T1) Zeichen enthalten",
"fr": "La biographie peut contenir au maximum (%T1) caractères",
"id": "Bio dapat berisi maksimal (%T1) karakter",
"ru": "Био может содержать не более (%T1) символов"
},
{
"key": "请输入个性标签",
"zh": "",
"zh-CHT": "請輸入個性標籤",
"en": "Please enter a personality tag",
"ko": "개성 태그를 입력하세요",
"ja": "個性タグを入力してください",
"de": "Bitte geben Sie ein Persönlichkeitstag ein",
"fr": "Veuillez saisir une étiquette de personnalité",
"id": "Silakan masukkan tag kepribadian",
"ru": "Пожалуйста, введите тег личности"
},
{
"key": "标签名称最多只能设置(%T1)个字",
"zh": "",
"zh-CHT": "標籤名稱最多只能設定(%T1)個字",
"en": "The tag name can contain at most (%T1) characters",
"ko": "태그 이름은 최대 (%T1)자까지 설정할 수 있습니다",
"ja": "タグ名は最大(%T1)文字まで設定できます",
"de": "Der Tag-Name darf höchstens (%T1) Zeichen enthalten",
"fr": "Le nom de létiquette peut contenir au maximum (%T1) caractères",
"id": "Nama tag dapat berisi maksimal (%T1) karakter",
"ru": "Название тега может содержать не более (%T1) символов"
},
{
"key": "每位会员最多添加(%T1)个标签",
"zh": "",
"zh-CHT": "每位會員最多新增(%T1)個標籤",
"en": "Each member can add up to (%T1) tags",
"ko": "회원당 최대 (%T1)개의 태그를 추가할 수 있습니다",
"ja": "各メンバーは最大(%T1)個のタグを追加できます",
"de": "Jedes Mitglied kann bis zu (%T1) Tags hinzufügen",
"fr": "Chaque membre peut ajouter jusquà (%T1) étiquettes",
"id": "Setiap anggota dapat menambahkan hingga (%T1) tag",
"ru": "Каждый участник может добавить до (%T1) тегов"
},
{
"key": "标签不存在",
"zh": "",
"zh-CHT": "標籤不存在",
"en": "Tag does not exist",
"ko": "태그가 존재하지 않습니다",
"ja": "タグが存在しません",
"de": "Tag existiert nicht",
"fr": "Létiquette nexiste pas",
"id": "Tag tidak ada",
"ru": "Тег не существует"
},
{
"key": "无权操作该标签",
"zh": "",
"zh-CHT": "無權操作該標籤",
"en": "You do not have permission to operate on this tag",
"ko": "이 태그를 조작할 권한이 없습니다",
"ja": "このタグを操作する権限がありません",
"de": "Sie haben keine Berechtigung, diesen Tag zu bearbeiten",
"fr": "Vous navez pas lautorisation dopérer sur cette étiquette",
"id": "Anda tidak memiliki izin untuk mengoperasikan tag ini",
"ru": "У вас нет прав для работы с этим тегом"
},
{
"key": "已取消认可",
"zh": "",
"zh-CHT": "已取消認可",
"en": "Recognition canceled",
"ko": "인정이 취소되었습니다",
"ja": "認可を取り消しました",
"de": "Anerkennung wurde abgebrochen",
"fr": "Reconnaissance annulée",
"id": "Pengakuan dibatalkan",
"ru": "Подтверждение отменено"
},
{
"key": "认可成功",
"zh": "",
"zh-CHT": "認可成功",
"en": "Recognition successful",
"ko": "인정 성공",
"ja": "認可に成功しました",
"de": "Anerkennung erfolgreich",
"fr": "Reconnaissance réussie",
"id": "Pengakuan berhasil",
"ru": "Подтверждение выполнено успешно"
},
{
"key": "是否发送邮件给(%T1)",
"zh": "",
"zh-CHT": "是否發送郵件給(%T1)",
"en": "Send an email to (%T1)?",
"ko": "(%T1)에게 이메일을 보낼까요?",
"ja": "(%T1)にメールを送信しますか?",
"de": "E-Mail an (%T1) senden?",
"fr": "Envoyer un e-mail à (%T1) ?",
"id": "Kirim email ke (%T1)?",
"ru": "Отправить письмо для (%T1)?"
},
{
"key": "个人信息",
"zh": "",
"zh-CHT": "個人資訊",
"en": "Personal Information",
"ko": "개인 정보",
"ja": "個人情報",
"de": "Persönliche Informationen",
"fr": "Informations personnelles",
"id": "Informasi Pribadi",
"ru": "Личная информация"
},
{
"key": "我的群组",
"zh": "",
"zh-CHT": "我的群組",
"en": "My Groups",
"ko": "내 그룹",
"ja": "マイグループ",
"de": "Meine Gruppen",
"fr": "Mes groupes",
"id": "Grup Saya",
"ru": "Мои группы"
},
{
"key": "个性标签管理",
"zh": "",
"zh-CHT": "個性標籤管理",
"en": "Personal Tag Management",
"ko": "개성 태그 관리",
"ja": "パーソナルタグ管理",
"de": "Verwaltung persönlicher Tags",
"fr": "Gestion des étiquettes personnelles",
"id": "Manajemen Tag Pribadi",
"ru": "Управление персональными тегами"
},
{
"key": "还没有个性标签,快来添加吧~",
"zh": "",
"zh-CHT": "還沒有個性標籤,快來添加吧~",
"en": "No personal tags yet. Add some!",
"ko": "아직 개인 태그가 없습니다. 추가해 보세요!",
"ja": "まだパーソナルタグがありません。追加しましょう!",
"de": "Noch keine persönlichen Tags. Füge welche hinzu!",
"fr": "Pas encore détiquettes personnelles. Ajoutez-en !",
"id": "Belum ada tag pribadi. Tambahkan sekarang!",
"ru": "Персональных тегов пока нет. Добавьте их!"
},
{
"key": "认可",
"zh": "",
"zh-CHT": "認可",
"en": "Recognition",
"ko": "인정",
"ja": "承認",
"de": "Anerkennung",
"fr": "Reconnaissance",
"id": "Pengakuan",
"ru": "Признание"
},
{
"key": "由(%T1)创建",
"zh": "",
"zh-CHT": "由(%T1)建立",
"en": "Created by (%T1)",
"ko": "(%T1)이(가) 생성함",
"ja": "(%T1)が作成",
"de": "Erstellt von (%T1)",
"fr": "Créé par (%T1)",
"id": "Dibuat oleh (%T1)",
"ru": "Создано (%T1)"
},
{
"key": "当前共(%T1)个标签",
"zh": "",
"zh-CHT": "當前共(%T1)個標籤",
"en": "Currently (%T1) tags in total",
"ko": "현재 총 (%T1)개 태그",
"ja": "現在、合計(%T1)個のタグ",
"de": "Derzeit insgesamt (%T1) Tags",
"fr": "Actuellement (%T1) étiquettes au total",
"id": "Saat ini total (%T1) tag",
"ru": "Сейчас всего (%T1) тег(ов)"
},
{
"key": "地址",
"zh": "",
"zh-CHT": "地址",
"en": "Address",
"ko": "주소",
"ja": "住所",
"de": "Adresse",
"fr": "Adresse",
"id": "Alamat",
"ru": "Адрес"
},
{
"key": "请输入地址",
"zh": "",
"zh-CHT": "請輸入地址",
"en": "Please enter the address",
"ko": "주소를 입력하세요",
"ja": "住所を入力してください",
"de": "Bitte geben Sie die Adresse ein",
"fr": "Veuillez saisir l'adresse",
"id": "Silakan masukkan alamat",
"ru": "Пожалуйста, введите адрес"
},
{
"key": "个人简介",
"zh": "",
"zh-CHT": "個人簡介",
"en": "Bio",
"ko": "개인 소개",
"ja": "自己紹介",
"de": "Profil",
"fr": "Biographie",
"id": "Profil",
"ru": "О себе"
},
{
"key": "请输入个人简介",
"zh": "",
"zh-CHT": "請輸入個人簡介",
"en": "Please enter your bio",
"ko": "개인 소개를 입력하세요",
"ja": "自己紹介を入力してください",
"de": "Bitte geben Sie Ihre Profilbeschreibung ein",
"fr": "Veuillez saisir votre biographie",
"id": "Silakan masukkan profil Anda",
"ru": "Пожалуйста, введите информацию о себе"
},
{
"key": "个性标签",
"zh": "",
"zh-CHT": "個性標籤",
"en": "Personal tags",
"ko": "개성 태그",
"ja": "パーソナルタグ",
"de": "Persönliche Tags",
"fr": "Étiquettes personnelles",
"id": "Tag pribadi",
"ru": "Личные теги"
},
{
"key": "暂无个性标签",
"zh": "",
"zh-CHT": "暫無個性標籤",
"en": "No personal tags yet",
"ko": "개성 태그가 없습니다",
"ja": "パーソナルタグはまだありません",
"de": "Noch keine persönlichen Tags",
"fr": "Aucune étiquette personnelle pour le moment",
"id": "Belum ada tag pribadi",
"ru": "Пока нет личных тегов"
},
{
"key": "管理",
"zh": "",
"zh-CHT": "管理",
"en": "Manage",
"ko": "관리",
"ja": "管理",
"de": "Verwalten",
"fr": "Gérer",
"id": "Kelola",
"ru": "Управление"
}
]

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""]
["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""]

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -496,13 +496,13 @@ export default {
if (result.length) {
return Array.from(new Set(result));
}
return [];
return useFallback ? ['message'] : [];
},
enhanceMybotItem(item = {}) {
const data = $A.cloneJSON(item || {});
let events = data.webhook_events;
if (typeof events === 'undefined' || events === null) {
events = [];
events = ['message'];
}
events = this.normalizeWebhookEvents(events, false);
if (!events.length) {

View File

@ -1241,8 +1241,6 @@ export default {
this.getDialogBase(dialog_id)
this.generateUnreadData(old_id)
//
this.$store.dispatch('openDialogWebhook', dialog_id)
//
this.$store.dispatch('closeDialog', {id: old_id})
//
window.localStorage.removeItem('__cache:vote__')
@ -1474,16 +1472,16 @@ export default {
if (result.length) {
return Array.from(new Set(result));
}
return [];
return useFallback ? ['message'] : [];
},
prepareWebhookEvents(events, useFallback = false) {
let value = events;
if (typeof value === 'undefined' || value === null) {
value = [];
value = useFallback ? ['message'] : [];
}
value = this.normalizeWebhookEvents(value, false);
if (!value.length && useFallback) {
return [];
return ['message'];
}
return value;
},

View File

@ -187,7 +187,7 @@
<Radio label="open">{{$L('开启')}}</Radio>
<Radio label="close">{{$L('关闭')}}</Radio>
</RadioGroup>
<div v-if="formDatum.voice2text == 'open'" class="form-tip">{{$L('长按语音消息可转换成文字')}} ({{$L('需要在应用启用 AI 助手')}})</div>
<div v-if="formDatum.voice2text == 'open'" class="form-tip">{{$L('长按语音消息可转换成文字。')}} (<a @click="$emit('on-switch-tab', 'aiAssistant')" href="javascript:void(0)">{{$L('需要先设置 AI 助理')}}</a>)</div>
<div v-else class="form-tip">{{$L('关闭语音转文字功能。')}}</div>
</FormItem>
<FormItem :label="$L('翻译消息')" prop="translation">
@ -195,7 +195,7 @@
<Radio label="open">{{$L('开启')}}</Radio>
<Radio label="close">{{$L('关闭')}}</Radio>
</RadioGroup>
<div v-if="formDatum.translation == 'open'" class="form-tip">{{$L('长按文本消息可翻译成当前设置的语言')}} ({{$L('需要在应用启用 AI 助手')}})</div>
<div v-if="formDatum.translation == 'open'" class="form-tip">{{$L('长按文本消息可翻译成当前设置的语言。')}} (<a @click="$emit('on-switch-tab', 'aiAssistant')" href="javascript:void(0)">{{$L('需要先设置 AI 助理')}}</a>)</div>
<div v-else class="form-tip">{{$L('关闭文本消息翻译功能。')}}</div>
</FormItem>
<FormItem :label="$L('视频转换')" prop="convertVideo">

View File

@ -2,7 +2,7 @@
<div class="setting-item submit">
<Tabs v-model="tabAction">
<TabPane :label="$L('系统设置')" name="setting">
<SystemSetting/>
<SystemSetting @on-switch-tab="tabAction = $event"/>
</TabPane>
<TabPane :label="$L('任务优先级')" name="taskPriority">
<SystemTaskPriority/>

View File

@ -8,8 +8,8 @@
<Drawio v-else-if="isType('drawio')" v-model="msgDetail.content" :title="msgDetail.msg.name" readOnly/>
<Minder v-else-if="isType('mind')" :value="msgDetail.content" readOnly/>
<template v-else-if="msgDetail.type === 'longtext'">
<DialogMarkdown v-if="msgDetail.content.type === 'md'" class="view-longtext no-dark-content" :text="msgDetail.content.content"/>
<div v-else class="view-longtext" v-html="$A.formatTextMsg(msgDetail.content.content, userId)"></div>
<VMPreview v-if="msgDetail.content.type === 'md'" :value="msgDetail.content.content"/>
<div v-else class="view-code" v-html="$A.formatTextMsg(msgDetail.content.content, userId)"></div>
</template>
<template v-else-if="isType('code')">
<div v-if="isLongText(msgDetail.msg.name)" class="view-code" v-html="$A.formatTextMsg(msgDetail.content.content, userId)"></div>
@ -31,8 +31,7 @@
.vmpreview-wrapper,
.teditor-wrapper,
.no-support,
.view-code,
.view-longtext {
.view-code {
position: absolute;
top: 0;
left: 0;
@ -61,9 +60,6 @@
word-wrap: break-word;
overflow: auto;
}
.view-longtext {
padding: 1rem;
}
.view-editor,
.no-support {
display: flex;
@ -77,7 +73,6 @@ import {mapState} from "vuex";
import IFrame from "../manage/components/IFrame";
const VMPreview = () => import('../../components/VMEditor/preview');
const DialogMarkdown = () => import('../manage/components/DialogMarkdown');
const TEditor = () => import('../../components/TEditor');
const AceEditor = () => import('../../components/AceEditor');
const OnlyOffice = () => import('../../components/OnlyOffice');
@ -85,7 +80,7 @@ const Drawio = () => import('../../components/Drawio');
const Minder = () => import('../../components/Minder');
export default {
components: {IFrame, AceEditor, TEditor, VMPreview, DialogMarkdown, OnlyOffice, Drawio, Minder},
components: {IFrame, AceEditor, TEditor, VMPreview, OnlyOffice, Drawio, Minder},
data() {
return {
loadIng: 0,

View File

@ -3514,35 +3514,6 @@ export default {
})
},
/**
* 打开会话打开机器人会话推送 webhook
* @param state
* @param dispatch
* @param dialogId
* @returns {Promise<unknown>}
*/
openDialogWebhook({state, dispatch}, dialogId) {
return new Promise((resolve, reject) => {
const dialog = state.cacheDialogs.find(item => {
if (item.type !== 'user') {
return false
}
return item.id === dialogId
});
if (dialog && dialog.bot === 1) {
dispatch("call", {
url: 'dialog/open/webhook',
data: {
dialog_id: dialogId,
},
}).catch(e => {
console.warn(e);
reject(e);
})
}
});
},
/**
* 打开会话通过会员ID打开个人会话
* @param state
@ -3557,7 +3528,7 @@ export default {
}
return item.dialog_user.userid === userid
});
if (dialog) {
if (dialog && dialog.bot !== 1) {
return dispatch("openDialog", dialog.id).then(resolve).catch(reject)
}
dispatch("call", {