mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-09 07:57:50 +00:00
* 516 compat: HTML wrappers * More HTML * Legacy gult * Forgot these * forgot that thanks travis
258 lines
7.7 KiB
Plaintext
258 lines
7.7 KiB
Plaintext
var/CMinutes = null
|
|
var/savefile/Banlist
|
|
|
|
|
|
/proc/CheckBan(var/ckey, var/id, var/address)
|
|
if(!Banlist) // if Banlist cannot be located for some reason
|
|
LoadBans() // try to load the bans
|
|
if(!Banlist) // uh oh, can't find bans!
|
|
return 0 // ABORT ABORT ABORT
|
|
|
|
. = list()
|
|
var/appeal
|
|
if(config && config.banappeals)
|
|
appeal = "\nFor more information on your ban, or to appeal, head to <a href='[config.banappeals]'>[config.banappeals]</a>"
|
|
Banlist.cd = "/base"
|
|
if( "[ckey][id]" in Banlist.dir )
|
|
Banlist.cd = "[ckey][id]"
|
|
if (Banlist["temp"])
|
|
if (!GetExp(Banlist["minutes"]))
|
|
ClearTempbans()
|
|
return 0
|
|
else
|
|
.["desc"] = "\nReason: [Banlist["reason"]]\nExpires: [GetExp(Banlist["minutes"])]\nBy: [Banlist["bannedby"]][appeal]"
|
|
else
|
|
Banlist.cd = "/base/[ckey][id]"
|
|
.["desc"] = "\nReason: [Banlist["reason"]]\nExpires: <B>PERMENANT</B>\nBy: [Banlist["bannedby"]][appeal]"
|
|
.["reason"] = "ckey/id"
|
|
return .
|
|
else
|
|
for (var/A in Banlist.dir)
|
|
Banlist.cd = "/base/[A]"
|
|
var/matches
|
|
if( ckey == Banlist["key"] )
|
|
matches += "ckey"
|
|
if( id == Banlist["id"] )
|
|
if(matches)
|
|
matches += "/"
|
|
matches += "id"
|
|
if( address == Banlist["ip"] )
|
|
if(matches)
|
|
matches += "/"
|
|
matches += "ip"
|
|
|
|
if(matches)
|
|
if(Banlist["temp"])
|
|
if (!GetExp(Banlist["minutes"]))
|
|
ClearTempbans()
|
|
return 0
|
|
else
|
|
.["desc"] = "\nReason: [Banlist["reason"]]\nExpires: [GetExp(Banlist["minutes"])]\nBy: [Banlist["bannedby"]][appeal]"
|
|
else
|
|
.["desc"] = "\nReason: [Banlist["reason"]]\nExpires: <B>PERMENANT</B>\nBy: [Banlist["bannedby"]][appeal]"
|
|
.["reason"] = matches
|
|
return .
|
|
return 0
|
|
|
|
/proc/UpdateTime() //No idea why i made this a proc.
|
|
CMinutes = (world.realtime / 10) / 60
|
|
return 1
|
|
|
|
/proc/LoadBans()
|
|
|
|
|
|
Banlist = new("data/banlist.bdb")
|
|
log_admin("Loading Banlist")
|
|
|
|
if (!length(Banlist.dir))
|
|
log_admin("Banlist is empty.")
|
|
|
|
if (!Banlist.dir.Find("base"))
|
|
log_admin("Banlist missing base dir.")
|
|
Banlist.dir.Add("base")
|
|
Banlist.cd = "/base"
|
|
else if (Banlist.dir.Find("base"))
|
|
Banlist.cd = "/base"
|
|
|
|
ClearTempbans()
|
|
return 1
|
|
|
|
/proc/ClearTempbans()
|
|
UpdateTime()
|
|
|
|
Banlist.cd = "/base"
|
|
for (var/A in Banlist.dir)
|
|
Banlist.cd = "/base/[A]"
|
|
if (!Banlist["key"] || !Banlist["id"])
|
|
RemoveBan(A)
|
|
log_admin("Invalid Ban.")
|
|
message_admins("Invalid Ban.")
|
|
continue
|
|
|
|
if (!Banlist["temp"])
|
|
continue
|
|
if (CMinutes >= Banlist["minutes"])
|
|
RemoveBan(A)
|
|
|
|
return 1
|
|
|
|
|
|
/mob/proc/GetBanned(reason, bannedby, temp, minutes, address, sticky)
|
|
if(usr && usr.client && usr.client.holder)
|
|
AddBan(src.ckey, src.computer_id, reason, bannedby, temp, minutes, address ? lastKnownIP : null)
|
|
if(sticky)
|
|
world.SetConfig("SYSTEM/keyban",src.ckey,"type=sticky&reason=[reason]&message=[reason]&admin=[bannedby]")
|
|
message_admins("[key_name_admin(usr)] has sticky banned [key_name(src)].")
|
|
log_admin("[key_name(usr)] has sticky banned [key_name(src)].")
|
|
to_chat(src, "<span class='warning'><BIG><B>You have been banned by [bannedby].\nReason: [reason].</B></BIG></span>")
|
|
to_chat(src, "<span class='warning'>This is a [temp ? "temporary" : "permanent"] ban[temp ? ", it will be removed in [minutes] minutes" : ""].</span>")
|
|
if(config.banappeals)
|
|
to_chat(src, "<span class='warning'>To try to resolve this matter head to [config.banappeals]</span>")
|
|
else
|
|
to_chat(src, "<span class='warning'>No ban appeals URL has been set.</span>")
|
|
var/thisinfo = temp ? "will be removed in [minutes] minutes" : "is a permanent ban"
|
|
ban_unban_log_save("[bannedby] has [temp ? "perma" : ""]banned [ckey]. - Reason: [reason] - This [thisinfo].")
|
|
log_admin("[bannedby] has banned [ckey].\nReason: [reason]\nThis [thisinfo].")
|
|
message_admins("<span class='warning'>[bannedby] has banned [ckey].\nReason: [reason]\nThis [thisinfo].</span>")
|
|
usr.client.holder.DB_ban_record(temp ? BANTYPE_TEMP : BANTYPE_PERMA, src, temp ? minutes : -1, reason)
|
|
|
|
del(src.client)
|
|
//del(src) // See no reason why to delete mob. Important stuff can be lost. And ban can be lifted before round ends.
|
|
|
|
/proc/AddBan(ckey, computerid, reason, bannedby, temp, minutes, address)
|
|
|
|
|
|
var/bantimestamp
|
|
|
|
if (temp)
|
|
UpdateTime()
|
|
bantimestamp = CMinutes + minutes
|
|
|
|
Banlist.cd = "/base"
|
|
if ( Banlist.dir.Find("[ckey][computerid]") )
|
|
to_chat(usr, text("<span class='warning'>Ban already exists.</span>"))
|
|
return 0
|
|
else
|
|
Banlist.dir.Add("[ckey][computerid]")
|
|
Banlist.cd = "/base/[ckey][computerid]"
|
|
Banlist["key"] << ckey
|
|
Banlist["id"] << computerid
|
|
Banlist["ip"] << address
|
|
Banlist["reason"] << reason
|
|
Banlist["bannedby"] << bannedby
|
|
Banlist["temp"] << temp
|
|
if (temp)
|
|
Banlist["minutes"] << bantimestamp
|
|
return 1
|
|
|
|
/proc/RemoveBan(foldername)
|
|
var/key
|
|
var/id
|
|
|
|
Banlist.cd = "/base/[foldername]"
|
|
Banlist["key"] >> key
|
|
Banlist["id"] >> id
|
|
Banlist.cd = "/base"
|
|
|
|
if (!Banlist.dir.Remove(foldername))
|
|
return 0
|
|
|
|
if(!usr)
|
|
log_admin("Ban Expired: [key]")
|
|
message_admins("Ban Expired: [key]")
|
|
else
|
|
ban_unban_log_save("[key_name_admin(usr)] unbanned [key]")
|
|
log_admin("[key_name_admin(usr)] unbanned [key]")
|
|
message_admins("[key_name_admin(usr)] unbanned: [key]")
|
|
feedback_inc("ban_unban",1)
|
|
usr.client.holder.DB_ban_unban( ckey(key), BANTYPE_ANY_FULLBAN)
|
|
for (var/A in Banlist.dir)
|
|
Banlist.cd = "/base/[A]"
|
|
if (key == Banlist["key"] /*|| id == Banlist["id"]*/)
|
|
Banlist.cd = "/base"
|
|
Banlist.dir.Remove(A)
|
|
continue
|
|
|
|
return 1
|
|
|
|
/proc/GetExp(minutes as num)
|
|
UpdateTime()
|
|
var/exp = minutes - CMinutes
|
|
if (exp <= 0)
|
|
return 0
|
|
else
|
|
var/timeleftstring
|
|
if (exp >= 1440) //1440 = 1 day in minutes
|
|
timeleftstring = "[round(exp / 1440, 0.1)] Days"
|
|
else if (exp >= 60) //60 = 1 hour in minutes
|
|
timeleftstring = "[round(exp / 60, 0.1)] Hours"
|
|
else
|
|
timeleftstring = "[exp] Minutes"
|
|
return timeleftstring
|
|
|
|
/datum/admins/proc/unbanpanel()
|
|
var/count = 0
|
|
var/dat
|
|
//var/dat = "<HR><B>Unban Player:</B> <span class='warning'>(U) = Unban , (E) = Edit Ban<span class='good'>(Total<HR><table border=1 rules=all frame=void cellspacing=0 cellpadding=3 ></span></span>"
|
|
Banlist.cd = "/base"
|
|
for (var/A in Banlist.dir)
|
|
count++
|
|
Banlist.cd = "/base/[A]"
|
|
var/ref = "\ref[src]"
|
|
var/key = Banlist["key"]
|
|
var/id = Banlist["id"]
|
|
var/ip = Banlist["ip"]
|
|
var/reason = Banlist["reason"]
|
|
var/by = Banlist["bannedby"]
|
|
var/expiry
|
|
if(Banlist["temp"])
|
|
expiry = GetExp(Banlist["minutes"])
|
|
if(!expiry)
|
|
expiry = "Removal Pending"
|
|
else
|
|
expiry = "Permaban"
|
|
|
|
dat += text("<tr><td><A href='?src=[ref];unbanf=[key][id]'>(U)</A><A href='?src=[ref];unbane=[key][id]'>(E)</A> Key: <B>[key]</B></td><td>ComputerID: <B>[id]</B></td><td>IP: <B>[ip]</B></td><td> [expiry]</td><td>(By: [by])</td><td>(Reason: [reason])</td></tr>")
|
|
|
|
|
|
dat += {"</table>
|
|
<HR><B>Bans:</B> <FONT COLOR=blue>(U) = Unban , (E) = Edit Ban</FONT> - <FONT COLOR=green>([count] Bans)</FONT><HR><table border=1 rules=all frame=void cellspacing=0 cellpadding=3 >[dat]"}
|
|
usr << browse(HTML_SKELETON(dat), "window=unbanp;size=875x400")
|
|
|
|
//////////////////////////////////// DEBUG ////////////////////////////////////
|
|
|
|
/proc/CreateBans()
|
|
|
|
|
|
UpdateTime()
|
|
|
|
var/i
|
|
var/last
|
|
|
|
for(i=0, i<1001, i++)
|
|
var/a = pick(1,0)
|
|
var/b = pick(1,0)
|
|
if(b)
|
|
Banlist.cd = "/base"
|
|
Banlist.dir.Add("trash[i]trashid[i]")
|
|
Banlist.cd = "/base/trash[i]trashid[i]"
|
|
Banlist["key"] << "trash[i]"
|
|
else
|
|
Banlist.cd = "/base"
|
|
Banlist.dir.Add("[last]trashid[i]")
|
|
Banlist.cd = "/base/[last]trashid[i]"
|
|
Banlist["key"] << last
|
|
Banlist["id"] << "trashid[i]"
|
|
Banlist["reason"] << "Trashban[i]."
|
|
Banlist["temp"] << a
|
|
Banlist["minutes"] << CMinutes + rand(1,2000)
|
|
Banlist["bannedby"] << "trashmin"
|
|
last = "trash[i]"
|
|
|
|
Banlist.cd = "/base"
|
|
|
|
/proc/ClearAllBans()
|
|
Banlist.cd = "/base"
|
|
for (var/A in Banlist.dir)
|
|
RemoveBan(A)
|