Skip to content

Commit 2c91b1d

Browse files
authored
支持腾讯内容安全的策略 (#738)
1 parent b875de0 commit 2c91b1d

File tree

4 files changed

+27
-3
lines changed

4 files changed

+27
-3
lines changed

src/client/utils/i18n/i18n.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -588,6 +588,14 @@ export default {
588588
'Спамни аниқлаш учун Тенсент Слоуд махфий идентификатори. Тенсент Слоуд ва Акисмет бир вақтнинг ўзида ўрнатилганда, фақат Тенсент Слоуд кучга киради. Рўйхатдан ўтиш: https://twikoo.js.org/cms.html',
589589
'Tencent CloudのシークレットID、スパムコメントの検出に使用されます。同時にTencent CloudとAkismetを設定した場合、Tencent Cloudのみが有効になります。登録:https://twikoo.js.org/cms.html'
590590
],
591+
[S.ACI + '_QCLOUD_CMS_BIZTYPE']: [
592+
'腾讯云内容安全 Biztype 名称,用于垃圾评论策略。可以自定义垃圾拦截规则',
593+
'騰訊雲內容安全 Biztype 名稱,用於垃圾評論策略。可以自定義垃圾攔截規則',
594+
'騰訊雲內容安全 Biztype 名稱,用於垃圾評論策略。可以自定義垃圾攔截規則', // 「騰訊雲」是一家網路服務提供商,不改為「騰訊雲端」。
595+
'Tencent Cloud Content Security Biztype name for spam comment policy. Spam blocking rules can be customized',
596+
'Tencent Cloud Content Security Biztype име, използвано за спам политика. Може да персонализира правилата за блокиране на спам',
597+
'Tencent Cloud Content Security Biztype name スパムコメントポリシー。スパムブロックルールはカスタマイズ可能'
598+
],
591599
[S.ACI + '_QCLOUD_SECRET_KEY']: [
592600
'腾讯云 secret key',
593601
'騰訊雲 secret key',

src/client/view/components/TkAdminConfig.vue

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ export default {
9393
{ key: 'AKISMET_KEY', desc: t('ADMIN_CONFIG_ITEM_AKISMET_KEY'), ph: `${t('ADMIN_CONFIG_EXAMPLE')}8651783edxxx`, value: '' },
9494
{ key: 'QCLOUD_SECRET_ID', desc: t('ADMIN_CONFIG_ITEM_QCLOUD_SECRET_ID'), ph: `${t('ADMIN_CONFIG_EXAMPLE')}AKIDBgZDdnbTw9D4ey9qPkrkwtb2Do9EwIHw`, value: '' },
9595
{ key: 'QCLOUD_SECRET_KEY', desc: t('ADMIN_CONFIG_ITEM_QCLOUD_SECRET_KEY'), ph: `${t('ADMIN_CONFIG_EXAMPLE')}XrkOnvKWS7WeXbP1QZT76rPgtpWx73D7`, value: '', secret: true },
96+
{ key: 'QCLOUD_CMS_BIZTYPE', desc: t('ADMIN_CONFIG_ITEM_QCLOUD_CMS_BIZTYPE'), ph: `${t('ADMIN_CONFIG_EXAMPLE')}1787728329856520192`, value: '', secret: true },
9697
{ key: 'LIMIT_PER_MINUTE', desc: t('ADMIN_CONFIG_ITEM_LIMIT_PER_MINUTE'), ph: `${t('ADMIN_CONFIG_EXAMPLE')}5`, value: '' },
9798
{ key: 'LIMIT_PER_MINUTE_ALL', desc: t('ADMIN_CONFIG_ITEM_LIMIT_PER_MINUTE_ALL'), ph: `${t('ADMIN_CONFIG_EXAMPLE')}5`, value: '' },
9899
{ key: 'LIMIT_LENGTH', desc: t('ADMIN_CONFIG_ITEM_LIMIT_LENGTH'), ph: `${t('ADMIN_CONFIG_EXAMPLE')}100`, value: '' },

src/server/function/twikoo/utils/index.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,11 @@ const fn = {
334334
throw new Error(`参数"${requiredParam}"不合法`)
335335
}
336336
}
337+
},
338+
// 移除表情内容,用于内容安全检测
339+
removeEmotionImages (content) {
340+
const regex = /<img[^>]*class="tk-owo-emotion"[^>]*>/g
341+
return content.replace(regex, '')
337342
}
338343
}
339344

src/server/function/twikoo/utils/spam.js

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@ const {
33
getCryptoJS,
44
getTencentcloud
55
} = require('./lib')
6+
const {
7+
equalsMail,
8+
removeEmotionImages
9+
} = require('.')
610
const AkismetClient = getAkismetClient()
711
const CryptoJS = getCryptoJS()
812

@@ -29,17 +33,23 @@ const fn = {
2933
if (comment.isSpam) {
3034
// 预检测没过的,就不再检测了
3135
isSpam = true
36+
} else if (equalsMail(config.BLOGGER_EMAIL, comment.mail)) {
37+
// 博主本人评论,不再检测了
38+
isSpam = false
3239
} else if (config.QCLOUD_SECRET_ID && config.QCLOUD_SECRET_KEY) {
3340
// 腾讯云内容安全
34-
const client = new (getTencentCloud().tms.v20200713.Client)({
41+
const client = new (getTencentCloud().tms.v20201229.Client)({
3542
credential: { secretId: config.QCLOUD_SECRET_ID, secretKey: config.QCLOUD_SECRET_KEY },
3643
region: 'ap-shanghai',
3744
profile: { httpProfile: { endpoint: 'tms.tencentcloudapi.com' } }
3845
})
46+
const cleanContent = removeEmotionImages(comment.comment)
3947
const checkResult = await client.TextModeration({
40-
Content: CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(comment.comment)),
48+
Content: CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(cleanContent)),
4149
Device: { IP: comment.ip },
42-
User: { Nickname: comment.nick }
50+
BizType: { BizType: config.QCLOUD_SECRET_ID },
51+
User: { Nickname: comment.nick },
52+
DataId: { DataId: comment.id }
4353
})
4454
logger.log('腾讯云返回结果:', checkResult)
4555
isSpam = checkResult.EvilFlag !== 0

0 commit comments

Comments
 (0)