|
|
|
@@ -1,18 +1,21 @@
|
|
|
|
|
/********** 37sdk **********/
|
|
|
|
|
|
|
|
|
|
import { RoleModel, RoleType } from "../db/Role";
|
|
|
|
|
import { Chat37Params, CheckGuild37Params, CheckName37Params } from "../domain/sdk";
|
|
|
|
|
import { Chat37Params, CheckGuild37Params, CheckName37Params, GetWordParam } from "../domain/sdk";
|
|
|
|
|
import { sendMailByContent, sendMailToGuildByContent } from './mailService';
|
|
|
|
|
import { getGoldObject } from '../pubUtils/itemUtils';
|
|
|
|
|
import { NAMEPLATE } from '../pubUtils/dicParam';
|
|
|
|
|
import { CHANNEL_PREFIX, getSdkChannelId, MAIL_TYPE, REDIS_KEY, SDK_37_ADDR, SDK_37_CONST, SDK_TA_CONST, THINKING_DATA_MODE, THINKING_DATA_MODE_LIST } from "../consts";
|
|
|
|
|
import { CHANNEL_PREFIX, FILENAME, getSdkChannelId, MAIL_TYPE, REDIS_KEY, SDK_37_ADDR, SDK_37_CONST, SDK_TA_CONST, STATUS, THINKING_DATA_MODE, THINKING_DATA_MODE_LIST } from "../consts";
|
|
|
|
|
import { UserModel } from "../db/User";
|
|
|
|
|
import { request37CheckChat, request37Post } from "../pubUtils/httpUtil";
|
|
|
|
|
import { request37CheckChat, request37GetWord, request37Post } from "../pubUtils/httpUtil";
|
|
|
|
|
import { GuildModel } from "../db/Guild";
|
|
|
|
|
import { getRoleOnlineInfo, updateUserInfo } from "./redisService";
|
|
|
|
|
import { Application, pinus } from "pinus";
|
|
|
|
|
import { getGuildChannelSid } from "./chatService";
|
|
|
|
|
import { getRandSingleEelm, readWordTxt, writeWordTxt } from "../pubUtils/util";
|
|
|
|
|
const ThinkingAnalytics = require("thinkingdata-node");
|
|
|
|
|
import Trie from '../pubUtils/trie';
|
|
|
|
|
import _ = require("underscore");
|
|
|
|
|
|
|
|
|
|
// 检查私聊是否合法
|
|
|
|
|
|
|
|
|
@@ -60,7 +63,12 @@ export async function checkRoleName(roleId: string, roleName: string, myRole?: R
|
|
|
|
|
let myUser = await UserModel.findUserByUid(myRole.userInfo.uid);
|
|
|
|
|
if(myUser.channelType == '37') {
|
|
|
|
|
let body = new CheckName37Params(myRole, roleName, myUser);
|
|
|
|
|
return await request37Post(SDK_37_ADDR.CHECK_NAME, body, SDK_37_CONST.CHAT_KEY);
|
|
|
|
|
let result = await request37Post(SDK_37_ADDR.CHECK_NAME, body, SDK_37_CONST.CHAT_KEY);
|
|
|
|
|
if(result == STATUS.REQUEST_TIME_OUT.code) { // 超时
|
|
|
|
|
return await checkFilterWords(roleName);
|
|
|
|
|
} else if (result == 0) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
@@ -69,11 +77,21 @@ export async function checkGuildName(guildCode: string, serverId: number, name:
|
|
|
|
|
let nameResult = true, noticeResult = true;
|
|
|
|
|
if(name != undefined) {
|
|
|
|
|
let body = new CheckGuild37Params(guildCode, serverId, 1, name);
|
|
|
|
|
nameResult = await request37Post(SDK_37_ADDR.CHECK_UNION, body, SDK_37_CONST.CHAT_KEY);
|
|
|
|
|
let result = await request37Post(SDK_37_ADDR.CHECK_UNION, body, SDK_37_CONST.CHAT_KEY);
|
|
|
|
|
if(result == STATUS.REQUEST_TIME_OUT.code) { // 超时
|
|
|
|
|
nameResult = await checkFilterWords(name);
|
|
|
|
|
} else if (result == 0) {
|
|
|
|
|
nameResult = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(notice) {
|
|
|
|
|
if(notice != undefined) {
|
|
|
|
|
let body = new CheckGuild37Params(guildCode, serverId, 2, notice);
|
|
|
|
|
noticeResult = await request37Post(SDK_37_ADDR.CHECK_UNION, body, SDK_37_CONST.CHAT_KEY);
|
|
|
|
|
let result = await request37Post(SDK_37_ADDR.CHECK_UNION, body, SDK_37_CONST.CHAT_KEY);
|
|
|
|
|
if(result == STATUS.REQUEST_TIME_OUT.code) { // 超时
|
|
|
|
|
noticeResult = await checkFilterWords(name);
|
|
|
|
|
} else if (result == 0) {
|
|
|
|
|
noticeResult = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return nameResult && noticeResult
|
|
|
|
|
}
|
|
|
|
@@ -124,8 +142,8 @@ export async function treatGuildName(content: string) {
|
|
|
|
|
await RoleModel.updateGuildName(params.code, newName);
|
|
|
|
|
|
|
|
|
|
} else if (params.type == 2) { // 公会公告
|
|
|
|
|
await checkGuildName(params.code, params.serverId, undefined, '');
|
|
|
|
|
await GuildModel.updateInfo(params.code, { notice: '', sdkMark: false });
|
|
|
|
|
await checkGuildName(params.code, params.serverId, undefined, ' ');
|
|
|
|
|
await GuildModel.updateInfo(params.code, { notice: ' ', sdkMark: false });
|
|
|
|
|
// 通知处理
|
|
|
|
|
await sendMailToGuildByContent(MAIL_TYPE.TREAT_GUILD_INFO, params.code, {}); // 邮件
|
|
|
|
|
let chatSid = await getGuildChannelSid(params.code);
|
|
|
|
@@ -179,4 +197,54 @@ export function reportTAEvent(userCode: string, serverId: number, eventName: st
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
ta.track(event);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export async function fetch37Words() {
|
|
|
|
|
let params = new GetWordParam();
|
|
|
|
|
let result = await request37GetWord(SDK_37_ADDR.GET_WORD, params, SDK_37_CONST.CHAT_KEY);
|
|
|
|
|
|
|
|
|
|
writeWordTxt(FILENAME.FILTER_WORDS, result);
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export async function getTire() {
|
|
|
|
|
let trie = pinus.app.get('tire');
|
|
|
|
|
if(!trie) {
|
|
|
|
|
let blockWords = readWordTxt(FILENAME.FILTER_WORDS);
|
|
|
|
|
if(!blockWords) {
|
|
|
|
|
blockWords = await fetch37Words();
|
|
|
|
|
}
|
|
|
|
|
trie = new Trie();
|
|
|
|
|
let blockWordsArr = blockWords.split('\n');
|
|
|
|
|
blockWordsArr.forEach(word => {
|
|
|
|
|
let arr = word.split('||');
|
|
|
|
|
trie.insertData(arr[0]);
|
|
|
|
|
});
|
|
|
|
|
pinus.app.set('tire', trie);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return trie
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export async function _checkFilterWords(word: string) {
|
|
|
|
|
let trie = await getTire();
|
|
|
|
|
if (word.length > 30) return false;
|
|
|
|
|
|
|
|
|
|
let cleanStr = word.trim().replace(/ /gi, '').replace('\n','').replace(/&/gi, '');
|
|
|
|
|
let hitStr = trie.getHitStr(cleanStr);
|
|
|
|
|
if (hitStr) {
|
|
|
|
|
console.log(`命中屏蔽词: ${hitStr}`);
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export async function checkFilterWords(word: string) {
|
|
|
|
|
if(pinus.app.getServerType() == 'chat') {
|
|
|
|
|
return await _checkFilterWords(word);
|
|
|
|
|
} else {
|
|
|
|
|
let servers = pinus.app.getServersByType('chat');
|
|
|
|
|
let server = getRandSingleEelm(servers);
|
|
|
|
|
return await pinus.app.rpc.chat.chatRemote.checkFilterWords.toServer(server.id, word);
|
|
|
|
|
}
|
|
|
|
|
}
|