From c0d64b898132d2fe1e9c429f567b92fb9a0e5bc5 Mon Sep 17 00:00:00 2001 From: skull132 Date: Mon, 8 Jun 2015 19:57:09 +0300 Subject: [PATCH] Autobanner Adminbot should now be capable of banning right about everyone who deserves another ban. --- aurora.dme | 1 + code/modules/admin/DB ban/functions.dm | 30 +++++++++++------ code/modules/admin/IsBanned.dm | 46 +++++++++++++++++++------- 3 files changed, 54 insertions(+), 23 deletions(-) diff --git a/aurora.dme b/aurora.dme index c346d35e..acb0c5cc 100644 --- a/aurora.dme +++ b/aurora.dme @@ -775,6 +775,7 @@ #include "code\modules\admin\IsBanned.dm" #include "code\modules\admin\NewBan.dm" #include "code\modules\admin\player_notes.dm" +#include "code\modules\admin\player_notes_sql.dm" #include "code\modules\admin\player_panel.dm" #include "code\modules\admin\topic.dm" #include "code\modules\admin\ToRban.dm" diff --git a/code/modules/admin/DB ban/functions.dm b/code/modules/admin/DB ban/functions.dm index fcd05430..8de17af1 100644 --- a/code/modules/admin/DB ban/functions.dm +++ b/code/modules/admin/DB ban/functions.dm @@ -1,5 +1,5 @@ -datum/admins/proc/DB_ban_record(var/bantype, var/mob/banned_mob, var/duration = -1, var/reason, var/job = "", var/rounds = 0, var/banckey = null) +datum/admins/proc/DB_ban_record(var/bantype, var/mob/banned_mob, var/duration = -1, var/reason, var/job = "", var/rounds = 0, var/banckey = null, var/autobanner = 0, var/autoip = null, var/autocid = null) if(!check_rights(R_MOD,0) && !check_rights(R_BAN)) return @@ -41,15 +41,16 @@ datum/admins/proc/DB_ban_record(var/bantype, var/mob/banned_mob, var/duration = else if(banckey) ckey = ckey(banckey) - var/DBQuery/query = dbcon.NewQuery("SELECT id FROM erro_player WHERE ckey = '[ckey]'") - query.Execute() - var/validckey = 0 - if(query.NextRow()) - validckey = 1 - if(!validckey) - if(!banned_mob || (banned_mob && !IsGuestKey(banned_mob.key))) - message_admins("[key_name_admin(usr)] attempted to ban [ckey], but [ckey] has not been seen yet. Please only ban actual players.",1) - return + if(!autobanner) + var/DBQuery/query = dbcon.NewQuery("SELECT id FROM erro_player WHERE ckey = '[ckey]'") + query.Execute() + var/validckey = 0 + if(query.NextRow()) + validckey = 1 + if(!validckey) + if(!banned_mob || (banned_mob && !IsGuestKey(banned_mob.key))) + message_admins("[key_name_admin(usr)] attempted to ban [ckey], but [ckey] has not been seen yet. Please only ban actual players.",1) + return var/a_ckey var/a_computerid @@ -60,6 +61,13 @@ datum/admins/proc/DB_ban_record(var/bantype, var/mob/banned_mob, var/duration = a_computerid = src.owner:computer_id a_ip = src.owner:address + if(autobanner) + a_ckey = "Adminbot" + a_computerid = "" + a_ip = "[world.internet_address]" + computerid = autocid + ip = autoip + var/who for(var/client/C in clients) if(!who) @@ -80,7 +88,7 @@ datum/admins/proc/DB_ban_record(var/bantype, var/mob/banned_mob, var/duration = var/DBQuery/query_insert = dbcon.NewQuery(sql) query_insert.Execute() usr << "\blue Ban saved to database." - message_admins("[key_name_admin(usr)] has added a [bantype_str] for [ckey] [(job)?"([job])":""] [(duration > 0)?"([duration] minutes)":""] with the reason: \"[reason]\" to the ban database.",1) + message_admins("[autobanner ? "Adminbot" : key_name_admin(usr)] has added a [bantype_str] for [ckey] [(job)?"([job])":""] [(duration > 0)?"([duration] minutes)":""] with the reason: \"[reason]\" to the ban database.",1) diff --git a/code/modules/admin/IsBanned.dm b/code/modules/admin/IsBanned.dm index eaae56ad..4122ddf8 100644 --- a/code/modules/admin/IsBanned.dm +++ b/code/modules/admin/IsBanned.dm @@ -5,10 +5,14 @@ world/IsBanned(key,address,computer_id) if(ckey(key) in admin_datums) return ..() + //Making the adminbot for automated bans. + var/datum/admins/Adminbot = new /datum/admins(initial_rank = "Friendly Robot", initial_rights = 8196, "Adminbot") + //Guest Checking if(!guests_allowed && IsGuestKey(key)) log_access("Failed Login: [key] - Guests not allowed") message_admins("\blue Failed Login: [key] - Guests not allowed") + del Adminbot return list("reason"="guest", "desc"="\nReason: Guests not allowed. Please sign in with a byond account.") //check if the IP address is a known TOR node @@ -17,6 +21,7 @@ world/IsBanned(key,address,computer_id) message_admins("\blue Failed Login: [src] - Banned: ToR") //ban their computer_id and ckey for posterity AddBan(ckey(key), computer_id, "Use of ToR", "Automated Ban", 0, 0) + del Adminbot return list("reason"="Using ToR", "desc"="\nReason: The network you are using to connect has been banned.\nIf you believe this is a mistake, please request help at [config.banappeals]") if(config && config.ip_blacklist_enabled) @@ -39,18 +44,20 @@ world/IsBanned(key,address,computer_id) var/DBQuery/query = dbcon.NewQuery("SELECT ip FROM aurora_ipblacklist WHERE ip = '[address]'") query.Execute() - while(query.NextRow()) - var/bip = query.item[1] + if(query.NextRow()) + banhe = 1 - if(bip == address) - banhe = 1 + if(banhe) + log_access("Failed Login: [key] - Blacklisted IP. User banned.") + message_admins("\blue Failed Login: [key] - Blacklisted IP. User banned.") + message_mods("\blue Failed Login: [key] - Blacklisted IP. User banned.") - if(banhe == 1) - log_access("Failed Login: [key] - Blacklisted IP") - message_admins("\blue Failed Login: [key] - Blacklisted IP") - message_mods("\blue Failed Login: [key] - Blacklisted IP") - AddBan(ckey(key), computer_id, "Bad IP", "Automated Ban", 0, 0) - return list("reason"="IP Blacklisted", "desc"="\nReason: This IP has been blacklisted from the server.\nIf you believe this is a mistake, please request help at [config.banappeals]") + var/reason = "This IP has been blacklisted from the server." + Adminbot.DB_ban_record(BANTYPE_PERMA, null, null, reason, null, null, ckey(key), 1, address, computer_id) + notes_add_sql(key, reason, null, address, computer_id) + + del Adminbot + return list("reason"="IP Blacklisted", "desc"="\nReason: [reason]\nIf you believe this is a mistake, please request help at [config.banappeals]") msg_scopes("[key]'s blacklist check completed.") @@ -61,8 +68,10 @@ world/IsBanned(key,address,computer_id) if(.) log_access("Failed Login: [key] [computer_id] [address] - Banned [.["reason"]]") message_admins("\blue Failed Login: [key] id:[computer_id] ip:[address] - Banned [.["reason"]]") + del Adminbot return . + del Adminbot return ..() //default pager ban stuff else @@ -72,10 +81,12 @@ world/IsBanned(key,address,computer_id) if(!establish_db_connection()) error("Ban database connection failure. Key [ckeytext] not checked") log_misc("Ban database connection failure. Key [ckeytext] not checked") + del Adminbot return var/failedcid = 1 var/failedip = 1 + var/multikey = 0 var/ipquery = "" var/cidquery = "" @@ -93,8 +104,8 @@ world/IsBanned(key,address,computer_id) while(query.NextRow()) var/pckey = query.item[1] - //var/pip = query.item[2] - //var/pcid = query.item[3] + var/pip = query.item[2] + var/pcid = query.item[3] var/ackey = query.item[4] var/reason = query.item[5] var/expiration = query.item[6] @@ -111,10 +122,21 @@ world/IsBanned(key,address,computer_id) log_access("Failed Login: [key] [computer_id] [address] - Banned [reason]") message_admins("\blue Failed Login: [key] id:[computer_id] ip:[address] - Banned [reason]") + if(ckey(key) != ckey(pckey) || computer_id != pcid || address != pip) + multikey = 1 + + if(multikey) + desc = "\nReason: You, or another user of this computer or connection ([pckey]) is banned from playing here. The ban reason is:\nThis is an automatic ban for attempted bandodging. The original ban reason is this: [reason]\nThis ban was applied by [ackey] on [bantime], [expires]" + var/newreason = "This is an automatic ban for attempted bandodging. The original ban reason: [reason]." + Adminbot.DB_ban_record(BANTYPE_PERMA, null, null, reason, null, null, ckey(key), 1, address, computer_id) + notes_add_sql(key, newreason, null, address, computer_id) + + del Adminbot return list("reason"="[bantype]", "desc"="[desc]") if (failedcid) message_admins("[key] has logged in with a blank computer id in the ban check.") if (failedip) message_admins("[key] has logged in with a blank ip in the ban check.") + del Adminbot return ..() //default pager ban stuff \ No newline at end of file