123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 |
- -- chat3/ignore.lua
- chat3.ignore = {}
- local storage = chat3.storage
- ---
- --- Functions (API)
- ---
- -- [function] Get ignore list
- function chat3.ignore.get(name)
- local list = storage:get_string("ignore_list_"..name)
- if list then
- list = minetest.deserialize(list)
- end
- if not list or not list.ignoring or not list.ignored_by then
- list = {ignoring = {}, ignored_by = {}}
- end
- return list
- end
- -- [function] Set ignore list
- function chat3.ignore.set(name, list)
- storage:set_string("ignore_list_"..name, minetest.serialize(list))
- end
- -- [function] Add name to list
- function chat3.ignore.add_name(name, ignore)
- -- Update ignoring
- local list = chat3.ignore.get(name)
- list.ignoring[ignore] = true
- chat3.ignore.set(name, list)
- -- Update ignored_by
- list = chat3.ignore.get(ignore)
- list.ignored_by[name] = true
- chat3.ignore.set(ignore, list)
- return true
- end
- -- [function] Remove name from list
- function chat3.ignore.remove_name(name, unignore)
- -- Update ignoring
- local list = chat3.ignore.get(name)
- list.ignoring[unignore] = nil
- chat3.ignore.set(name, list)
- -- Update ignored_by
- list = chat3.ignore.get(unignore)
- list.ignored_by[name] = nil
- chat3.ignore.set(unignore, list)
- return true
- end
- -- [function] Clear ignore list
- function chat3.ignore.clear(name)
- local list = chat3.ignore.get(name)
- -- Clear resulting ignored_by entries and notify
- for t, i in pairs(list.ignoring) do
- local tlist = chat3.ignore.get(t)
- tlist.ignored_by[name] = nil
- chat3.ignore.set(t, tlist)
- minetest.chat_send_player(t, chat3.colorize(t, "#00ff00", name..
- " is no longer ignoring you."))
- list.ignoring[t] = nil
- end
- chat3.ignore.set(name, list)
- return true
- end
- -- [function] Can ignore
- function chat3.ignore.can(name, check)
- local priv = minetest.check_player_privs(check, "ignore_override")
- if not priv and minetest.settings:get("name") ~= check and name ~= check then
- return true
- else
- chat3.ignore.remove_name(name, check)
- end
- end
- -- [function] Is Ignoring
- function chat3.ignore.is(name, check)
- if name == check then
- return false
- else
- local list = chat3.ignore.get(check).ignored_by
- return list[name] and chat3.ignore.can(name, check)
- end
- end
- -- [function] Ignore
- function chat3.ignore.add(name, ignore)
- if chat3.ignore.can(name, ignore) then
- if chat3.ignore.get(name).ignoring[ignore] then
- return false, "You are already ignoring "..ignore.."."
- else
- chat3.ignore.add_name(name, ignore)
- -- Notify ignored player
- --[[if minetest.get_player_by_name(ignore) then
- minetest.chat_send_player(ignore, chat3.colorize(ignore, "red", name..
- " is now ignoring you."))
- end
- --]]
- return true, "Added "..ignore.." to your ignore list."
- end
- else
- return false, "You cannot ignore "..ignore.."."
- end
- end
- -- [function] Unignore
- function chat3.ignore.remove(name, unignore)
- if chat3.ignore.get(name).ignoring[unignore] then
- chat3.ignore.remove_name(name, unignore)
- -- Notify unignored player
- if minetest.get_player_by_name(unignore) then
- minetest.chat_send_player(unignore, chat3.colorize(unignore, "#00ff00",
- name.." is no longer ignoring you."))
- end
- return true, "Removed "..unignore.." from your ignore list."
- else
- return false, unignore.." is already not on your ignore list."
- end
- end
- -- [function] Check Ignore (verbose [chat] version if Is Ignoring)
- function chat3.ignore.check(name, check)
- minetest.log("chat3.ignore.check: "..name..", "..check)
- if chat3.ignore.is(name, check) then
- return true, "You are being ignored by "..name.."."
- else
- return false, name.." is not ignoring you."
- end
- end
- -- [function] List Ignored Players (returns a table suitable for use with table.concat)
- function chat3.ignore.list(name, subtable)
- local list, result = chat3.ignore.get(name)[subtable], {}
- if list then
- for ignored, i in pairs(list) do
- table.insert(result, ignored)
- end
- if #result > 0 then
- return result
- end
- end
- end
- ---
- --- Registrations
- ---
- -- [event] Show list of people ignoring you on join
- --[[
- minetest.register_on_joinplayer(function(player)
- local name = player:get_player_name()
- local list = chat3.ignore.list(name, "ignored_by")
- if list then
- local p = "players"
- if #list == 1 then
- p = "player"
- end
- minetest.chat_send_player(name, string.format(
- "You are being ignored by %i %s: %s.", #list, p,
- table.concat(list, ", ")))
- end
- end)
- --]]
- -- [privilege] Ignore Override
- minetest.register_privilege("ignore_override", {
- description = "Prevent players from ignoring anyone with this privilege.",
- give_to_singleplayer = false,
- })
- -- [chatcommand] Ignore
- minetest.register_chatcommand("ignore", {
- description = "Ignore players",
- params = "[list | by | add | del | rst | check] [<player username>]",
- func = function(name, params)
- params = params:split(" ")
- local operation, target = params[1], params[2]
- local invalid = "Invalid parameters (see /help ignore)"
- if operation and operation ~= "" then
- if operation == "list" then
- local list = chat3.ignore.list(name, "ignoring")
- if list then
- return true, "Ignored Players: "..table.concat(list, ", ").."."
- else
- return false, "You are not ignoring any players."
- end
- elseif operation == "by" then
- local list = chat3.ignore.list(name, "ignored_by")
- if list then
- return true, "You are being ignored by: "..table.concat(list, ", ").."."
- else
- return false, "You are not being ignored by any players."
- end
- elseif operation == "add" and target and target ~= "" then
- return chat3.ignore.add(name, target)
- elseif operation == "del" and target and target ~= "" then
- return chat3.ignore.remove(name, target)
- elseif operation == "check" and target and target ~= "" then
- return chat3.ignore.check(target, name)
- elseif operation == "rst" then
- chat3.ignore.clear(name)
- return true, "Cleared your ignore list."
- else
- return false, invalid
- end
- else
- return false, invalid
- end
- end,
- })
|