Commit b63e9aa6 authored by mercury233's avatar mercury233

add ban bad chat

parent 5d45b524
...@@ -134,18 +134,18 @@ ROOM_all = [] ...@@ -134,18 +134,18 @@ ROOM_all = []
ROOM_players_oppentlist = {} ROOM_players_oppentlist = {}
ROOM_players_banned = [] ROOM_players_banned = []
ROOM_ban_player = (name, ip, reason)-> ROOM_ban_player = (name, ip, reason, countadd = 1)->
bannedplayer = _.find ROOM_players_banned, (bannedplayer)-> bannedplayer = _.find ROOM_players_banned, (bannedplayer)->
ip == bannedplayer.ip ip == bannedplayer.ip
if bannedplayer if bannedplayer
bannedplayer.count = bannedplayer.count + 1 bannedplayer.count = bannedplayer.count + countadd
bantime = if bannedplayer.count > 3 then Math.pow(2, bannedplayer.count - 3) * 2 else 0 bantime = if bannedplayer.count > 3 then Math.pow(2, bannedplayer.count - 3) * 2 else 0
bannedplayer.time = if moment() < bannedplayer.time then moment(bannedplayer.time).add(bantime, 'm') else moment().add(bantime, 'm') bannedplayer.time = if moment() < bannedplayer.time then moment(bannedplayer.time).add(bantime, 'm') else moment().add(bantime, 'm')
bannedplayer.reasons.push(reason) if not _.find bannedplayer.reasons, (bannedreason)-> bannedplayer.reasons.push(reason) if not _.find bannedplayer.reasons, (bannedreason)->
bannedreason == reason bannedreason == reason
bannedplayer.need_tip = true bannedplayer.need_tip = true
else else
bannedplayer = {"ip": ip, "time": moment(), "count": 1, "reasons": [reason], "need_tip": true} bannedplayer = {"ip": ip, "time": moment(), "count": countadd, "reasons": [reason], "need_tip": true}
ROOM_players_banned.push(bannedplayer) ROOM_players_banned.push(bannedplayer)
#log.info("banned", name, ip, reason, bannedplayer.count) #log.info("banned", name, ip, reason, bannedplayer.count)
return return
...@@ -1237,9 +1237,10 @@ ygopro.stoc_follow 'DUEL_START', false, (buffer, info, client, server)-> ...@@ -1237,9 +1237,10 @@ ygopro.stoc_follow 'DUEL_START', false, (buffer, info, client, server)->
ygopro.ctos_follow 'CHAT', true, (buffer, info, client, server)-> ygopro.ctos_follow 'CHAT', true, (buffer, info, client, server)->
room=ROOM_all[client.rid] room=ROOM_all[client.rid]
return unless room return unless room
cancel = _.startsWith(_.trim(info.msg), "/") msg = _.trim(info.msg)
cancel = _.startsWith(msg, "/")
room.last_active_time = moment() unless cancel or not room.random_type room.last_active_time = moment() unless cancel or not room.random_type
switch _.trim(info.msg) switch msg
when '/help' when '/help'
ygopro.stoc_send_chat(client, "YGOSrv233 指令帮助") ygopro.stoc_send_chat(client, "YGOSrv233 指令帮助")
ygopro.stoc_send_chat(client, "/help 显示这个帮助信息") ygopro.stoc_send_chat(client, "/help 显示这个帮助信息")
...@@ -1254,7 +1255,41 @@ ygopro.ctos_follow 'CHAT', true, (buffer, info, client, server)-> ...@@ -1254,7 +1255,41 @@ ygopro.ctos_follow 'CHAT', true, (buffer, info, client, server)->
#when '/test' #when '/test'
# ygopro.stoc_send_hint_card_to_room(room, 2333365) # ygopro.stoc_send_hint_card_to_room(room, 2333365)
if !(room and room.random_type)
return cancel
oldmsg = msg
if (_.any(settings.ban.badword_level3, (badword) ->
regexp = new RegExp(badword)
return msg.match(regexp)
, msg))
log.warn "BAD WORD LEVEL 3", client.name, oldmsg
ygopro.stoc_send_chat(client, "您的发言存在不适当的内容,禁止您使用随机对战功能!", ygopro.constants.COLORS.RED)
ROOM_ban_player(client.name, client.ip, "发言违规")
ROOM_ban_player(client.name, client.ip, "发言违规", 3)
client.end()
cancel = true
else if (_.any(settings.ban.badword_level2, (badword) ->
regexp = new RegExp(badword)
return msg.match(regexp)
, msg))
log.warn "BAD WORD LEVEL 2", client.name, oldmsg
ygopro.stoc_send_chat(client, "您的发言存在不适当的内容,已被屏蔽,并记录一次违规!", ygopro.constants.COLORS.RED)
ROOM_ban_player(client.name, client.ip, "发言违规")
cancel = true
else
_.each(settings.ban.badword_level1, (badword) ->
#log.info msg
regexp = new RegExp(badword, "g")
msg = msg.replace(regexp, "**")
return
, msg)
if oldmsg != msg
log.warn "BAD WORD LEVEL 1", client.name, oldmsg
ygopro.stoc_send_chat(client, "请使用文明用语")
struct = ygopro.structs["chat"]
struct._setBuff(buffer)
struct.set("msg", msg)
buffer = struct.buffer
return cancel return cancel
ygopro.ctos_follow 'UPDATE_DECK', true, (buffer, info, client, server)-> ygopro.ctos_follow 'UPDATE_DECK', true, (buffer, info, client, server)->
......
...@@ -198,13 +198,16 @@ ...@@ -198,13 +198,16 @@
ROOM_players_banned = []; ROOM_players_banned = [];
ROOM_ban_player = function(name, ip, reason) { ROOM_ban_player = function(name, ip, reason, countadd) {
var bannedplayer, bantime; var bannedplayer, bantime;
if (countadd == null) {
countadd = 1;
}
bannedplayer = _.find(ROOM_players_banned, function(bannedplayer) { bannedplayer = _.find(ROOM_players_banned, function(bannedplayer) {
return ip === bannedplayer.ip; return ip === bannedplayer.ip;
}); });
if (bannedplayer) { if (bannedplayer) {
bannedplayer.count = bannedplayer.count + 1; bannedplayer.count = bannedplayer.count + countadd;
bantime = bannedplayer.count > 3 ? Math.pow(2, bannedplayer.count - 3) * 2 : 0; bantime = bannedplayer.count > 3 ? Math.pow(2, bannedplayer.count - 3) * 2 : 0;
bannedplayer.time = moment() < bannedplayer.time ? moment(bannedplayer.time).add(bantime, 'm') : moment().add(bantime, 'm'); bannedplayer.time = moment() < bannedplayer.time ? moment(bannedplayer.time).add(bantime, 'm') : moment().add(bantime, 'm');
if (!_.find(bannedplayer.reasons, function(bannedreason) { if (!_.find(bannedplayer.reasons, function(bannedreason) {
...@@ -217,7 +220,7 @@ ...@@ -217,7 +220,7 @@
bannedplayer = { bannedplayer = {
"ip": ip, "ip": ip,
"time": moment(), "time": moment(),
"count": 1, "count": countadd,
"reasons": [reason], "reasons": [reason],
"need_tip": true "need_tip": true
}; };
...@@ -1533,16 +1536,17 @@ ...@@ -1533,16 +1536,17 @@
}); });
ygopro.ctos_follow('CHAT', true, function(buffer, info, client, server) { ygopro.ctos_follow('CHAT', true, function(buffer, info, client, server) {
var cancel, room; var cancel, msg, oldmsg, room, struct;
room = ROOM_all[client.rid]; room = ROOM_all[client.rid];
if (!room) { if (!room) {
return; return;
} }
cancel = _.startsWith(_.trim(info.msg), "/"); msg = _.trim(info.msg);
cancel = _.startsWith(msg, "/");
if (!(cancel || !room.random_type)) { if (!(cancel || !room.random_type)) {
room.last_active_time = moment(); room.last_active_time = moment();
} }
switch (_.trim(info.msg)) { switch (msg) {
case '/help': case '/help':
ygopro.stoc_send_chat(client, "YGOSrv233 指令帮助"); ygopro.stoc_send_chat(client, "YGOSrv233 指令帮助");
ygopro.stoc_send_chat(client, "/help 显示这个帮助信息"); ygopro.stoc_send_chat(client, "/help 显示这个帮助信息");
...@@ -1561,6 +1565,45 @@ ...@@ -1561,6 +1565,45 @@
ygopro.stoc_send_chat(client, "您当前的房间名是 " + room.name, ygopro.constants.COLORS.BABYBLUE); ygopro.stoc_send_chat(client, "您当前的房间名是 " + room.name, ygopro.constants.COLORS.BABYBLUE);
} }
} }
if (!(room && room.random_type)) {
return cancel;
}
oldmsg = msg;
if (_.any(settings.ban.badword_level3, function(badword) {
var regexp;
regexp = new RegExp(badword);
return msg.match(regexp);
}, msg)) {
log.warn("BAD WORD LEVEL 3", client.name, oldmsg);
ygopro.stoc_send_chat(client, "您的发言存在不适当的内容,禁止您使用随机对战功能!", ygopro.constants.COLORS.RED);
ROOM_ban_player(client.name, client.ip, "发言违规");
ROOM_ban_player(client.name, client.ip, "发言违规", 3);
client.end();
cancel = true;
} else if (_.any(settings.ban.badword_level2, function(badword) {
var regexp;
regexp = new RegExp(badword);
return msg.match(regexp);
}, msg)) {
log.warn("BAD WORD LEVEL 2", client.name, oldmsg);
ygopro.stoc_send_chat(client, "您的发言存在不适当的内容,已被屏蔽,并记录一次违规!", ygopro.constants.COLORS.RED);
ROOM_ban_player(client.name, client.ip, "发言违规");
cancel = true;
} else {
_.each(settings.ban.badword_level1, function(badword) {
var regexp;
regexp = new RegExp(badword, "g");
msg = msg.replace(regexp, "**");
}, msg);
if (oldmsg !== msg) {
log.warn("BAD WORD LEVEL 1", client.name, oldmsg);
ygopro.stoc_send_chat(client, "请使用文明用语");
}
struct = ygopro.structs["chat"];
struct._setBuff(buffer);
struct.set("msg", msg);
buffer = struct.buffer;
}
return cancel; return cancel;
}); });
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment