summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElias Fleckenstein <eliasfleckenstein@web.de>2021-09-13 16:15:50 +0200
committerElias Fleckenstein <eliasfleckenstein@web.de>2021-09-13 16:15:50 +0200
commit3f037bf26080729e0e3308d0b58820f9ac466d4f (patch)
tree480650104e67c2b6158cee59ed3e0243e2709e4b
parent07c7d01a1fcbdb369e474d296ad80cd4495f2a07 (diff)
downloadfurrybot-3f037bf26080729e0e3308d0b58820f9ac466d4f.tar.xz
Add operator commands
-rw-r--r--bot.lua8
-rw-r--r--http.lua1
-rw-r--r--init.lua6
-rw-r--r--nsfw.lua4
-rw-r--r--operator.lua68
5 files changed, 74 insertions, 13 deletions
diff --git a/bot.lua b/bot.lua
index c92e8f9..e756139 100644
--- a/bot.lua
+++ b/bot.lua
@@ -37,7 +37,7 @@ function furrybot.error_message(player, error, detail)
end
function furrybot.parse_message(player, message, discord)
- if message:find("!") == 1 then
+ if message:find("!") == 1 and not furrybot.ignored[player] then
local args = message:sub(2, #message):split(" ")
local cmd = table.remove(args, 1)
local func = furrybot.commands[cmd]
@@ -65,10 +65,10 @@ function furrybot.reload()
if not status then
furrybot = old_fb
- return false, furrybot.colors.error .. "Error: " .. furrybot.colors.detail .. init
+ furrybot.send("Error: " .. furrybot.colors.detail .. init, furrybot.colors.error)
end
else
- return false, furrybot.colors.error .. "Syntax error: " .. furrybot.colors.detail .. err
+ furrybot.send("Syntax error: " .. furrybot.colors.detail .. err, furrybot.colors.error)
end
end
@@ -201,7 +201,7 @@ end
return function(_http, _env, _storage)
http, env, storage = _http, _env, _storage
- for _, f in ipairs {"nsfw", "roleplay", "death", "economy", "random", "http"} do
+ for _, f in ipairs {"nsfw", "roleplay", "death", "economy", "random", "http", "operator"} do
local func, err = env.loadfile("clientmods/furrybot/" .. f .. ".lua")
if not func then
diff --git a/http.lua b/http.lua
index c6dd8b9..fc06d2c 100644
--- a/http.lua
+++ b/http.lua
@@ -55,4 +55,3 @@ furrybot.commands["8ball"] = furrybot.commands.question
return function(_http, _env, _storage)
http, env, storage = _http, _env, _storage
end
-
diff --git a/init.lua b/init.lua
index dcaf985..7579384 100644
--- a/init.lua
+++ b/init.lua
@@ -8,10 +8,4 @@ libclamity.register_on_chat_message(function(...)
furrybot.parse_message(...)
end)
-minetest.register_chatcommand("fbreload", {
- func = function()
- return furrybot.reload(http, env, storage)
- end
-})
-
loadfile(minetest.get_modpath("furrybot") .. "/bot.lua")()(http, env, storage)
diff --git a/nsfw.lua b/nsfw.lua
index c9e1d35..cfb462e 100644
--- a/nsfw.lua
+++ b/nsfw.lua
@@ -6,11 +6,11 @@ function furrybot.get_ascii_genitals(name, begin, middle, ending, seed)
end
function furrybot.get_ascii_dick(name)
- return minetest.rainbow(furrybot.get_ascii_genitals(name, "8", "=", "D", 69))
+ return minetest.rainbow(furrybot.get_ascii_genitals(name, "8", "=", "D", 31242))
end
function furrybot.get_ascii_boobs(name)
- return furrybot.get_ascii_genitals(name, "E", "Ξ", "3", 420)
+ return furrybot.get_ascii_genitals(name, "E", "Ξ", "3", 31243)
end
function furrybot.commands.dicksize(name, target)
diff --git a/operator.lua b/operator.lua
new file mode 100644
index 0000000..e668ac7
--- /dev/null
+++ b/operator.lua
@@ -0,0 +1,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