Commit b63e9aa6 authored by mercury233's avatar mercury233

add ban bad chat

parent 5d45b524
......@@ -134,18 +134,18 @@ ROOM_all = []
ROOM_players_oppentlist = {}
ROOM_players_banned = []
ROOM_ban_player = (name, ip, reason)->
ROOM_ban_player = (name, ip, reason, countadd = 1)->
bannedplayer = _.find ROOM_players_banned, (bannedplayer)->
ip == bannedplayer.ip
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
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)->
bannedreason == reason
bannedplayer.need_tip = true
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)
#log.info("banned", name, ip, reason, bannedplayer.count)
return
......@@ -1237,9 +1237,10 @@ ygopro.stoc_follow 'DUEL_START', false, (buffer, info, client, server)->
ygopro.ctos_follow 'CHAT', true, (buffer, info, client, server)->
room=ROOM_all[client.rid]
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
switch _.trim(info.msg)
switch msg
when '/help'
ygopro.stoc_send_chat(client, "YGOSrv233 指令帮助")
ygopro.stoc_send_chat(client, "/help 显示这个帮助信息")
......@@ -1254,7 +1255,41 @@ ygopro.ctos_follow 'CHAT', true, (buffer, info, client, server)->
#when '/test'
# 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
ygopro.ctos_follow 'UPDATE_DECK', true, (buffer, info, client, server)->
......
......@@ -198,13 +198,16 @@
ROOM_players_banned = [];
ROOM_ban_player = function(name, ip, reason) {
ROOM_ban_player = function(name, ip, reason, countadd) {
var bannedplayer, bantime;
if (countadd == null) {
countadd = 1;
}
bannedplayer = _.find(ROOM_players_banned, function(bannedplayer) {
return ip === bannedplayer.ip;
});
if (bannedplayer) {
bannedplayer.count = bannedplayer.count + 1;
bannedplayer.count = bannedplayer.count + countadd;
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');
if (!_.find(bannedplayer.reasons, function(bannedreason) {
......@@ -217,7 +220,7 @@
bannedplayer = {
"ip": ip,
"time": moment(),
"count": 1,
"count": countadd,
"reasons": [reason],
"need_tip": true
};
......@@ -1533,16 +1536,17 @@
});
ygopro.ctos_follow('CHAT', true, function(buffer, info, client, server) {
var cancel, room;
var cancel, msg, oldmsg, room, struct;
room = ROOM_all[client.rid];
if (!room) {
return;
}
cancel = _.startsWith(_.trim(info.msg), "/");
msg = _.trim(info.msg);
cancel = _.startsWith(msg, "/");
if (!(cancel || !room.random_type)) {
room.last_active_time = moment();
}
switch (_.trim(info.msg)) {
switch (msg) {
case '/help':
ygopro.stoc_send_chat(client, "YGOSrv233 指令帮助");
ygopro.stoc_send_chat(client, "/help 显示这个帮助信息");
......@@ -1561,6 +1565,45 @@
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;
});
......
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