聊天:访问频率限制
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user