mirror of
https://github.com/sys4-fr/server-nalc.git
synced 2024-12-24 17:50:37 +01:00
[xban2] Update
This commit is contained in:
parent
a253f5478d
commit
3510efea08
15
mods/xban2/bower.json
Normal file
15
mods/xban2/bower.json
Normal file
@ -0,0 +1,15 @@
|
||||
{
|
||||
"name": "xban2",
|
||||
"description": "Ban system extension with support for temporary bans.",
|
||||
"keywords": [
|
||||
"ban",
|
||||
"administration",
|
||||
"system",
|
||||
"server"
|
||||
],
|
||||
"homepage": "http://github.com/kaeza/minetest-xban2.git",
|
||||
"authors": [
|
||||
"Diego Martínez <lkaezadl3@yahoo.com>"
|
||||
],
|
||||
"license": "BSD 2-Clause"
|
||||
}
|
0
mods/xban2/dbimport.lua
Executable file → Normal file
0
mods/xban2/dbimport.lua
Executable file → Normal file
0
mods/xban2/doc/API.md
Executable file → Normal file
0
mods/xban2/doc/API.md
Executable file → Normal file
0
mods/xban2/doc/dbformat.txt
Executable file → Normal file
0
mods/xban2/doc/dbformat.txt
Executable file → Normal file
154
mods/xban2/gui.lua
Executable file → Normal file
154
mods/xban2/gui.lua
Executable file → Normal file
@ -1,56 +1,118 @@
|
||||
|
||||
local FORMNAME = "xban2:main"
|
||||
local MAXLISTSIZE = 100
|
||||
|
||||
local states = { }
|
||||
|
||||
local table_insert, table_concat =
|
||||
table.insert, table.concat
|
||||
local strfind, format = string.find, string.format
|
||||
|
||||
local ESC = minetest.formspec_escape
|
||||
|
||||
local function make_fs(name)
|
||||
local state = states[name]
|
||||
if not state then return end
|
||||
local list, index, filter = state.list, state.index, state.filter
|
||||
if index > #list then
|
||||
index = #list
|
||||
end
|
||||
local fs = {
|
||||
"size[10,8]",
|
||||
"label[0.5,0.6;Filter]",
|
||||
"field[1.5,0.5;6,2;filter;;"..ESC(filter).."]",
|
||||
"button[7.5,0.5;2,1;search;Search]",
|
||||
}
|
||||
table_insert(fs,
|
||||
("textlist[0.5,2;3,5.5;player;%s;%d;0]"):
|
||||
format(table_concat(list, ","), index))
|
||||
local record_name = list[index]
|
||||
if record_name then
|
||||
local record, err = xban.get_record(record_name)
|
||||
if record then
|
||||
local reclist = { }
|
||||
for _, r in ipairs(record) do
|
||||
table_insert(reclist, ESC(r))
|
||||
local function make_list(filter)
|
||||
filter = filter or ""
|
||||
local list, n, dropped = { }, 0, false
|
||||
for k in pairs(minetest.auth_table) do
|
||||
if strfind(k, filter, 1, true) then
|
||||
if n >= MAXLISTSIZE then
|
||||
dropped = true
|
||||
break
|
||||
end
|
||||
table_insert(fs,
|
||||
("textlist[4,2;5,5.5;entry;%s;0;0]"):
|
||||
format(table_concat(reclist, ",")))
|
||||
else
|
||||
table_insert(fs,
|
||||
"textlist[4,2;5,5.5;entry;"..ESC(err)..";0]")
|
||||
n=n+1 list[n] = k
|
||||
end
|
||||
end
|
||||
return table_concat(fs)
|
||||
table.sort(list)
|
||||
return list, dropped
|
||||
end
|
||||
|
||||
local states = { }
|
||||
|
||||
local function get_state(name)
|
||||
local state = states[name]
|
||||
if not state then
|
||||
state = { index=1, filter="" }
|
||||
states[name] = state
|
||||
state.list, state.dropped = make_list()
|
||||
end
|
||||
return state
|
||||
end
|
||||
|
||||
local function get_record_simple(name)
|
||||
local e = xban.find_entry(name)
|
||||
if not e then
|
||||
return nil, ("No entry for `%s'"):format(name)
|
||||
elseif (not e.record) or (#e.record == 0) then
|
||||
return nil, ("`%s' has no ban records"):format(name)
|
||||
end
|
||||
local record = { }
|
||||
for _, rec in ipairs(e.record) do
|
||||
local msg = (os.date("%Y-%m-%d %H:%M:%S", rec.time).." | "
|
||||
..(rec.reason or "No reason given."))
|
||||
table.insert(record, msg)
|
||||
end
|
||||
return record, e.record
|
||||
end
|
||||
|
||||
local function make_fs(name)
|
||||
local state = get_state(name)
|
||||
local list, filter = state.list, state.filter
|
||||
local pli, ei = state.player_index or 1, state.entry_index or 0
|
||||
if pli > #list then
|
||||
pli = #list
|
||||
end
|
||||
local fs = {
|
||||
"size[16,12]",
|
||||
"label[0,-.1;Filter]",
|
||||
"field[1.5,0;12.8,1;filter;;"..ESC(filter).."]",
|
||||
"button[14,-.3;2,1;search;Search]",
|
||||
}
|
||||
local fsn = #fs
|
||||
fsn=fsn+1 fs[fsn] = format("textlist[0,.8;4,9.3;player;%s;%d;0]",
|
||||
table.concat(list, ","), pli)
|
||||
local record_name = list[pli]
|
||||
if record_name then
|
||||
local record, e = get_record_simple(record_name)
|
||||
if record then
|
||||
for i, r in ipairs(record) do
|
||||
record[i] = ESC(r)
|
||||
end
|
||||
fsn=fsn+1 fs[fsn] = format(
|
||||
"textlist[4.2,.8;11.7,9.3;entry;%s;%d;0]",
|
||||
table.concat(record, ","), ei)
|
||||
local rec = e[ei]
|
||||
if rec then
|
||||
fsn=fsn+1 fs[fsn] = format("label[0,10.3;%s]",
|
||||
ESC("Source: "..(rec.source or "<none>")
|
||||
.."\nTime: "..os.date("%c", rec.time)
|
||||
.."\n"..(rec.expires and
|
||||
os.date("%c", rec.expires) or "")),
|
||||
pli)
|
||||
end
|
||||
else
|
||||
fsn=fsn+1 fs[fsn] = "textlist[4.2,.8;11.7,9.3;err;"..ESC(e)..";0]"
|
||||
fsn=fsn+1 fs[fsn] = "label[0,10.3;"..ESC(e).."]"
|
||||
end
|
||||
else
|
||||
local e = "No entry matches the query."
|
||||
fsn=fsn+1 fs[fsn] = "textlist[4.2,.8;11.7,9.3;err;"..ESC(e)..";0]"
|
||||
fsn=fsn+1 fs[fsn] = "label[0,10.3;"..ESC(e).."]"
|
||||
end
|
||||
return table.concat(fs)
|
||||
end
|
||||
|
||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
if formname ~= FORMNAME then return end
|
||||
local name = player:get_player_name()
|
||||
local state = states[name]
|
||||
local state = get_state(name)
|
||||
if fields.player then
|
||||
local t = minetest.explode_textlist_event(fields.player)
|
||||
if (t.type == "CHG") or (t.type == "DCL") then
|
||||
state.index = t.index
|
||||
state.player_index = t.index
|
||||
minetest.show_formspec(name, FORMNAME, make_fs(name))
|
||||
end
|
||||
return
|
||||
end
|
||||
if fields.entry then
|
||||
local t = minetest.explode_textlist_event(fields.entry)
|
||||
if (t.type == "CHG") or (t.type == "DCL") then
|
||||
state.entry_index = t.index
|
||||
minetest.show_formspec(name, FORMNAME, make_fs(name))
|
||||
end
|
||||
return
|
||||
@ -58,14 +120,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
if fields.search then
|
||||
local filter = fields.filter or ""
|
||||
state.filter = filter
|
||||
local list = { }
|
||||
state.list = list
|
||||
for k in pairs(minetest.auth_table) do
|
||||
if k:find(filter, 1, true) then
|
||||
table_insert(list, k)
|
||||
end
|
||||
end
|
||||
table.sort(list)
|
||||
state.list = make_list(filter)
|
||||
minetest.show_formspec(name, FORMNAME, make_fs(name))
|
||||
end
|
||||
end)
|
||||
@ -74,17 +129,6 @@ minetest.register_chatcommand("xban_gui", {
|
||||
description = "Show XBan GUI",
|
||||
params = "",
|
||||
func = function(name, params)
|
||||
local state = states[name]
|
||||
if not state then
|
||||
state = { index=1, filter="" }
|
||||
states[name] = state
|
||||
local list = { }
|
||||
state.list = list
|
||||
for k in pairs(minetest.auth_table) do
|
||||
table_insert(list, k)
|
||||
end
|
||||
table.sort(list)
|
||||
end
|
||||
minetest.show_formspec(name, FORMNAME, make_fs(name))
|
||||
end,
|
||||
})
|
||||
|
0
mods/xban2/importers/minetest.lua
Executable file → Normal file
0
mods/xban2/importers/minetest.lua
Executable file → Normal file
0
mods/xban2/importers/v1.lua
Executable file → Normal file
0
mods/xban2/importers/v1.lua
Executable file → Normal file
0
mods/xban2/importers/v2.lua
Executable file → Normal file
0
mods/xban2/importers/v2.lua
Executable file → Normal file
8
mods/xban2/init.lua
Executable file → Normal file
8
mods/xban2/init.lua
Executable file → Normal file
@ -283,8 +283,12 @@ local function save_db()
|
||||
local f, e = io.open(DB_FILENAME, "wt")
|
||||
db.timestamp = os.time()
|
||||
if f then
|
||||
local ok = f:write(xban.serialize(db))
|
||||
WARNING("Unable to save database: %s", "Write failed")
|
||||
local ok, err = f:write(xban.serialize(db))
|
||||
if not ok then
|
||||
WARNING("Unable to save database: %s", err)
|
||||
end
|
||||
else
|
||||
WARNING("Unable to save database: %s", e)
|
||||
end
|
||||
if f then f:close() end
|
||||
return
|
||||
|
0
mods/xban2/serialize.lua
Executable file → Normal file
0
mods/xban2/serialize.lua
Executable file → Normal file
Loading…
Reference in New Issue
Block a user