Commit ed7f6950 authored by nanahira's avatar nanahira

Merge branch 'master' of github.com:moecube/srvpro into mc

parents 9aeaa05d 4e8e35b9
Pipeline #4758 passed with stages
in 5 minutes and 5 seconds
...@@ -178,6 +178,7 @@ settings = {} ...@@ -178,6 +178,7 @@ settings = {}
tips = null tips = null
dialogues = null dialogues = null
badwords = null badwords = null
badwordR = null
lflists = global.lflists = [] lflists = global.lflists = []
real_windbot_server_ip = null real_windbot_server_ip = null
long_resolve_cards = [] long_resolve_cards = []
...@@ -380,6 +381,13 @@ init = () -> ...@@ -380,6 +381,13 @@ init = () ->
await loadLFList('ygopro/expansions/lflist.conf') await loadLFList('ygopro/expansions/lflist.conf')
await loadLFList('ygopro/lflist.conf') await loadLFList('ygopro/lflist.conf')
badwordR = global.badwordR = {}
badwordR.level0=new RegExp('(?:'+badwords.level0.join(')|(?:')+')','i');
badwordR.level1=new RegExp('(?:'+badwords.level1.join(')|(?:')+')','i');
badwordR.level1g=new RegExp('(?:'+badwords.level1.join(')|(?:')+')','ig');
badwordR.level2=new RegExp('(?:'+badwords.level2.join(')|(?:')+')','i');
badwordR.level3=new RegExp('(?:'+badwords.level3.join(')|(?:')+')','i');
setInterval ()-> setInterval ()->
moment_now = moment() moment_now = moment()
moment_now_string = moment_now.format() moment_now_string = moment_now.format()
...@@ -2151,24 +2159,15 @@ ygopro.ctos_follow 'JOIN_GAME', true, (buffer, info, client, server, datas)-> ...@@ -2151,24 +2159,15 @@ ygopro.ctos_follow 'JOIN_GAME', true, (buffer, info, client, server, datas)->
} }
options.lflist = _.findIndex lflists, (list)-> ((options.rule == 1) == list.tcg) and list.date.isBefore() options.lflist = _.findIndex lflists, (list)-> ((options.rule == 1) == list.tcg) and list.date.isBefore()
room_title = info.pass.slice(8).replace(String.fromCharCode(0xFEFF), ' ') room_title = info.pass.slice(8).replace(String.fromCharCode(0xFEFF), ' ')
if _.any(badwords.level3, (badword) -> if badwordR.level3.test(room_title)
regexp = new RegExp(badword, 'i')
return room_title.match(regexp)
, room_title)
log.warn("BAD ROOM NAME LEVEL 3", room_title, client.name, client.ip) log.warn("BAD ROOM NAME LEVEL 3", room_title, client.name, client.ip)
ygopro.stoc_die(client, "${bad_roomname_level3}") ygopro.stoc_die(client, "${bad_roomname_level3}")
return return
else if _.any(badwords.level2, (badword) -> else if badwordR.level2.test(room_title)
regexp = new RegExp(badword, 'i')
return room_title.match(regexp)
, room_title)
log.warn("BAD ROOM NAME LEVEL 2", room_title, client.name, client.ip) log.warn("BAD ROOM NAME LEVEL 2", room_title, client.name, client.ip)
ygopro.stoc_die(client, "${bad_roomname_level2}") ygopro.stoc_die(client, "${bad_roomname_level2}")
return return
else if _.any(badwords.level1, (badword) -> else if badwordR.level1.test(room_title)
regexp = new RegExp(badword, 'i')
return room_title.match(regexp)
, room_title)
log.warn("BAD ROOM NAME LEVEL 1", room_title, client.name, client.ip) log.warn("BAD ROOM NAME LEVEL 1", room_title, client.name, client.ip)
ygopro.stoc_die(client, "${bad_roomname_level1}") ygopro.stoc_die(client, "${bad_roomname_level1}")
return return
...@@ -2383,24 +2382,15 @@ ygopro.ctos_follow 'JOIN_GAME', true, (buffer, info, client, server, datas)-> ...@@ -2383,24 +2382,15 @@ ygopro.ctos_follow 'JOIN_GAME', true, (buffer, info, client, server, datas)->
log.warn("MULTI LOGIN", client.name, client.ip) log.warn("MULTI LOGIN", client.name, client.ip)
ygopro.stoc_die(client, "${too_much_connection}" + client.ip) ygopro.stoc_die(client, "${too_much_connection}" + client.ip)
else if !settings.modules.tournament_mode.enabled and !settings.modules.challonge.enabled and _.any(badwords.level3, (badword) -> else if !settings.modules.tournament_mode.enabled and !settings.modules.challonge.enabled and badwordR.level3.test(client.name)
regexp = new RegExp(badword, 'i')
return name.match(regexp)
, name = client.name)
log.warn("BAD NAME LEVEL 3", client.name, client.ip) log.warn("BAD NAME LEVEL 3", client.name, client.ip)
ygopro.stoc_die(client, "${bad_name_level3}") ygopro.stoc_die(client, "${bad_name_level3}")
else if !settings.modules.tournament_mode.enabled and !settings.modules.challonge.enabled and _.any(badwords.level2, (badword) -> else if !settings.modules.tournament_mode.enabled and !settings.modules.challonge.enabled and badwordR.level2.test(client.name)
regexp = new RegExp(badword, 'i')
return name.match(regexp)
, name = client.name)
log.warn("BAD NAME LEVEL 2", client.name, client.ip) log.warn("BAD NAME LEVEL 2", client.name, client.ip)
ygopro.stoc_die(client, "${bad_name_level2}") ygopro.stoc_die(client, "${bad_name_level2}")
else if !settings.modules.tournament_mode.enabled and !settings.modules.challonge.enabled and _.any(badwords.level1, (badword) -> else if !settings.modules.tournament_mode.enabled and !settings.modules.challonge.enabled and badwordR.level1.test(client.name)
regexp = new RegExp(badword, 'i')
return name.match(regexp)
, name = client.name)
log.warn("BAD NAME LEVEL 1", client.name, client.ip) log.warn("BAD NAME LEVEL 1", client.name, client.ip)
ygopro.stoc_die(client, "${bad_name_level1}") ygopro.stoc_die(client, "${bad_name_level1}")
...@@ -3192,10 +3182,7 @@ ygopro.ctos_follow 'CHAT', true, (buffer, info, client, server, datas)-> ...@@ -3192,10 +3182,7 @@ ygopro.ctos_follow 'CHAT', true, (buffer, info, client, server, datas)->
ygopro.stoc_send_chat(client, "${banned_chat_tip}" + (if client.ban_mc and client.ban_mc.message then (": " + client.ban_mc.message) else ""), ygopro.constants.COLORS.RED) ygopro.stoc_send_chat(client, "${banned_chat_tip}" + (if client.ban_mc and client.ban_mc.message then (": " + client.ban_mc.message) else ""), ygopro.constants.COLORS.RED)
return true return true
oldmsg = msg oldmsg = msg
if (_.any(badwords.level3, (badword) -> if badwordR.level3.test(msg)
regexp = new RegExp(badword, 'i')
return msg.match(regexp)
, msg))
log.warn "BAD WORD LEVEL 3", client.name, client.ip, oldmsg, RegExp.$1 log.warn "BAD WORD LEVEL 3", client.name, client.ip, oldmsg, RegExp.$1
report_to_big_brother room.name, client.name, client.ip, 3, oldmsg, RegExp.$1 report_to_big_brother room.name, client.name, client.ip, 3, oldmsg, RegExp.$1
cancel = true cancel = true
...@@ -3221,22 +3208,14 @@ ygopro.ctos_follow 'CHAT', true, (buffer, info, client, server, datas)-> ...@@ -3221,22 +3208,14 @@ ygopro.ctos_follow 'CHAT', true, (buffer, info, client, server, datas)->
client.abuse_count=client.abuse_count+2 client.abuse_count=client.abuse_count+2
ygopro.stoc_send_chat(client, "${chat_warn_level0}", ygopro.constants.COLORS.RED) ygopro.stoc_send_chat(client, "${chat_warn_level0}", ygopro.constants.COLORS.RED)
cancel = true cancel = true
else if (_.any(badwords.level2, (badword) -> else if badwordR.level2.test(msg)
regexp = new RegExp(badword, 'i')
return msg.match(regexp)
, msg))
log.warn "BAD WORD LEVEL 2", client.name, client.ip, oldmsg, RegExp.$1 log.warn "BAD WORD LEVEL 2", client.name, client.ip, oldmsg, RegExp.$1
report_to_big_brother room.name, client.name, client.ip, 2, oldmsg, RegExp.$1 report_to_big_brother room.name, client.name, client.ip, 2, oldmsg, RegExp.$1
client.abuse_count=client.abuse_count+3 client.abuse_count=client.abuse_count+3
ygopro.stoc_send_chat(client, "${chat_warn_level2}", ygopro.constants.COLORS.RED) ygopro.stoc_send_chat(client, "${chat_warn_level2}", ygopro.constants.COLORS.RED)
cancel = true cancel = true
else else
_.each(badwords.level1, (badword) -> msg = msg.replace(badwordR.level1g,'**')
#log.info msg
regexp = new RegExp(badword, "ig")
msg = msg.replace(regexp, "**")
return
, msg)
if oldmsg != msg if oldmsg != msg
log.warn "BAD WORD LEVEL 1", client.name, client.ip, oldmsg, RegExp.$1 log.warn "BAD WORD LEVEL 1", client.name, client.ip, oldmsg, RegExp.$1
report_to_big_brother room.name, client.name, client.ip, 1, oldmsg, RegExp.$1 report_to_big_brother room.name, client.name, client.ip, 1, oldmsg, RegExp.$1
...@@ -3246,10 +3225,7 @@ ygopro.ctos_follow 'CHAT', true, (buffer, info, client, server, datas)-> ...@@ -3246,10 +3225,7 @@ ygopro.ctos_follow 'CHAT', true, (buffer, info, client, server, datas)->
struct._setBuff(buffer) struct._setBuff(buffer)
struct.set("msg", msg) struct.set("msg", msg)
buffer = struct.buffer buffer = struct.buffer
else if (_.any(badwords.level0, (badword) -> else if badwordR.level0.test(msg)
regexp = new RegExp(badword, 'i')
return msg.match(regexp)
, msg))
log.info "BAD WORD LEVEL 0", client.name, client.ip, oldmsg, RegExp.$1 log.info "BAD WORD LEVEL 0", client.name, client.ip, oldmsg, RegExp.$1
report_to_big_brother room.name, client.name, client.ip, 0, oldmsg, RegExp.$1 report_to_big_brother room.name, client.name, client.ip, 0, oldmsg, RegExp.$1
if client.abuse_count>=2 if client.abuse_count>=2
......
// Generated by CoffeeScript 2.5.1 // Generated by CoffeeScript 2.5.1
(function() { (function() {
// 标准库 // 标准库
var CLIENT_get_authorize_key, CLIENT_get_kick_reconnect_target, CLIENT_heartbeat_register, CLIENT_heartbeat_unregister, CLIENT_import_data, CLIENT_is_able_to_kick_reconnect, CLIENT_is_able_to_reconnect, CLIENT_is_banned_by_mc, CLIENT_is_player, CLIENT_kick, CLIENT_kick_reconnect, CLIENT_pre_reconnect, CLIENT_reconnect, CLIENT_reconnect_register, CLIENT_reconnect_unregister, CLIENT_send_pre_reconnect_info, CLIENT_send_reconnect_info, CLIENT_send_replays, Q, ROOM_all, ROOM_bad_ip, ROOM_ban_player, ROOM_clear_disconnect, ROOM_connected_ip, ROOM_find_by_name, ROOM_find_by_pid, ROOM_find_by_port, ROOM_find_by_title, ROOM_find_or_create_ai, ROOM_find_or_create_by_name, ROOM_find_or_create_random, ROOM_kick, ROOM_player_flee, ROOM_player_get_score, ROOM_player_lose, ROOM_player_win, ROOM_players_oppentlist, ROOM_unwelcome, ROOM_validate, ReplayParser, ResolveData, Room, SERVER_clear_disconnect, SERVER_kick, SOCKET_flush_data, _, _async, addCallback, athleticChecker, auth, axios, badwords, ban_user, bunyan, challonge, challonge_cache, challonge_queue_callbacks, checkFileExists, createDirectoryIfNotExists, crypto, dataManager, deck_name_match, dialogues, disconnect_list, exec, execFile, fs, geoip, getDuelLogQueryFromQs, getSeedTimet, get_callback, get_memory_usage, http, httpRequestListener, importOldConfig, import_datas, init, is_challonge_requesting, lflists, loadJSON, loadJSONAsync, loadLFList, loadRemoteData, load_dialogues, load_tips, log, long_resolve_cards, memory_usage, merge, moment, moment_long_ago_string, moment_now, moment_now_string, net, netRequestHandler, os, osu, path, qs, real_windbot_server_ip, refresh_challonge_cache, release_disconnect, replaced_index, report_to_big_brother, request, roomlist, setting_change, setting_save, settings, spawn, spawnSync, spawn_windbot, tips, url, users_cache, util, wait_room_start, wait_room_start_arena, windbot_looplimit, windbot_process, windbots, ygopro, zlib; var CLIENT_get_authorize_key, CLIENT_get_kick_reconnect_target, CLIENT_heartbeat_register, CLIENT_heartbeat_unregister, CLIENT_import_data, CLIENT_is_able_to_kick_reconnect, CLIENT_is_able_to_reconnect, CLIENT_is_banned_by_mc, CLIENT_is_player, CLIENT_kick, CLIENT_kick_reconnect, CLIENT_pre_reconnect, CLIENT_reconnect, CLIENT_reconnect_register, CLIENT_reconnect_unregister, CLIENT_send_pre_reconnect_info, CLIENT_send_reconnect_info, CLIENT_send_replays, Q, ROOM_all, ROOM_bad_ip, ROOM_ban_player, ROOM_clear_disconnect, ROOM_connected_ip, ROOM_find_by_name, ROOM_find_by_pid, ROOM_find_by_port, ROOM_find_by_title, ROOM_find_or_create_ai, ROOM_find_or_create_by_name, ROOM_find_or_create_random, ROOM_kick, ROOM_player_flee, ROOM_player_get_score, ROOM_player_lose, ROOM_player_win, ROOM_players_oppentlist, ROOM_unwelcome, ROOM_validate, ReplayParser, ResolveData, Room, SERVER_clear_disconnect, SERVER_kick, SOCKET_flush_data, _, _async, addCallback, athleticChecker, auth, axios, badwordR, badwords, ban_user, bunyan, challonge, challonge_cache, challonge_queue_callbacks, checkFileExists, createDirectoryIfNotExists, crypto, dataManager, deck_name_match, dialogues, disconnect_list, exec, execFile, fs, geoip, getDuelLogQueryFromQs, getSeedTimet, get_callback, get_memory_usage, http, httpRequestListener, importOldConfig, import_datas, init, is_challonge_requesting, lflists, loadJSON, loadJSONAsync, loadLFList, loadRemoteData, load_dialogues, load_tips, log, long_resolve_cards, memory_usage, merge, moment, moment_long_ago_string, moment_now, moment_now_string, net, netRequestHandler, os, osu, path, qs, real_windbot_server_ip, refresh_challonge_cache, release_disconnect, replaced_index, report_to_big_brother, request, roomlist, setting_change, setting_save, settings, spawn, spawnSync, spawn_windbot, tips, url, users_cache, util, wait_room_start, wait_room_start_arena, windbot_looplimit, windbot_process, windbots, ygopro, zlib;
net = require('net'); net = require('net');
...@@ -210,6 +210,8 @@ ...@@ -210,6 +210,8 @@
badwords = null; badwords = null;
badwordR = null;
lflists = global.lflists = []; lflists = global.lflists = [];
real_windbot_server_ip = null; real_windbot_server_ip = null;
...@@ -491,6 +493,12 @@ ...@@ -491,6 +493,12 @@
log.info("Reading banlists."); log.info("Reading banlists.");
await loadLFList('ygopro/expansions/lflist.conf'); await loadLFList('ygopro/expansions/lflist.conf');
await loadLFList('ygopro/lflist.conf'); await loadLFList('ygopro/lflist.conf');
badwordR = global.badwordR = {};
badwordR.level0 = new RegExp('(?:' + badwords.level0.join(')|(?:') + ')', 'i');
badwordR.level1 = new RegExp('(?:' + badwords.level1.join(')|(?:') + ')', 'i');
badwordR.level1g = new RegExp('(?:' + badwords.level1.join(')|(?:') + ')', 'ig');
badwordR.level2 = new RegExp('(?:' + badwords.level2.join(')|(?:') + ')', 'i');
badwordR.level3 = new RegExp('(?:' + badwords.level3.join(')|(?:') + ')', 'i');
setInterval(function() { setInterval(function() {
moment_now = moment(); moment_now = moment();
moment_now_string = moment_now.format(); moment_now_string = moment_now.format();
...@@ -2708,7 +2716,7 @@ ...@@ -2708,7 +2716,7 @@
}); });
ygopro.ctos_follow('JOIN_GAME', true, async function(buffer, info, client, server, datas) { ygopro.ctos_follow('JOIN_GAME', true, async function(buffer, info, client, server, datas) {
var available_logs, check_buffer_indentity, create_room_with_action, duelLog, exactBan, index, j, l, len, len1, name, pre_room, recover_match, replay, replay_id, replays, room, struct; var available_logs, check_buffer_indentity, create_room_with_action, duelLog, exactBan, index, j, l, len, len1, pre_room, recover_match, replay, replay_id, replays, room, struct;
//log.info info //log.info info
info.pass = info.pass.trim(); info.pass = info.pass.trim();
client.pass = info.pass; client.pass = info.pass;
...@@ -2840,27 +2848,15 @@ ...@@ -2840,27 +2848,15 @@
return ((options.rule === 1) === list.tcg) && list.date.isBefore(); return ((options.rule === 1) === list.tcg) && list.date.isBefore();
}); });
room_title = info.pass.slice(8).replace(String.fromCharCode(0xFEFF), ' '); room_title = info.pass.slice(8).replace(String.fromCharCode(0xFEFF), ' ');
if (_.any(badwords.level3, function(badword) { if (badwordR.level3.test(room_title)) {
var regexp;
regexp = new RegExp(badword, 'i');
return room_title.match(regexp);
}, room_title)) {
log.warn("BAD ROOM NAME LEVEL 3", room_title, client.name, client.ip); log.warn("BAD ROOM NAME LEVEL 3", room_title, client.name, client.ip);
ygopro.stoc_die(client, "${bad_roomname_level3}"); ygopro.stoc_die(client, "${bad_roomname_level3}");
return; return;
} else if (_.any(badwords.level2, function(badword) { } else if (badwordR.level2.test(room_title)) {
var regexp;
regexp = new RegExp(badword, 'i');
return room_title.match(regexp);
}, room_title)) {
log.warn("BAD ROOM NAME LEVEL 2", room_title, client.name, client.ip); log.warn("BAD ROOM NAME LEVEL 2", room_title, client.name, client.ip);
ygopro.stoc_die(client, "${bad_roomname_level2}"); ygopro.stoc_die(client, "${bad_roomname_level2}");
return; return;
} else if (_.any(badwords.level1, function(badword) { } else if (badwordR.level1.test(room_title)) {
var regexp;
regexp = new RegExp(badword, 'i');
return room_title.match(regexp);
}, room_title)) {
log.warn("BAD ROOM NAME LEVEL 1", room_title, client.name, client.ip); log.warn("BAD ROOM NAME LEVEL 1", room_title, client.name, client.ip);
ygopro.stoc_die(client, "${bad_roomname_level1}"); ygopro.stoc_die(client, "${bad_roomname_level1}");
return; return;
...@@ -3119,25 +3115,13 @@ ...@@ -3119,25 +3115,13 @@
} else if (ROOM_connected_ip[client.ip] > 5) { } else if (ROOM_connected_ip[client.ip] > 5) {
log.warn("MULTI LOGIN", client.name, client.ip); log.warn("MULTI LOGIN", client.name, client.ip);
ygopro.stoc_die(client, "${too_much_connection}" + client.ip); ygopro.stoc_die(client, "${too_much_connection}" + client.ip);
} else if (!settings.modules.tournament_mode.enabled && !settings.modules.challonge.enabled && _.any(badwords.level3, function(badword) { } else if (!settings.modules.tournament_mode.enabled && !settings.modules.challonge.enabled && badwordR.level3.test(client.name)) {
var regexp;
regexp = new RegExp(badword, 'i');
return name.match(regexp);
}, name = client.name)) {
log.warn("BAD NAME LEVEL 3", client.name, client.ip); log.warn("BAD NAME LEVEL 3", client.name, client.ip);
ygopro.stoc_die(client, "${bad_name_level3}"); ygopro.stoc_die(client, "${bad_name_level3}");
} else if (!settings.modules.tournament_mode.enabled && !settings.modules.challonge.enabled && _.any(badwords.level2, function(badword) { } else if (!settings.modules.tournament_mode.enabled && !settings.modules.challonge.enabled && badwordR.level2.test(client.name)) {
var regexp;
regexp = new RegExp(badword, 'i');
return name.match(regexp);
}, name = client.name)) {
log.warn("BAD NAME LEVEL 2", client.name, client.ip); log.warn("BAD NAME LEVEL 2", client.name, client.ip);
ygopro.stoc_die(client, "${bad_name_level2}"); ygopro.stoc_die(client, "${bad_name_level2}");
} else if (!settings.modules.tournament_mode.enabled && !settings.modules.challonge.enabled && _.any(badwords.level1, function(badword) { } else if (!settings.modules.tournament_mode.enabled && !settings.modules.challonge.enabled && badwordR.level1.test(client.name)) {
var regexp;
regexp = new RegExp(badword, 'i');
return name.match(regexp);
}, name = client.name)) {
log.warn("BAD NAME LEVEL 1", client.name, client.ip); log.warn("BAD NAME LEVEL 1", client.name, client.ip);
ygopro.stoc_die(client, "${bad_name_level1}"); ygopro.stoc_die(client, "${bad_name_level1}");
} else if (info.pass.length && !ROOM_validate(info.pass)) { } else if (info.pass.length && !ROOM_validate(info.pass)) {
...@@ -4249,11 +4233,7 @@ ...@@ -4249,11 +4233,7 @@
return true; return true;
} }
oldmsg = msg; oldmsg = msg;
if (_.any(badwords.level3, function(badword) { if (badwordR.level3.test(msg)) {
var regexp;
regexp = new RegExp(badword, 'i');
return msg.match(regexp);
}, msg)) {
log.warn("BAD WORD LEVEL 3", client.name, client.ip, oldmsg, RegExp.$1); log.warn("BAD WORD LEVEL 3", client.name, client.ip, oldmsg, RegExp.$1);
report_to_big_brother(room.name, client.name, client.ip, 3, oldmsg, RegExp.$1); report_to_big_brother(room.name, client.name, client.ip, 3, oldmsg, RegExp.$1);
cancel = true; cancel = true;
...@@ -4281,23 +4261,14 @@ ...@@ -4281,23 +4261,14 @@
client.abuse_count = client.abuse_count + 2; client.abuse_count = client.abuse_count + 2;
ygopro.stoc_send_chat(client, "${chat_warn_level0}", ygopro.constants.COLORS.RED); ygopro.stoc_send_chat(client, "${chat_warn_level0}", ygopro.constants.COLORS.RED);
cancel = true; cancel = true;
} else if (_.any(badwords.level2, function(badword) { } else if (badwordR.level2.test(msg)) {
var regexp;
regexp = new RegExp(badword, 'i');
return msg.match(regexp);
}, msg)) {
log.warn("BAD WORD LEVEL 2", client.name, client.ip, oldmsg, RegExp.$1); log.warn("BAD WORD LEVEL 2", client.name, client.ip, oldmsg, RegExp.$1);
report_to_big_brother(room.name, client.name, client.ip, 2, oldmsg, RegExp.$1); report_to_big_brother(room.name, client.name, client.ip, 2, oldmsg, RegExp.$1);
client.abuse_count = client.abuse_count + 3; client.abuse_count = client.abuse_count + 3;
ygopro.stoc_send_chat(client, "${chat_warn_level2}", ygopro.constants.COLORS.RED); ygopro.stoc_send_chat(client, "${chat_warn_level2}", ygopro.constants.COLORS.RED);
cancel = true; cancel = true;
} else { } else {
_.each(badwords.level1, function(badword) { msg = msg.replace(badwordR.level1g, '**');
var regexp;
//log.info msg
regexp = new RegExp(badword, "ig");
msg = msg.replace(regexp, "**");
}, msg);
if (oldmsg !== msg) { if (oldmsg !== msg) {
log.warn("BAD WORD LEVEL 1", client.name, client.ip, oldmsg, RegExp.$1); log.warn("BAD WORD LEVEL 1", client.name, client.ip, oldmsg, RegExp.$1);
report_to_big_brother(room.name, client.name, client.ip, 1, oldmsg, RegExp.$1); report_to_big_brother(room.name, client.name, client.ip, 1, oldmsg, RegExp.$1);
...@@ -4307,11 +4278,7 @@ ...@@ -4307,11 +4278,7 @@
struct._setBuff(buffer); struct._setBuff(buffer);
struct.set("msg", msg); struct.set("msg", msg);
buffer = struct.buffer; buffer = struct.buffer;
} else if (_.any(badwords.level0, function(badword) { } else if (badwordR.level0.test(msg)) {
var regexp;
regexp = new RegExp(badword, 'i');
return msg.match(regexp);
}, msg)) {
log.info("BAD WORD LEVEL 0", client.name, client.ip, oldmsg, RegExp.$1); log.info("BAD WORD LEVEL 0", client.name, client.ip, oldmsg, RegExp.$1);
report_to_big_brother(room.name, client.name, client.ip, 0, oldmsg, RegExp.$1); report_to_big_brother(room.name, client.name, client.ip, 0, oldmsg, RegExp.$1);
} }
......
...@@ -7,6 +7,15 @@ loadJSON = require('load-json-file').sync ...@@ -7,6 +7,15 @@ loadJSON = require('load-json-file').sync
@i18ns = loadJSON './data/i18n.json' @i18ns = loadJSON './data/i18n.json'
@i18nR = {}
for lang, data of @i18ns
@i18nR[lang]={}
for key, text of data
@i18nR[lang][key]={
regex: new RegExp("\\$\\{"+key+"\\}",'g'),
text: text
}
YGOProMessagesHelper = require("./YGOProMessages.js").YGOProMessagesHelper # 为 SRVPro2 准备的库,这里拿这个库只用来测试,SRVPro1 对异步支持不是特别完善,因此不会有很多异步优化 YGOProMessagesHelper = require("./YGOProMessages.js").YGOProMessagesHelper # 为 SRVPro2 准备的库,这里拿这个库只用来测试,SRVPro1 对异步支持不是特别完善,因此不会有很多异步优化
@helper = new YGOProMessagesHelper(9000) @helper = new YGOProMessagesHelper(9000)
...@@ -54,9 +63,8 @@ translateHandler = (handler) -> ...@@ -54,9 +63,8 @@ translateHandler = (handler) ->
for line in _.lines(msg) for line in _.lines(msg)
if player>=10 if player>=10
line="[Server]: "+line line="[Server]: "+line
for o,r of @i18ns[client.lang] for o,r of @i18nR[client.lang]
re=new RegExp("\\$\\{"+o+"\\}",'g') line=line.replace(r.regex, r.text)
line=line.replace(re,r)
@stoc_send client, 'CHAT', { @stoc_send client, 'CHAT', {
player: player player: player
msg: line msg: line
......
// Generated by CoffeeScript 2.5.1 // Generated by CoffeeScript 2.5.1
(function() { (function() {
var Struct, YGOProMessagesHelper, _, loadJSON, translateHandler; var Struct, YGOProMessagesHelper, _, data, key, lang, loadJSON, ref, text, translateHandler;
_ = require('underscore'); _ = require('underscore');
...@@ -14,6 +14,21 @@ ...@@ -14,6 +14,21 @@
this.i18ns = loadJSON('./data/i18n.json'); this.i18ns = loadJSON('./data/i18n.json');
this.i18nR = {};
ref = this.i18ns;
for (lang in ref) {
data = ref[lang];
this.i18nR[lang] = {};
for (key in data) {
text = data[key];
this.i18nR[lang][key] = {
regex: new RegExp("\\$\\{" + key + "\\}", 'g'),
text: text
};
}
}
YGOProMessagesHelper = require("./YGOProMessages.js").YGOProMessagesHelper; // 为 SRVPro2 准备的库,这里拿这个库只用来测试,SRVPro1 对异步支持不是特别完善,因此不会有很多异步优化 YGOProMessagesHelper = require("./YGOProMessages.js").YGOProMessagesHelper; // 为 SRVPro2 准备的库,这里拿这个库只用来测试,SRVPro1 对异步支持不是特别完善,因此不会有很多异步优化
this.helper = new YGOProMessagesHelper(9000); this.helper = new YGOProMessagesHelper(9000);
...@@ -69,22 +84,21 @@ ...@@ -69,22 +84,21 @@
//util //util
this.stoc_send_chat = function(client, msg, player = 8) { this.stoc_send_chat = function(client, msg, player = 8) {
var i, len, line, o, r, re, ref, ref1; var i, len, line, o, r, ref1, ref2;
if (!client) { if (!client) {
console.log("err stoc_send_chat"); console.log("err stoc_send_chat");
return; return;
} }
ref = _.lines(msg); ref1 = _.lines(msg);
for (i = 0, len = ref.length; i < len; i++) { for (i = 0, len = ref1.length; i < len; i++) {
line = ref[i]; line = ref1[i];
if (player >= 10) { if (player >= 10) {
line = "[Server]: " + line; line = "[Server]: " + line;
} }
ref1 = this.i18ns[client.lang]; ref2 = this.i18nR[client.lang];
for (o in ref1) { for (o in ref2) {
r = ref1[o]; r = ref2[o];
re = new RegExp("\\$\\{" + o + "\\}", 'g'); line = line.replace(r.regex, r.text);
line = line.replace(re, r);
} }
this.stoc_send(client, 'CHAT', { this.stoc_send(client, 'CHAT', {
player: player, player: player,
...@@ -94,21 +108,21 @@ ...@@ -94,21 +108,21 @@
}; };
this.stoc_send_chat_to_room = function(room, msg, player = 8) { this.stoc_send_chat_to_room = function(room, msg, player = 8) {
var client, i, j, len, len1, ref, ref1; var client, i, j, len, len1, ref1, ref2;
if (!room) { if (!room) {
console.log("err stoc_send_chat_to_room"); console.log("err stoc_send_chat_to_room");
return; return;
} }
ref = room.players; ref1 = room.players;
for (i = 0, len = ref.length; i < len; i++) { for (i = 0, len = ref1.length; i < len; i++) {
client = ref[i]; client = ref1[i];
if (client) { if (client) {
this.stoc_send_chat(client, msg, player); this.stoc_send_chat(client, msg, player);
} }
} }
ref1 = room.watchers; ref2 = room.watchers;
for (j = 0, len1 = ref1.length; j < len1; j++) { for (j = 0, len1 = ref2.length; j < len1; j++) {
client = ref1[j]; client = ref2[j];
if (client) { if (client) {
this.stoc_send_chat(client, msg, player); this.stoc_send_chat(client, msg, player);
} }
...@@ -116,14 +130,14 @@ ...@@ -116,14 +130,14 @@
}; };
this.stoc_send_hint_card_to_room = function(room, card) { this.stoc_send_hint_card_to_room = function(room, card) {
var client, i, j, len, len1, ref, ref1; var client, i, j, len, len1, ref1, ref2;
if (!room) { if (!room) {
console.log("err stoc_send_hint_card_to_room"); console.log("err stoc_send_hint_card_to_room");
return; return;
} }
ref = room.players; ref1 = room.players;
for (i = 0, len = ref.length; i < len; i++) { for (i = 0, len = ref1.length; i < len; i++) {
client = ref[i]; client = ref1[i];
if (client) { if (client) {
this.stoc_send(client, 'GAME_MSG', { this.stoc_send(client, 'GAME_MSG', {
curmsg: 2, curmsg: 2,
...@@ -133,9 +147,9 @@ ...@@ -133,9 +147,9 @@
}); });
} }
} }
ref1 = room.watchers; ref2 = room.watchers;
for (j = 0, len1 = ref1.length; j < len1; j++) { for (j = 0, len1 = ref2.length; j < len1; j++) {
client = ref1[j]; client = ref2[j];
if (client) { if (client) {
this.stoc_send(client, 'GAME_MSG', { this.stoc_send(client, 'GAME_MSG', {
curmsg: 2, curmsg: 2,
......
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