From 2769901ca2f31b5ad8c6a34e9a84c9bc40719a44 Mon Sep 17 00:00:00 2001 From: luying Date: Thu, 5 Aug 2021 20:47:13 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=91=E5=87=BD=E6=95=B0=EF=BC=9A=E5=B1=8F?= =?UTF-8?q?=E8=94=BD=E8=AF=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/servers/connector/filter/global.ts | 18 ++++++++++++++- game-server/app/services/chatService.ts | 23 +++++++++++++++++++ game-server/package.json | 2 ++ shared/consts/statusCode.ts | 1 + shared/db/User.ts | 14 +++++++---- web-server/typings/config/plugin.d.ts | 2 -- 6 files changed, 52 insertions(+), 8 deletions(-) diff --git a/game-server/app/servers/connector/filter/global.ts b/game-server/app/servers/connector/filter/global.ts index 4f2e4fb6d..d72a0eb83 100644 --- a/game-server/app/servers/connector/filter/global.ts +++ b/game-server/app/servers/connector/filter/global.ts @@ -1,7 +1,7 @@ import {Application, RouteRecord, FrontendOrBackendSession, HandlerCallback, pinus} from "pinus"; import { checkEvent } from '../../../services/eventSercive'; import { refresh } from '../../../services/refreshService'; -import { getWorldChannelSid } from "../../../services/chatService"; +import { checkFilterWords, getWorldChannelSid } from "../../../services/chatService"; import { resResult, checkWhiteListWithUid } from "../../../pubUtils/util"; import { STATUS } from "../../../consts"; import { UserModel } from "../../../db/User"; @@ -30,6 +30,22 @@ Filter.prototype.before = async function (routeRecord: RouteRecord, msg: any, se next(new Error(), resResult(STATUS.SERVER_MAINTENANCE)); } + let hasBlockWords = false; + if(routeRecord.route == 'chat.chatHandler.send') { + hasBlockWords = await checkFilterWords(msg.content); + } else if(routeRecord.route == 'guild.guildHandler.sendMail') { + hasBlockWords = await checkFilterWords(msg.info); + } else if (routeRecord.route == 'guild.guildHandler.recruit') { + hasBlockWords = await checkFilterWords(msg.info); + } else if (routeRecord.route == 'role.barrageHandler.sendBarrage') { + hasBlockWords = await checkFilterWords(msg.info); + } else if (routeRecord.route == 'role.roleHandler.initRole') { + hasBlockWords = await checkFilterWords(msg.roleName); + } else if (routeRecord.route == 'role.roleHandler.rename') { + hasBlockWords = await checkFilterWords(msg.roleName); + } + if(hasBlockWords) next(new Error(), resResult(STATUS.BLOCK_WORDS)); + next(null); }; diff --git a/game-server/app/services/chatService.ts b/game-server/app/services/chatService.ts index 1be732e3c..2ff9b54e3 100644 --- a/game-server/app/services/chatService.ts +++ b/game-server/app/services/chatService.ts @@ -14,6 +14,7 @@ import { ChatInfoModel } from '../db/ChatInfo'; import { channelServer } from './chatChannelService'; import { AccuseRecModel, AccueseParam } from '../db/AccuseRec'; import { getSimpleRoleInfo, getSimpleRoleInfos } from './roleService'; +import * as FCClient from '@alicloud/fc2'; export * from './chatChannelService'; export * from './sysChatService'; @@ -375,3 +376,25 @@ export async function createAccuseData(roleId: string, targetRoleId: string, tar const result = await AccuseRecModel.createRec(data); return result; } + +const client = new FCClient('1475752363809339', { + accessKeyID: 'LTAI5tFTwE7vwH5HGL7eV8xr', + accessKeySecret: 'HZznAZfOrmXttBMevhA55jQX3OGw9j', + region: 'cn-zhangjiakou', +}); + +export async function checkFilterWords(word: string) { + const resp = await client.post('/proxy/bantuUtils/filterWords/check',{ + word, + salt: "bantu1filter2word3test" + }, {}); + let hasBlock = true; + try { + let data = JSON.parse(resp.data); + hasBlock = data.status != 0; + } catch (e) { + console.log(e); + } + + return hasBlock; +} \ No newline at end of file diff --git a/game-server/package.json b/game-server/package.json index 0dd7d13a1..7be3c69d7 100644 --- a/game-server/package.json +++ b/game-server/package.json @@ -15,6 +15,7 @@ "jenkins": "npm run build && cd dist && pinus start -D" }, "dependencies": { + "@alicloud/fc2": "^2.2.2", "@typegoose/typegoose": "^7.3.5", "@types/bluebird": "^3.5.19", "@types/chai": "^4.2.14", @@ -52,6 +53,7 @@ "source-map-support": "^0.5.0", "tenpay": "^2.1.18", "ts-node": "^8.2.0", + "typegoose": "^5.9.1", "xprofiler": "^1.2.5" }, "devDependencies": { diff --git a/shared/consts/statusCode.ts b/shared/consts/statusCode.ts index 54cb1cabc..a0c874a17 100644 --- a/shared/consts/statusCode.ts +++ b/shared/consts/statusCode.ts @@ -9,6 +9,7 @@ export const STATUS = { REDLOCK_ERR: { code: 6, simStr: 'redlock错误' }, SERVER_MAINTENANCE: { code: 7, simStr: '服务器维护中' }, VERSION_ERR: { code: 8, simStr: '版本号太低,请更新' }, + BLOCK_WORDS: { code: 9, simStr: '内容有不合法词汇' }, GLOBAL_ERR: { code: 1003, simStr: '服务器内部错误' }, // 账号相关状态 10000 - 19999 diff --git a/shared/db/User.ts b/shared/db/User.ts index 5a4a12ace..42b821689 100644 --- a/shared/db/User.ts +++ b/shared/db/User.ts @@ -6,6 +6,13 @@ import { genCode, aesEncryptcfb, aesDecryptcfb } from '../pubUtils/util'; const bcrypt = require('bcrypt'); const SALT_WORK_FACTOR = 5 +class PlatForm { + @prop({ required: true }) + platform: string; // 平台:ios, android, web, pc + @prop({ required: true }) + unionId: string; // 用户标识 +} + /** * 用户字段接口 */ @@ -77,11 +84,8 @@ export default class User extends BaseModel { @prop({ required: true }) platform: string; - @prop({ required: true, default: [] }) - platforms: [{ - platform: string; // 平台:ios, android, web, pc - unionId: string; // 用户标识 - }]; + @prop({ required: true, default: [], type: PlatForm }) + platforms: PlatForm[]; @prop({ required: true, type: String, default: [], _id: false }) device: string[]; diff --git a/web-server/typings/config/plugin.d.ts b/web-server/typings/config/plugin.d.ts index e8ecf3bcd..4242eab8d 100644 --- a/web-server/typings/config/plugin.d.ts +++ b/web-server/typings/config/plugin.d.ts @@ -16,7 +16,6 @@ import 'egg-jsonp'; import 'egg-view'; import 'egg-view-nunjucks'; import 'egg-cors'; -import 'egg-alinode'; import { EggPluginItem } from 'egg'; declare module 'egg' { interface EggPlugin { @@ -34,7 +33,6 @@ declare module 'egg' { view?: EggPluginItem; nunjucks?: EggPluginItem; cors?: EggPluginItem; - alinode?: EggPluginItem; xtransit?: EggPluginItem; } } \ No newline at end of file