mirror of
https://github.com/1Panel-dev/1Panel.git
synced 2026-09-22 16:00:51 +00:00
feat: remove some config for hermes channel (#12560)
This commit is contained in:
@@ -159,15 +159,19 @@ func readHermesTelegramChannelConfig(confDir string) (*dto.AgentTelegramConfig,
|
||||
|
||||
allowFrom := splitHermesEnvList(envMap["TELEGRAM_ALLOWED_USERS"])
|
||||
requireMention := extractBoolValue(childMap(cfg, "telegram")["require_mention"], false)
|
||||
dmPolicy := "pairing"
|
||||
dmPolicy := ""
|
||||
if extractHermesEnvBool(envMap, "TELEGRAM_ALLOW_ALL_USERS", false) {
|
||||
dmPolicy = "open"
|
||||
} else if len(allowFrom) > 0 {
|
||||
dmPolicy = "allowlist"
|
||||
} else if envMap["TELEGRAM_BOT_TOKEN"] != "" {
|
||||
dmPolicy = "pairing"
|
||||
}
|
||||
groupPolicy := "open"
|
||||
groupPolicy := ""
|
||||
if requireMention {
|
||||
groupPolicy = "allowlist"
|
||||
} else if envMap["TELEGRAM_BOT_TOKEN"] != "" {
|
||||
groupPolicy = "open"
|
||||
}
|
||||
token := envMap["TELEGRAM_BOT_TOKEN"]
|
||||
result := &dto.AgentTelegramConfig{
|
||||
@@ -177,8 +181,8 @@ func readHermesTelegramChannelConfig(confDir string) (*dto.AgentTelegramConfig,
|
||||
RequireMention: requireMention,
|
||||
GroupPolicy: groupPolicy,
|
||||
GroupAllowFrom: []string{},
|
||||
Streaming: "partial",
|
||||
DefaultAccount: "default",
|
||||
Streaming: "",
|
||||
DefaultAccount: "",
|
||||
}
|
||||
if token != "" {
|
||||
result.Bots = []dto.AgentTelegramBot{
|
||||
@@ -192,7 +196,7 @@ func readHermesTelegramChannelConfig(confDir string) (*dto.AgentTelegramConfig,
|
||||
BotToken: token,
|
||||
DmPolicy: dmPolicy,
|
||||
GroupPolicy: groupPolicy,
|
||||
Streaming: "partial",
|
||||
Streaming: "",
|
||||
},
|
||||
}
|
||||
}
|
||||
@@ -250,16 +254,20 @@ func readHermesDiscordChannelConfig(confDir string) (*dto.AgentDiscordConfig, er
|
||||
}
|
||||
|
||||
allowFrom := splitHermesEnvList(envMap["DISCORD_ALLOWED_USERS"])
|
||||
requireMention := extractBoolValue(childMap(cfg, "discord")["require_mention"], true)
|
||||
dmPolicy := "pairing"
|
||||
requireMention := extractBoolValue(childMap(cfg, "discord")["require_mention"], false)
|
||||
dmPolicy := ""
|
||||
if extractHermesEnvBool(envMap, "DISCORD_ALLOW_ALL_USERS", false) {
|
||||
dmPolicy = "open"
|
||||
} else if len(allowFrom) > 0 {
|
||||
dmPolicy = "allowlist"
|
||||
} else if envMap["DISCORD_BOT_TOKEN"] != "" {
|
||||
dmPolicy = "pairing"
|
||||
}
|
||||
groupPolicy := "open"
|
||||
groupPolicy := ""
|
||||
if requireMention {
|
||||
groupPolicy = "allowlist"
|
||||
} else if envMap["DISCORD_BOT_TOKEN"] != "" {
|
||||
groupPolicy = "open"
|
||||
}
|
||||
token := envMap["DISCORD_BOT_TOKEN"]
|
||||
result := &dto.AgentDiscordConfig{
|
||||
@@ -268,7 +276,7 @@ func readHermesDiscordChannelConfig(confDir string) (*dto.AgentDiscordConfig, er
|
||||
AllowFrom: allowFrom,
|
||||
RequireMention: requireMention,
|
||||
GroupPolicy: groupPolicy,
|
||||
DefaultAccount: "default",
|
||||
DefaultAccount: "",
|
||||
}
|
||||
if token != "" {
|
||||
result.Bots = []dto.AgentDiscordBot{
|
||||
|
||||
@@ -48,14 +48,8 @@ func readHermesQQBotChannelConfig(confDir string) (*dto.AgentQQBotConfig, error)
|
||||
appID := envMap["QQ_APP_ID"]
|
||||
clientSecret := envMap["QQ_CLIENT_SECRET"]
|
||||
dmPolicy := extractStringValue(extra["dm_policy"])
|
||||
if dmPolicy == "" {
|
||||
dmPolicy = "open"
|
||||
}
|
||||
allowFrom := splitHermesEnvList(envMap["QQ_ALLOWED_USERS"])
|
||||
groupPolicy := extractStringValue(extra["group_policy"])
|
||||
if groupPolicy == "" {
|
||||
groupPolicy = "open"
|
||||
}
|
||||
groupAllowFrom := splitHermesEnvList(envMap["QQ_GROUP_ALLOWED_USERS"])
|
||||
|
||||
result := &dto.AgentQQBotConfig{
|
||||
@@ -181,18 +175,8 @@ func readHermesWecomChannelConfig(confDir string) (*dto.AgentWecomConfig, error)
|
||||
platform := childMap(childMap(cfg, "platforms"), "wecom")
|
||||
allowFrom := splitHermesEnvList(envMap["WECOM_ALLOWED_USERS"])
|
||||
groupAllowFrom := splitHermesEnvList(envMap["WECOM_GROUP_ALLOWED_USERS"])
|
||||
dmPolicy := "pairing"
|
||||
if envMap["WECOM_DM_POLICY"] == "open" {
|
||||
dmPolicy = "open"
|
||||
} else if len(allowFrom) > 0 {
|
||||
dmPolicy = "allowlist"
|
||||
} else if policy := envMap["WECOM_DM_POLICY"]; policy != "" {
|
||||
dmPolicy = policy
|
||||
}
|
||||
dmPolicy := envMap["WECOM_DM_POLICY"]
|
||||
groupPolicy := envMap["WECOM_GROUP_POLICY"]
|
||||
if groupPolicy == "" {
|
||||
groupPolicy = "open"
|
||||
}
|
||||
|
||||
botID := envMap["WECOM_BOT_ID"]
|
||||
secret := envMap["WECOM_SECRET"]
|
||||
@@ -309,22 +293,24 @@ func readHermesDingTalkChannelConfig(confDir string) (*dto.AgentDingTalkConfig,
|
||||
|
||||
platform := childMap(childMap(cfg, "platforms"), "dingtalk")
|
||||
extra := childMap(platform, "extra")
|
||||
clientID := envMap["DINGTALK_CLIENT_ID"]
|
||||
clientSecret := envMap["DINGTALK_CLIENT_SECRET"]
|
||||
allowFrom := splitHermesEnvList(envMap["DINGTALK_ALLOWED_USERS"])
|
||||
dmPolicy := "pairing"
|
||||
dmPolicy := ""
|
||||
if extractHermesEnvBool(envMap, "DINGTALK_ALLOW_ALL_USERS", false) {
|
||||
dmPolicy = "open"
|
||||
} else if len(allowFrom) > 0 {
|
||||
dmPolicy = "allowlist"
|
||||
} else if extractStringValue(extra["unauthorized_dm_behavior"]) == "ignore" {
|
||||
dmPolicy = "disabled"
|
||||
} else if clientID != "" || clientSecret != "" {
|
||||
dmPolicy = "pairing"
|
||||
}
|
||||
clientID := envMap["DINGTALK_CLIENT_ID"]
|
||||
clientSecret := envMap["DINGTALK_CLIENT_SECRET"]
|
||||
result := &dto.AgentDingTalkConfig{
|
||||
Enabled: extractBoolValue(platform["enabled"], clientID != "" && clientSecret != ""),
|
||||
DmPolicy: dmPolicy,
|
||||
AllowFrom: allowFrom,
|
||||
GroupPolicy: "open",
|
||||
GroupPolicy: "",
|
||||
GroupAllowFrom: []string{},
|
||||
}
|
||||
if clientID != "" || clientSecret != "" {
|
||||
@@ -422,29 +408,28 @@ func readHermesFeishuChannelConfig(confDir string) (*dto.AgentFeishuConfig, erro
|
||||
}
|
||||
|
||||
platform := childMap(childMap(cfg, "platforms"), "feishu")
|
||||
appID := envMap["FEISHU_APP_ID"]
|
||||
appSecret := envMap["FEISHU_APP_SECRET"]
|
||||
allowFrom := splitHermesEnvList(envMap["FEISHU_ALLOWED_USERS"])
|
||||
dmPolicy := "pairing"
|
||||
dmPolicy := ""
|
||||
if extractHermesEnvBool(envMap, "FEISHU_ALLOW_ALL_USERS", false) {
|
||||
dmPolicy = "open"
|
||||
} else if len(allowFrom) > 0 {
|
||||
dmPolicy = "allowlist"
|
||||
} else if appID != "" || appSecret != "" {
|
||||
dmPolicy = "pairing"
|
||||
}
|
||||
groupPolicy := envMap["FEISHU_GROUP_POLICY"]
|
||||
if groupPolicy == "" {
|
||||
groupPolicy = "allowlist"
|
||||
}
|
||||
appID := envMap["FEISHU_APP_ID"]
|
||||
appSecret := envMap["FEISHU_APP_SECRET"]
|
||||
result := &dto.AgentFeishuConfig{
|
||||
Enabled: extractBoolValue(platform["enabled"], appID != "" && appSecret != ""),
|
||||
ThreadSession: true,
|
||||
ReplyMode: "auto",
|
||||
ThreadSession: false,
|
||||
ReplyMode: "",
|
||||
Streaming: false,
|
||||
RequireMention: "true",
|
||||
RequireMention: "",
|
||||
GroupPolicy: groupPolicy,
|
||||
GroupAllowFrom: []string{},
|
||||
Domain: firstHermesEnvValue(envMap, "FEISHU_DOMAIN", "feishu"),
|
||||
ConnectionMode: firstHermesEnvValue(envMap, "FEISHU_CONNECTION_MODE", "websocket"),
|
||||
Domain: envMap["FEISHU_DOMAIN"],
|
||||
ConnectionMode: envMap["FEISHU_CONNECTION_MODE"],
|
||||
}
|
||||
if appID != "" || appSecret != "" {
|
||||
result.Bots = []dto.AgentFeishuBot{
|
||||
@@ -595,13 +580,6 @@ func firstHermesFeishuBot(bots []dto.AgentFeishuBot) dto.AgentFeishuBot {
|
||||
return bots[0]
|
||||
}
|
||||
|
||||
func firstHermesEnvValue(envMap map[string]string, key string, defaultValue string) string {
|
||||
if envMap[key] != "" {
|
||||
return envMap[key]
|
||||
}
|
||||
return defaultValue
|
||||
}
|
||||
|
||||
func buildHermesWeixinLoginArgs(containerName string) []string {
|
||||
return buildHermesDockerExecCommandArgs(
|
||||
containerName,
|
||||
|
||||
@@ -15,19 +15,9 @@
|
||||
<el-select v-model="form.dmPolicy">
|
||||
<el-option :label="t('aiTools.agents.pairingCode')" value="pairing" />
|
||||
<el-option :label="t('aiTools.agents.policyOpen')" value="open" />
|
||||
<el-option :label="t('aiTools.agents.policyAllowlist')" value="allowlist" />
|
||||
<el-option :label="t('aiTools.agents.policyDisabled')" value="disabled" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="form.dmPolicy === 'allowlist'" :label="t('aiTools.agents.allowFrom')" prop="allowFromText">
|
||||
<el-input
|
||||
v-model="form.allowFromText"
|
||||
type="textarea"
|
||||
:rows="3"
|
||||
:placeholder="t('aiTools.agents.allowFromPlaceholder')"
|
||||
/>
|
||||
<span class="input-help">{{ t('aiTools.agents.allowFromHelper') }}</span>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" :loading="saving" @click="save">
|
||||
{{ t('commons.button.save') }}
|
||||
@@ -63,8 +53,7 @@ import { MsgSuccess, MsgWarning } from '@/utils/message';
|
||||
interface DingTalkForm {
|
||||
clientId: string;
|
||||
clientSecret: string;
|
||||
dmPolicy: 'pairing' | 'open' | 'allowlist' | 'disabled';
|
||||
allowFromText: string;
|
||||
dmPolicy: 'pairing' | 'open' | 'disabled';
|
||||
}
|
||||
|
||||
const { t } = useI18n();
|
||||
@@ -79,36 +68,12 @@ const form = reactive<DingTalkForm>({
|
||||
clientId: '',
|
||||
clientSecret: '',
|
||||
dmPolicy: 'pairing',
|
||||
allowFromText: '',
|
||||
});
|
||||
|
||||
const parseTextList = (value: string): string[] => {
|
||||
return Array.from(
|
||||
new Set(
|
||||
String(value || '')
|
||||
.split(/\r?\n/)
|
||||
.map((item) => item.trim())
|
||||
.filter(Boolean),
|
||||
),
|
||||
);
|
||||
};
|
||||
|
||||
const rules = reactive({
|
||||
clientId: [Rules.requiredInput],
|
||||
clientSecret: [Rules.requiredInput],
|
||||
dmPolicy: [Rules.requiredSelect],
|
||||
allowFromText: [
|
||||
{
|
||||
validator: (_rule, value, callback) => {
|
||||
if (form.dmPolicy === 'allowlist' && parseTextList(String(value || '')).length === 0) {
|
||||
callback(new Error(t('aiTools.agents.allowFromRequired')));
|
||||
return;
|
||||
}
|
||||
callback();
|
||||
},
|
||||
trigger: 'blur',
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
const load = async (id: number) => {
|
||||
@@ -116,10 +81,15 @@ const load = async (id: number) => {
|
||||
pairingCode.value = '';
|
||||
const res = await getAgentDingTalkConfig({ agentId: id });
|
||||
configured.value = !!res.data?.enabled;
|
||||
if (!configured.value) {
|
||||
form.clientId = '';
|
||||
form.clientSecret = '';
|
||||
form.dmPolicy = 'pairing';
|
||||
return;
|
||||
}
|
||||
form.clientId = res.data?.bots?.[0]?.clientId || '';
|
||||
form.clientSecret = res.data?.bots?.[0]?.clientSecret || '';
|
||||
form.dmPolicy = (res.data?.dmPolicy as DingTalkForm['dmPolicy']) || 'pairing';
|
||||
form.allowFromText = (res.data?.allowFrom || []).join('\n');
|
||||
form.dmPolicy = res.data?.dmPolicy === 'disabled' ? 'disabled' : res.data?.dmPolicy === 'open' ? 'open' : 'pairing';
|
||||
};
|
||||
|
||||
const save = async () => {
|
||||
@@ -133,7 +103,7 @@ const save = async () => {
|
||||
agentId: agentId.value,
|
||||
enabled: true,
|
||||
dmPolicy: form.dmPolicy,
|
||||
allowFrom: form.dmPolicy === 'allowlist' ? parseTextList(form.allowFromText) : [],
|
||||
allowFrom: [],
|
||||
groupPolicy: 'open',
|
||||
groupAllowFrom: [],
|
||||
separateSessionByConversation: true,
|
||||
@@ -211,12 +181,3 @@ defineExpose({
|
||||
load,
|
||||
});
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.input-help {
|
||||
display: block;
|
||||
margin-top: 8px;
|
||||
color: var(--el-text-color-secondary);
|
||||
font-size: 12px;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -12,18 +12,8 @@
|
||||
<el-select v-model="form.dmPolicy">
|
||||
<el-option :label="t('aiTools.agents.pairingCode')" value="pairing" />
|
||||
<el-option :label="t('aiTools.agents.policyOpen')" value="open" />
|
||||
<el-option :label="t('aiTools.agents.policyAllowlist')" value="allowlist" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="form.dmPolicy === 'allowlist'" :label="t('aiTools.agents.allowFrom')" prop="allowFromText">
|
||||
<el-input
|
||||
v-model="form.allowFromText"
|
||||
type="textarea"
|
||||
:rows="3"
|
||||
:placeholder="t('aiTools.agents.allowFromPlaceholder')"
|
||||
/>
|
||||
<span class="input-help">{{ t('aiTools.agents.allowFromHelper') }}</span>
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('aiTools.agents.requireMention')">
|
||||
<el-switch v-model="form.requireMention" />
|
||||
</el-form-item>
|
||||
@@ -61,8 +51,7 @@ import { MsgSuccess, MsgWarning } from '@/utils/message';
|
||||
|
||||
interface DiscordForm {
|
||||
token: string;
|
||||
dmPolicy: 'pairing' | 'open' | 'allowlist';
|
||||
allowFromText: string;
|
||||
dmPolicy: 'pairing' | 'open';
|
||||
requireMention: boolean;
|
||||
}
|
||||
|
||||
@@ -76,34 +65,13 @@ const pairingCode = ref('');
|
||||
const configured = ref(false);
|
||||
const form = reactive<DiscordForm>({
|
||||
token: '',
|
||||
dmPolicy: 'pairing',
|
||||
allowFromText: '',
|
||||
dmPolicy: 'open',
|
||||
requireMention: true,
|
||||
});
|
||||
|
||||
const parseTextList = (value: string): string[] => {
|
||||
return Array.from(
|
||||
new Set(
|
||||
value
|
||||
.split(/\r?\n/)
|
||||
.map((item) => item.trim())
|
||||
.filter(Boolean),
|
||||
),
|
||||
);
|
||||
};
|
||||
|
||||
const validateAllowFrom = (_rule: any, value: string, callback: (error?: Error) => void) => {
|
||||
if (form.dmPolicy !== 'allowlist' || parseTextList(value).length > 0) {
|
||||
callback();
|
||||
return;
|
||||
}
|
||||
callback(new Error(t('aiTools.agents.allowFromRequired')));
|
||||
};
|
||||
|
||||
const rules = reactive({
|
||||
token: [Rules.requiredInput],
|
||||
dmPolicy: [Rules.requiredSelect],
|
||||
allowFromText: [{ validator: validateAllowFrom, trigger: 'blur' }],
|
||||
});
|
||||
|
||||
const load = async (id: number) => {
|
||||
@@ -111,9 +79,14 @@ const load = async (id: number) => {
|
||||
pairingCode.value = '';
|
||||
const res = await getAgentDiscordConfig({ agentId: id });
|
||||
configured.value = !!res.data?.enabled;
|
||||
if (!configured.value) {
|
||||
form.token = '';
|
||||
form.dmPolicy = 'open';
|
||||
form.requireMention = true;
|
||||
return;
|
||||
}
|
||||
form.token = res.data?.bots?.[0]?.token || '';
|
||||
form.dmPolicy = (res.data?.dmPolicy as DiscordForm['dmPolicy']) || 'pairing';
|
||||
form.allowFromText = (res.data?.allowFrom || []).join('\n');
|
||||
form.dmPolicy = res.data?.dmPolicy === 'pairing' ? 'pairing' : 'open';
|
||||
form.requireMention = res.data?.requireMention ?? true;
|
||||
};
|
||||
|
||||
@@ -124,13 +97,12 @@ const save = async () => {
|
||||
await formRef.value.validate();
|
||||
saving.value = true;
|
||||
try {
|
||||
const allowFrom = parseTextList(form.allowFromText);
|
||||
const groupPolicy = form.requireMention ? 'allowlist' : 'open';
|
||||
await updateAgentDiscordConfig({
|
||||
agentId: agentId.value,
|
||||
enabled: true,
|
||||
dmPolicy: form.dmPolicy,
|
||||
allowFrom,
|
||||
allowFrom: [],
|
||||
requireMention: form.requireMention,
|
||||
groupPolicy,
|
||||
proxy: '',
|
||||
@@ -200,12 +172,3 @@ defineExpose({
|
||||
load,
|
||||
});
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.input-help {
|
||||
display: block;
|
||||
margin-top: 8px;
|
||||
color: var(--el-text-color-secondary);
|
||||
font-size: 12px;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -13,34 +13,16 @@
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('aiTools.agents.dmPolicy')" prop="dmPolicy">
|
||||
<el-select v-model="form.dmPolicy">
|
||||
<el-option
|
||||
:label="t('aiTools.agents.pairingCode')"
|
||||
value="pairing"
|
||||
:disabled="form.groupPolicy === 'allowlist'"
|
||||
/>
|
||||
<el-option :label="t('aiTools.agents.pairingCode')" value="pairing" />
|
||||
<el-option :label="t('aiTools.agents.policyOpen')" value="open" />
|
||||
<el-option :label="t('aiTools.agents.policyAllowlist')" value="allowlist" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('aiTools.agents.groupPolicy')" prop="groupPolicy">
|
||||
<el-select v-model="form.groupPolicy">
|
||||
<el-option :label="t('aiTools.agents.policyOpen')" value="open" />
|
||||
<el-option :label="t('aiTools.agents.policyAllowlist')" value="allowlist" />
|
||||
<el-option :label="t('aiTools.agents.policyDisabled')" value="disabled" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
v-if="form.dmPolicy === 'allowlist' || form.groupPolicy === 'allowlist'"
|
||||
:label="t('aiTools.agents.policyAllowlist')"
|
||||
prop="allowFromText"
|
||||
>
|
||||
<el-input
|
||||
v-model="form.allowFromText"
|
||||
type="textarea"
|
||||
:rows="3"
|
||||
:placeholder="t('aiTools.agents.allowFromPlaceholder')"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" :loading="saving" @click="save">
|
||||
{{ t('commons.button.save') }}
|
||||
@@ -61,7 +43,7 @@
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { reactive, ref, watch } from 'vue';
|
||||
import { reactive, ref } from 'vue';
|
||||
import { ElMessageBox, type FormInstance } from 'element-plus';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import {
|
||||
@@ -76,9 +58,8 @@ import { MsgSuccess, MsgWarning } from '@/utils/message';
|
||||
interface FeishuForm {
|
||||
appId: string;
|
||||
appSecret: string;
|
||||
dmPolicy: 'pairing' | 'open' | 'allowlist';
|
||||
allowFromText: string;
|
||||
groupPolicy: 'open' | 'allowlist' | 'disabled';
|
||||
dmPolicy: 'pairing' | 'open';
|
||||
groupPolicy: 'open' | 'disabled';
|
||||
}
|
||||
|
||||
const { t } = useI18n();
|
||||
@@ -92,51 +73,15 @@ const configured = ref(false);
|
||||
const form = reactive<FeishuForm>({
|
||||
appId: '',
|
||||
appSecret: '',
|
||||
dmPolicy: 'pairing',
|
||||
allowFromText: '',
|
||||
groupPolicy: 'allowlist',
|
||||
dmPolicy: 'open',
|
||||
groupPolicy: 'open',
|
||||
});
|
||||
|
||||
watch(
|
||||
() => form.groupPolicy,
|
||||
(value) => {
|
||||
if (value === 'allowlist' && form.dmPolicy === 'pairing') {
|
||||
form.dmPolicy = 'allowlist';
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
const parseTextList = (value: string): string[] => {
|
||||
return Array.from(
|
||||
new Set(
|
||||
String(value || '')
|
||||
.split(/\r?\n/)
|
||||
.map((item) => item.trim())
|
||||
.filter(Boolean),
|
||||
),
|
||||
);
|
||||
};
|
||||
|
||||
const rules = reactive({
|
||||
appId: [Rules.requiredInput],
|
||||
appSecret: [Rules.requiredInput],
|
||||
dmPolicy: [Rules.requiredSelect],
|
||||
groupPolicy: [Rules.requiredSelect],
|
||||
allowFromText: [
|
||||
{
|
||||
validator: (_rule, value, callback) => {
|
||||
if (
|
||||
(form.dmPolicy === 'allowlist' || form.groupPolicy === 'allowlist') &&
|
||||
parseTextList(String(value || '')).length === 0
|
||||
) {
|
||||
callback(new Error(t('aiTools.agents.allowFromRequired')));
|
||||
return;
|
||||
}
|
||||
callback();
|
||||
},
|
||||
trigger: 'blur',
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
const load = async (id: number) => {
|
||||
@@ -144,11 +89,17 @@ const load = async (id: number) => {
|
||||
pairingCode.value = '';
|
||||
const res = await getAgentFeishuConfig({ agentId: id });
|
||||
configured.value = !!res.data?.enabled;
|
||||
if (!configured.value) {
|
||||
form.appId = '';
|
||||
form.appSecret = '';
|
||||
form.dmPolicy = 'open';
|
||||
form.groupPolicy = 'open';
|
||||
return;
|
||||
}
|
||||
form.appId = res.data?.bots?.[0]?.appId || '';
|
||||
form.appSecret = res.data?.bots?.[0]?.appSecret || '';
|
||||
form.dmPolicy = (res.data?.bots?.[0]?.dmPolicy as FeishuForm['dmPolicy']) || 'pairing';
|
||||
form.allowFromText = (res.data?.bots?.[0]?.allowFrom || []).join('\n');
|
||||
form.groupPolicy = (res.data?.groupPolicy as FeishuForm['groupPolicy']) || 'allowlist';
|
||||
form.dmPolicy = res.data?.bots?.[0]?.dmPolicy === 'pairing' ? 'pairing' : 'open';
|
||||
form.groupPolicy = res.data?.groupPolicy === 'disabled' ? 'disabled' : 'open';
|
||||
};
|
||||
|
||||
const save = async () => {
|
||||
@@ -158,7 +109,6 @@ const save = async () => {
|
||||
await formRef.value.validate();
|
||||
saving.value = true;
|
||||
try {
|
||||
const allowFrom = parseTextList(form.allowFromText);
|
||||
await updateAgentFeishuConfig({
|
||||
agentId: agentId.value,
|
||||
enabled: true,
|
||||
@@ -177,7 +127,7 @@ const save = async () => {
|
||||
appId: form.appId,
|
||||
appSecret: form.appSecret,
|
||||
dmPolicy: form.dmPolicy,
|
||||
allowFrom: form.dmPolicy === 'allowlist' || form.groupPolicy === 'allowlist' ? allowFrom : [],
|
||||
allowFrom: [],
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
@@ -15,39 +15,15 @@
|
||||
<el-select v-model="form.dmPolicy">
|
||||
<el-option :label="t('aiTools.agents.pairingCode')" value="pairing" />
|
||||
<el-option :label="t('aiTools.agents.policyOpen')" value="open" />
|
||||
<el-option :label="t('aiTools.agents.policyAllowlist')" value="allowlist" />
|
||||
<el-option :label="t('aiTools.agents.policyDisabled')" value="disabled" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="form.dmPolicy === 'allowlist'" :label="t('aiTools.agents.allowFrom')" prop="allowFromText">
|
||||
<el-input
|
||||
v-model="form.allowFromText"
|
||||
type="textarea"
|
||||
:rows="3"
|
||||
:placeholder="t('aiTools.agents.allowFromPlaceholder')"
|
||||
/>
|
||||
<span class="input-help">{{ t('aiTools.agents.allowFromHelper') }}</span>
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('aiTools.agents.groupPolicy')" prop="groupPolicy">
|
||||
<el-select v-model="form.groupPolicy">
|
||||
<el-option :label="t('aiTools.agents.policyOpen')" value="open" />
|
||||
<el-option :label="t('aiTools.agents.policyAllowlist')" value="allowlist" />
|
||||
<el-option :label="t('aiTools.agents.policyDisabled')" value="disabled" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
v-if="form.groupPolicy === 'allowlist'"
|
||||
:label="t('aiTools.agents.groupAllowFrom')"
|
||||
prop="groupAllowFromText"
|
||||
>
|
||||
<el-input
|
||||
v-model="form.groupAllowFromText"
|
||||
type="textarea"
|
||||
:rows="3"
|
||||
:placeholder="t('aiTools.agents.groupAllowFromPlaceholder')"
|
||||
/>
|
||||
<span class="input-help">{{ t('aiTools.agents.groupAllowFromHelper') }}</span>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" :loading="saving" @click="save">
|
||||
{{ t('commons.button.save') }}
|
||||
@@ -83,10 +59,8 @@ import { MsgSuccess, MsgWarning } from '@/utils/message';
|
||||
interface QQBotForm {
|
||||
appId: string;
|
||||
clientSecret: string;
|
||||
dmPolicy: 'pairing' | 'open' | 'allowlist' | 'disabled';
|
||||
allowFromText: string;
|
||||
groupPolicy: 'open' | 'allowlist' | 'disabled';
|
||||
groupAllowFromText: string;
|
||||
dmPolicy: 'pairing' | 'open' | 'disabled';
|
||||
groupPolicy: 'open' | 'disabled';
|
||||
}
|
||||
|
||||
const { t } = useI18n();
|
||||
@@ -101,51 +75,14 @@ const form = reactive<QQBotForm>({
|
||||
appId: '',
|
||||
clientSecret: '',
|
||||
dmPolicy: 'open',
|
||||
allowFromText: '',
|
||||
groupPolicy: 'open',
|
||||
groupAllowFromText: '',
|
||||
});
|
||||
|
||||
const parseTextList = (value: string): string[] => {
|
||||
return Array.from(
|
||||
new Set(
|
||||
String(value || '')
|
||||
.split(/\r?\n/)
|
||||
.map((item) => item.trim())
|
||||
.filter(Boolean),
|
||||
),
|
||||
);
|
||||
};
|
||||
|
||||
const rules = reactive({
|
||||
appId: [Rules.requiredInput],
|
||||
clientSecret: [Rules.requiredInput],
|
||||
dmPolicy: [Rules.requiredSelect],
|
||||
groupPolicy: [Rules.requiredSelect],
|
||||
allowFromText: [
|
||||
{
|
||||
validator: (_rule, value, callback) => {
|
||||
if (form.dmPolicy === 'allowlist' && parseTextList(String(value || '')).length === 0) {
|
||||
callback(new Error(t('aiTools.agents.allowFromRequired')));
|
||||
return;
|
||||
}
|
||||
callback();
|
||||
},
|
||||
trigger: 'blur',
|
||||
},
|
||||
],
|
||||
groupAllowFromText: [
|
||||
{
|
||||
validator: (_rule, value, callback) => {
|
||||
if (form.groupPolicy === 'allowlist' && parseTextList(String(value || '')).length === 0) {
|
||||
callback(new Error(t('aiTools.agents.allowFromRequired')));
|
||||
return;
|
||||
}
|
||||
callback();
|
||||
},
|
||||
trigger: 'blur',
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
const load = async (id: number) => {
|
||||
@@ -153,12 +90,18 @@ const load = async (id: number) => {
|
||||
pairingCode.value = '';
|
||||
const res = await getAgentQQBotConfig({ agentId: id });
|
||||
configured.value = !!res.data?.enabled;
|
||||
if (!configured.value) {
|
||||
form.appId = '';
|
||||
form.clientSecret = '';
|
||||
form.dmPolicy = 'open';
|
||||
form.groupPolicy = 'open';
|
||||
return;
|
||||
}
|
||||
form.appId = res.data?.bots?.[0]?.appId || '';
|
||||
form.clientSecret = res.data?.bots?.[0]?.clientSecret || '';
|
||||
form.dmPolicy = (res.data?.dmPolicy as QQBotForm['dmPolicy']) || 'open';
|
||||
form.allowFromText = (res.data?.allowFrom || []).join('\n');
|
||||
form.groupPolicy = (res.data?.groupPolicy as QQBotForm['groupPolicy']) || 'open';
|
||||
form.groupAllowFromText = (res.data?.groupAllowFrom || []).join('\n');
|
||||
form.dmPolicy =
|
||||
res.data?.dmPolicy === 'disabled' ? 'disabled' : res.data?.dmPolicy === 'pairing' ? 'pairing' : 'open';
|
||||
form.groupPolicy = res.data?.groupPolicy === 'disabled' ? 'disabled' : 'open';
|
||||
};
|
||||
|
||||
const save = async () => {
|
||||
@@ -172,9 +115,9 @@ const save = async () => {
|
||||
agentId: agentId.value,
|
||||
enabled: true,
|
||||
dmPolicy: form.dmPolicy,
|
||||
allowFrom: parseTextList(form.allowFromText),
|
||||
allowFrom: [],
|
||||
groupPolicy: form.groupPolicy,
|
||||
groupAllowFrom: parseTextList(form.groupAllowFromText),
|
||||
groupAllowFrom: [],
|
||||
bots: [
|
||||
{
|
||||
accountId: 'default',
|
||||
@@ -247,12 +190,3 @@ defineExpose({
|
||||
load,
|
||||
});
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.input-help {
|
||||
display: block;
|
||||
margin-top: 8px;
|
||||
color: var(--el-text-color-secondary);
|
||||
font-size: 12px;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -12,18 +12,8 @@
|
||||
<el-select v-model="form.dmPolicy">
|
||||
<el-option :label="t('aiTools.agents.pairingCode')" value="pairing" />
|
||||
<el-option :label="t('aiTools.agents.policyOpen')" value="open" />
|
||||
<el-option :label="t('aiTools.agents.policyAllowlist')" value="allowlist" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="form.dmPolicy === 'allowlist'" :label="t('aiTools.agents.allowFrom')" prop="allowFromText">
|
||||
<el-input
|
||||
v-model="form.allowFromText"
|
||||
type="textarea"
|
||||
:rows="3"
|
||||
:placeholder="t('aiTools.agents.allowFromPlaceholder')"
|
||||
/>
|
||||
<span class="input-help">{{ t('aiTools.agents.allowFromHelper') }}</span>
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('aiTools.agents.requireMention')">
|
||||
<el-switch v-model="form.requireMention" />
|
||||
</el-form-item>
|
||||
@@ -61,8 +51,7 @@ import { MsgSuccess, MsgWarning } from '@/utils/message';
|
||||
|
||||
interface TelegramForm {
|
||||
botToken: string;
|
||||
dmPolicy: 'pairing' | 'open' | 'allowlist';
|
||||
allowFromText: string;
|
||||
dmPolicy: 'pairing' | 'open';
|
||||
requireMention: boolean;
|
||||
}
|
||||
|
||||
@@ -76,34 +65,13 @@ const pairingCode = ref('');
|
||||
const configured = ref(false);
|
||||
const form = reactive<TelegramForm>({
|
||||
botToken: '',
|
||||
dmPolicy: 'pairing',
|
||||
allowFromText: '',
|
||||
requireMention: false,
|
||||
dmPolicy: 'open',
|
||||
requireMention: true,
|
||||
});
|
||||
|
||||
const parseTextList = (value: string): string[] => {
|
||||
return Array.from(
|
||||
new Set(
|
||||
value
|
||||
.split(/\r?\n/)
|
||||
.map((item) => item.trim())
|
||||
.filter(Boolean),
|
||||
),
|
||||
);
|
||||
};
|
||||
|
||||
const validateAllowFrom = (_rule: any, value: string, callback: (error?: Error) => void) => {
|
||||
if (form.dmPolicy !== 'allowlist' || parseTextList(value).length > 0) {
|
||||
callback();
|
||||
return;
|
||||
}
|
||||
callback(new Error(t('aiTools.agents.allowFromRequired')));
|
||||
};
|
||||
|
||||
const rules = reactive({
|
||||
botToken: [Rules.requiredInput],
|
||||
dmPolicy: [Rules.requiredSelect],
|
||||
allowFromText: [{ validator: validateAllowFrom, trigger: 'blur' }],
|
||||
});
|
||||
|
||||
const load = async (id: number) => {
|
||||
@@ -111,10 +79,15 @@ const load = async (id: number) => {
|
||||
pairingCode.value = '';
|
||||
const res = await getAgentTelegramConfig({ agentId: id });
|
||||
configured.value = !!res.data?.enabled;
|
||||
if (!configured.value) {
|
||||
form.botToken = '';
|
||||
form.dmPolicy = 'open';
|
||||
form.requireMention = true;
|
||||
return;
|
||||
}
|
||||
form.botToken = res.data?.bots?.[0]?.botToken || '';
|
||||
form.dmPolicy = (res.data?.dmPolicy as TelegramForm['dmPolicy']) || 'pairing';
|
||||
form.allowFromText = (res.data?.allowFrom || []).join('\n');
|
||||
form.requireMention = res.data?.requireMention || false;
|
||||
form.dmPolicy = res.data?.dmPolicy === 'pairing' ? 'pairing' : 'open';
|
||||
form.requireMention = res.data?.requireMention ?? true;
|
||||
};
|
||||
|
||||
const save = async () => {
|
||||
@@ -124,13 +97,12 @@ const save = async () => {
|
||||
await formRef.value.validate();
|
||||
saving.value = true;
|
||||
try {
|
||||
const allowFrom = parseTextList(form.allowFromText);
|
||||
const groupPolicy = form.requireMention ? 'allowlist' : 'open';
|
||||
await updateAgentTelegramConfig({
|
||||
agentId: agentId.value,
|
||||
enabled: true,
|
||||
dmPolicy: form.dmPolicy,
|
||||
allowFrom,
|
||||
allowFrom: [],
|
||||
requireMention: form.requireMention,
|
||||
groupPolicy,
|
||||
groupAllowFrom: [],
|
||||
@@ -205,12 +177,3 @@ defineExpose({
|
||||
load,
|
||||
});
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.input-help {
|
||||
display: block;
|
||||
margin-top: 8px;
|
||||
color: var(--el-text-color-secondary);
|
||||
font-size: 12px;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -15,39 +15,15 @@
|
||||
<el-select v-model="form.dmPolicy">
|
||||
<el-option :label="t('aiTools.agents.pairingCode')" value="pairing" />
|
||||
<el-option :label="t('aiTools.agents.policyOpen')" value="open" />
|
||||
<el-option :label="t('aiTools.agents.policyAllowlist')" value="allowlist" />
|
||||
<el-option :label="t('aiTools.agents.policyDisabled')" value="disabled" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="form.dmPolicy === 'allowlist'" :label="t('aiTools.agents.allowFrom')" prop="allowFromText">
|
||||
<el-input
|
||||
v-model="form.allowFromText"
|
||||
type="textarea"
|
||||
:rows="3"
|
||||
:placeholder="t('aiTools.agents.allowFromPlaceholder')"
|
||||
/>
|
||||
<span class="input-help">{{ t('aiTools.agents.allowFromHelper') }}</span>
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('aiTools.agents.groupPolicy')" prop="groupPolicy">
|
||||
<el-select v-model="form.groupPolicy">
|
||||
<el-option :label="t('aiTools.agents.policyOpen')" value="open" />
|
||||
<el-option :label="t('aiTools.agents.policyAllowlist')" value="allowlist" />
|
||||
<el-option :label="t('aiTools.agents.policyDisabled')" value="disabled" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
v-if="form.groupPolicy === 'allowlist'"
|
||||
:label="t('aiTools.agents.groupAllowFrom')"
|
||||
prop="groupAllowFromText"
|
||||
>
|
||||
<el-input
|
||||
v-model="form.groupAllowFromText"
|
||||
type="textarea"
|
||||
:rows="3"
|
||||
:placeholder="t('aiTools.agents.groupAllowFromPlaceholder')"
|
||||
/>
|
||||
<span class="input-help">{{ t('aiTools.agents.groupAllowFromHelper') }}</span>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" :loading="saving" @click="save">
|
||||
{{ t('commons.button.save') }}
|
||||
@@ -81,10 +57,8 @@ import { Rules } from '@/global/form-rules';
|
||||
import { MsgSuccess, MsgWarning } from '@/utils/message';
|
||||
|
||||
interface WecomForm {
|
||||
dmPolicy: 'pairing' | 'open' | 'allowlist' | 'disabled';
|
||||
allowFromText: string;
|
||||
groupPolicy: 'open' | 'allowlist' | 'disabled';
|
||||
groupAllowFromText: string;
|
||||
dmPolicy: 'pairing' | 'open' | 'disabled';
|
||||
groupPolicy: 'open' | 'disabled';
|
||||
botId: string;
|
||||
secret: string;
|
||||
}
|
||||
@@ -98,46 +72,15 @@ const agentId = ref(0);
|
||||
const pairingCode = ref('');
|
||||
const configured = ref(false);
|
||||
const form = reactive<WecomForm>({
|
||||
dmPolicy: 'pairing',
|
||||
allowFromText: '',
|
||||
dmPolicy: 'open',
|
||||
groupPolicy: 'open',
|
||||
groupAllowFromText: '',
|
||||
botId: '',
|
||||
secret: '',
|
||||
});
|
||||
|
||||
const parseTextList = (value: string): string[] => {
|
||||
return Array.from(
|
||||
new Set(
|
||||
String(value || '')
|
||||
.split(/\r?\n/)
|
||||
.map((item) => item.trim())
|
||||
.filter(Boolean),
|
||||
),
|
||||
);
|
||||
};
|
||||
|
||||
const validateAllowFrom = (_rule: any, value: string, callback: (error?: Error) => void) => {
|
||||
if (form.dmPolicy !== 'allowlist' || parseTextList(value).length > 0) {
|
||||
callback();
|
||||
return;
|
||||
}
|
||||
callback(new Error(t('aiTools.agents.allowFromRequired')));
|
||||
};
|
||||
|
||||
const validateGroupAllowFrom = (_rule: any, value: string, callback: (error?: Error) => void) => {
|
||||
if (form.groupPolicy !== 'allowlist' || parseTextList(value).length > 0) {
|
||||
callback();
|
||||
return;
|
||||
}
|
||||
callback(new Error(t('aiTools.agents.allowFromRequired')));
|
||||
};
|
||||
|
||||
const rules = reactive({
|
||||
dmPolicy: [Rules.requiredSelect],
|
||||
allowFromText: [{ validator: validateAllowFrom, trigger: 'blur' }],
|
||||
groupPolicy: [Rules.requiredSelect],
|
||||
groupAllowFromText: [{ validator: validateGroupAllowFrom, trigger: 'blur' }],
|
||||
botId: [Rules.requiredInput],
|
||||
secret: [Rules.requiredInput],
|
||||
});
|
||||
@@ -147,10 +90,16 @@ const load = async (id: number) => {
|
||||
pairingCode.value = '';
|
||||
const res = await getAgentWecomConfig({ agentId: id });
|
||||
configured.value = !!res.data?.enabled;
|
||||
form.dmPolicy = (res.data?.dmPolicy as WecomForm['dmPolicy']) || 'pairing';
|
||||
form.allowFromText = (res.data?.allowFrom || []).join('\n');
|
||||
form.groupPolicy = (res.data?.groupPolicy as WecomForm['groupPolicy']) || 'open';
|
||||
form.groupAllowFromText = (res.data?.groupAllowFrom || []).join('\n');
|
||||
if (!configured.value) {
|
||||
form.dmPolicy = 'open';
|
||||
form.groupPolicy = 'open';
|
||||
form.botId = '';
|
||||
form.secret = '';
|
||||
return;
|
||||
}
|
||||
form.dmPolicy =
|
||||
res.data?.dmPolicy === 'disabled' ? 'disabled' : res.data?.dmPolicy === 'pairing' ? 'pairing' : 'open';
|
||||
form.groupPolicy = res.data?.groupPolicy === 'disabled' ? 'disabled' : 'open';
|
||||
form.botId = res.data?.botId || '';
|
||||
form.secret = res.data?.secret || '';
|
||||
};
|
||||
@@ -166,9 +115,9 @@ const save = async () => {
|
||||
agentId: agentId.value,
|
||||
enabled: true,
|
||||
dmPolicy: form.dmPolicy,
|
||||
allowFrom: parseTextList(form.allowFromText),
|
||||
allowFrom: [],
|
||||
groupPolicy: form.groupPolicy,
|
||||
groupAllowFrom: parseTextList(form.groupAllowFromText),
|
||||
groupAllowFrom: [],
|
||||
botId: form.botId,
|
||||
secret: form.secret,
|
||||
});
|
||||
@@ -231,12 +180,3 @@ defineExpose({
|
||||
load,
|
||||
});
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.input-help {
|
||||
display: block;
|
||||
margin-top: 8px;
|
||||
color: var(--el-text-color-secondary);
|
||||
font-size: 12px;
|
||||
}
|
||||
</style>
|
||||
|
||||
Reference in New Issue
Block a user