feat: remove some config for hermes channel (#12560)

This commit is contained in:
CityFun
2026-04-22 13:43:24 +08:00
committed by GitHub
parent 1864dee591
commit 94a4e39793
8 changed files with 110 additions and 413 deletions
+17 -9
View File
@@ -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{
+17 -39
View File
@@ -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>