summaryrefslogtreecommitdiff
path: root/operator.lua
blob: e668ac79f2f85ad066cd325f6295bd15698a385e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
local http, env, storage
local C = minetest.get_color_escape_sequence

function furrybot.is_operator(name)
	return name == minetest.localplayer:get_name() or furrybot.operators[name]
end

function furrybot.operator_command(cmd, func)
	furrybot.commands[cmd] = function (name, ...)
		if furrybot.is_operator(name) then
			func(name, ...)
		else
			furrybot.error_message(name, "Sorry, you need to be an operator run this command: ", cmd)
		end
	end
	furrybot.unsafe_commands[cmd] = true
end

function furrybot.status_command(cmd, list_name, title, status)
	furrybot.operator_command(cmd, function(name, target)
		if target then
			if furrybot[list_name][target] == status then
				furrybot.error_message(name, "Player " .. (status and "already" or "not") .. " " .. title .. ": ", target)
			else
				furrybot[list_name][target] = status
				storage:set_string(list_name, minetest.serialize(furrybot[list_name]))
				furrybot.ping_message(name, "Successfully " .. cmd .. (cmd:sub(#cmd, #cmd) == "e" and "" or "e") .. "d " .. target, furrybot.colors.system)
			end
		else
			furrybot.error_message(name, "You need to specify a player")
		end
	end)
end

function furrybot.list_command(list_name, title)
	return function()
		local names = {}

		for name in pairs(furrybot[list_name]) do
			table.insert(names, name)
		end

		furrybot.send("List of " .. title .. ": " .. table.concat(names, ", "), furrybot.colors.system)
	end
end

furrybot.operator_command("reload", function()
	furrybot.reload(http, env, storage)
end)

furrybot.operator_command("disconnect", function()
	minetest.disconnect()
end)

furrybot.status_command("op", "operators", "an operator", true)
furrybot.status_command("deop", "operators", "an operator", nil)
furrybot.commands.oplist = furrybot.list_command("operators", "operators")

furrybot.status_command("ignore", "ignored", "ignored", true)
furrybot.status_command("unignore", "ignored", "ignored", nil)
furrybot.commands.ignorelist = furrybot.list_command("ignored", "ignored players")

return function(_http, _env, _storage)
	http, env, storage = _http, _env, _storage

	furrybot.operators = minetest.deserialize(storage:get_string("operators")) or {}
	furrybot.ignored = minetest.deserialize(storage:get_string("ignored")) or {}
end