Commit cb51ad7e authored by nanahira's avatar nanahira

add remote ban chat

parent 502c7dc0
...@@ -104,6 +104,7 @@ ...@@ -104,6 +104,7 @@
"enabled": false, "enabled": false,
"auth_base_url": "https://ygobbs.com", "auth_base_url": "https://ygobbs.com",
"auth_database": "postgres://233@233.mycard.moe/233", "auth_database": "postgres://233@233.mycard.moe/233",
"ban_get": "https://api.mycard.moe/ygopro/big-brother/ban",
"auth_key": "233333" "auth_key": "233333"
}, },
"challonge": { "challonge": {
......
...@@ -42,6 +42,7 @@ moment.locale('zh-cn', { ...@@ -42,6 +42,7 @@ moment.locale('zh-cn', {
import_datas = [ import_datas = [
"abuse_count", "abuse_count",
"ban_mc",
"rag", "rag",
"rid", "rid",
"is_post_watcher", "is_post_watcher",
...@@ -733,6 +734,9 @@ CLIENT_heartbeat_register = (client, send) -> ...@@ -733,6 +734,9 @@ CLIENT_heartbeat_register = (client, send) ->
#log.info(1, client.name) #log.info(1, client.name)
return true return true
CLIENT_is_banned_by_mc = (client) ->
return client.ban_mc and client.ban_mc.banned and moment().isBefore(client.ban_mc.until)
class Room class Room
constructor: (name, @hostinfo) -> constructor: (name, @hostinfo) ->
@name = name @name = name
...@@ -1205,7 +1209,7 @@ net.createServer (client) -> ...@@ -1205,7 +1209,7 @@ net.createServer (client) ->
client.on 'data', (ctos_buffer) -> client.on 'data', (ctos_buffer) ->
if client.is_post_watcher if client.is_post_watcher
room=ROOM_all[client.rid] room=ROOM_all[client.rid]
room.watcher.write ctos_buffer if room room.watcher.write ctos_buffer if room and !CLIENT_is_banned_by_mc(client)
else else
#ctos_buffer = Buffer.alloc(0) #ctos_buffer = Buffer.alloc(0)
ctos_message_length = 0 ctos_message_length = 0
...@@ -1356,6 +1360,22 @@ ygopro.ctos_follow 'PLAYER_INFO', true, (buffer, info, client, server)-> ...@@ -1356,6 +1360,22 @@ ygopro.ctos_follow 'PLAYER_INFO', true, (buffer, info, client, server)->
return false return false
, name)) , name))
client.rag = true client.rag = true
if true#settings.modules.mycard.enabled
#console.log(name)
request
url: settings.modules.mycard.ban_get
json: true
qs:
user: name
, (error, response, body)->
#console.log(body)
if _.isString body
log.warn "ban get bad json", body
else if error or !body
log.warn 'ban get error', error, response
else
client.ban_mc = body
return
struct = ygopro.structs["CTOS_PlayerInfo"] struct = ygopro.structs["CTOS_PlayerInfo"]
struct._setBuff(buffer) struct._setBuff(buffer)
struct.set("name", name) struct.set("name", name)
...@@ -2463,7 +2483,7 @@ ygopro.ctos_follow 'CHAT', true, (buffer, info, client, server)-> ...@@ -2463,7 +2483,7 @@ ygopro.ctos_follow 'CHAT', true, (buffer, info, client, server)->
cancel = true cancel = true
if !(room and (room.random_type or room.arena)) if !(room and (room.random_type or room.arena))
return cancel return cancel
if client.abuse_count>=5 if client.abuse_count>=5 or CLIENT_is_banned_by_mc(client)
log.warn "BANNED CHAT", client.name, client.ip, msg log.warn "BANNED CHAT", client.name, client.ip, msg
ygopro.stoc_send_chat(client, "${banned_chat_tip}", ygopro.constants.COLORS.RED) ygopro.stoc_send_chat(client, "${banned_chat_tip}", ygopro.constants.COLORS.RED)
return true return true
......
// Generated by CoffeeScript 1.12.7 // Generated by CoffeeScript 1.12.7
(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_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, Cloud_replay_ids, ROOM_all, ROOM_bad_ip, ROOM_ban_player, ROOM_clear_disconnect, ROOM_connected_ip, ROOM_find_by_name, 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_players_banned, ROOM_players_oppentlist, ROOM_unwelcome, ROOM_validate, Room, SERVER_clear_disconnect, _, addCallback, badwords, ban_user, bunyan, challonge, chat_color, config, cppversion, crypto, date, default_config, default_data, dialogues, disconnect_list, duel_log, e, exec, execFile, fs, geoip, get_memory_usage, http, http_server, https, https_server, import_datas, imported, j, l, len, len1, lflists, list, loadJSON, load_dialogues, load_tips, log, long_resolve_cards, memory_usage, merge, moment, net, oldbadwords, oldconfig, olddialogues, oldduellog, oldtips, options, os, path, pgClient, pg_client, pg_query, redis, redisdb, ref, ref1, release_disconnect, report_to_big_brother, request, requestListener, roomlist, setting_change, setting_save, settings, spawn, spawnSync, tips, url, users_cache, wait_room_start, wait_room_start_arena, windbot_bin, windbot_parameters, 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, Cloud_replay_ids, ROOM_all, ROOM_bad_ip, ROOM_ban_player, ROOM_clear_disconnect, ROOM_connected_ip, ROOM_find_by_name, 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_players_banned, ROOM_players_oppentlist, ROOM_unwelcome, ROOM_validate, Room, SERVER_clear_disconnect, _, addCallback, badwords, ban_user, bunyan, challonge, chat_color, config, cppversion, crypto, date, default_config, default_data, dialogues, disconnect_list, duel_log, e, exec, execFile, fs, geoip, get_memory_usage, http, http_server, https, https_server, import_datas, imported, j, l, len, len1, lflists, list, loadJSON, load_dialogues, load_tips, log, long_resolve_cards, memory_usage, merge, moment, net, oldbadwords, oldconfig, olddialogues, oldduellog, oldtips, options, os, path, pgClient, pg_client, pg_query, redis, redisdb, ref, ref1, release_disconnect, report_to_big_brother, request, requestListener, roomlist, setting_change, setting_save, settings, spawn, spawnSync, tips, url, users_cache, wait_room_start, wait_room_start_arena, windbot_bin, windbot_parameters, windbot_process, windbots, ygopro, zlib;
net = require('net'); net = require('net');
...@@ -58,7 +58,7 @@ ...@@ -58,7 +58,7 @@
} }
}); });
import_datas = ["abuse_count", "rag", "rid", "is_post_watcher", "retry_count", "name", "pass", "is_first", "lp", "card_count", "is_host", "pos", "surrend_confirm", "kick_count", "deck_saved", "main", "side", "side_interval", "side_tcount", "selected_preduel", "last_game_msg", "last_game_msg_title", "last_hint_msg", "start_deckbuf", "challonge_info", "ready_trap"]; import_datas = ["abuse_count", "ban_mc", "rag", "rid", "is_post_watcher", "retry_count", "name", "pass", "is_first", "lp", "card_count", "is_host", "pos", "surrend_confirm", "kick_count", "deck_saved", "main", "side", "side_interval", "side_tcount", "selected_preduel", "last_game_msg", "last_game_msg_title", "last_hint_msg", "start_deckbuf", "challonge_info", "ready_trap"];
merge = require('deepmerge'); merge = require('deepmerge');
...@@ -945,6 +945,10 @@ ...@@ -945,6 +945,10 @@
return true; return true;
}; };
CLIENT_is_banned_by_mc = function(client) {
return client.ban_mc && client.ban_mc.banned && moment().isBefore(client.ban_mc.until);
};
Room = (function() { Room = (function() {
function Room(name, hostinfo) { function Room(name, hostinfo) {
var draw_count, lflist, param, rule, start_hand, start_lp, time_limit; var draw_count, lflist, param, rule, start_hand, start_lp, time_limit;
...@@ -1540,7 +1544,7 @@ ...@@ -1540,7 +1544,7 @@
var b, bad_ip_count, buffer, cancel, ctos_message_length, ctos_proto, datas, info, len2, len3, looplimit, m, n, room, struct; var b, bad_ip_count, buffer, cancel, ctos_message_length, ctos_proto, datas, info, len2, len3, looplimit, m, n, room, struct;
if (client.is_post_watcher) { if (client.is_post_watcher) {
room = ROOM_all[client.rid]; room = ROOM_all[client.rid];
if (room) { if (room && !CLIENT_is_banned_by_mc(client)) {
room.watcher.write(ctos_buffer); room.watcher.write(ctos_buffer);
} }
} else { } else {
...@@ -1714,6 +1718,23 @@ ...@@ -1714,6 +1718,23 @@
}, name)) { }, name)) {
client.rag = true; client.rag = true;
} }
if (true) {
request({
url: settings.modules.mycard.ban_get,
json: true,
qs: {
user: name
}
}, function(error, response, body) {
if (_.isString(body)) {
log.warn("ban get bad json", body);
} else if (error || !body) {
log.warn('ban get error', error, response);
} else {
client.ban_mc = body;
}
});
}
struct = ygopro.structs["CTOS_PlayerInfo"]; struct = ygopro.structs["CTOS_PlayerInfo"];
struct._setBuff(buffer); struct._setBuff(buffer);
struct.set("name", name); struct.set("name", name);
...@@ -3085,7 +3106,7 @@ ...@@ -3085,7 +3106,7 @@
if (!(room && (room.random_type || room.arena))) { if (!(room && (room.random_type || room.arena))) {
return cancel; return cancel;
} }
if (client.abuse_count >= 5) { if (client.abuse_count >= 5 || CLIENT_is_banned_by_mc(client)) {
log.warn("BANNED CHAT", client.name, client.ip, msg); log.warn("BANNED CHAT", client.name, client.ip, msg);
ygopro.stoc_send_chat(client, "${banned_chat_tip}", ygopro.constants.COLORS.RED); ygopro.stoc_send_chat(client, "${banned_chat_tip}", ygopro.constants.COLORS.RED);
return true; return true;
......
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