聊天:访问频率限制

This commit is contained in:
luying
2022-01-10 14:30:18 +08:00
parent 00c50ebe98
commit ac51a2302e
4 changed files with 47 additions and 17 deletions
@@ -18,15 +18,27 @@ var Filter = function(this: any, app: Application) {
this.accessTime = new Map<string, number>();
};
Filter.prototype.checkFrequency = function(route: string, roleId: string) {
if(gameData.serverConst.PROTECT_API.indexOf(route) == -1) {
Filter.prototype.checkFrequency = function(route: string, msg: any, roleId: string) {
let protect = gameData.serverConst.PROTECT_API.find(cur => {
if(cur.route == route) {
let paramOK = true;
for(let key in cur.param) {
if(msg[key] != cur.param[key]) {
paramOK = false; break;
}
}
if(paramOK) return true;
}
return false;
});
if(!protect) {
return true;
}
let keyOfRouteWithUser = `${route}_${roleId}`;
let keyOfRouteWithUser = `${protect.id}_${roleId}`;
if(this.accessTime && this.accessTime.has(keyOfRouteWithUser)) {
console.log(this.accessTime.get(keyOfRouteWithUser) - Date.now());
if(Date.now() - this.accessTime.get(keyOfRouteWithUser) < gameData.serverConst.PROTECT_API_INTERVAL) {
errlogger.error(`${keyOfRouteWithUser} 间隔时间小于${gameData.serverConst.PROTECT_API_INTERVAL}ms,为 ${Date.now() - this.accessTime.get(keyOfRouteWithUser)}`);
if(Date.now() - this.accessTime.get(keyOfRouteWithUser) < protect.interval) {
errlogger.info(`${keyOfRouteWithUser} 间隔时间小于${protect.interval}ms,为 ${Date.now() - this.accessTime.get(keyOfRouteWithUser)}`);
return false;
}
}
@@ -54,7 +66,7 @@ Filter.prototype.before = async function (routeRecord: RouteRecord, msg: any, se
let guildCode = session.get('guildCode');
let blockType = session.get('blockType');
// 访问频率控制
if(!this.checkFrequency(routeRecord.route, roleId)) {
if(!this.checkFrequency(routeRecord.route, msg, roleId)) {
return next(new Error('globalFilter'), resResult(STATUS.ACCESS_BUSY));
}
if(!this.checkFunction(routeRecord.route)) {
@@ -67,6 +79,7 @@ Filter.prototype.before = async function (routeRecord: RouteRecord, msg: any, se
if([
'chat.chatHandler.sendPrivateMessage',
'chat.chatHandler.sendGroupMessage',
'battle.comBattleHandler.sendTeamMsg',
'battle.barrageHandler.sendBarrage',
'guild.guildHandler.sendMail',
'guild.guildHandler.setGuildInfo',
@@ -113,6 +126,12 @@ Filter.prototype.before = async function (routeRecord: RouteRecord, msg: any, se
break;
}
}
case 'battle.comBattleHandler.sendTeamMsg':
{
let result = await checkOtherChat(roleId, CHANNEL_PREFIX.TEAM, msg.content);
if(!result) hasBlockWords = true;
break;
}
case 'battle.barrageHandler.sendBarrage':
{
let result = await checkOtherChat(roleId, CHANNEL_PREFIX.WORLD, msg.content);