123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- -- tell/init.lua
- tell = {}
- local list = {}
- -- Choose command name
- local commandname = "tell"
- if minetest.get_modpath("mesecons_commandblock") then
- commandname = "tellafk"
- end
- -- [local function] Load
- local function load()
- local res = io.open(minetest.get_worldpath().."/tell.txt", "r")
- if res then
- res = minetest.deserialize(res:read("*all"))
- if type(res) == "table" then
- list = res
- end
- end
- end
- -- [local function] Save
- local function save()
- io.open(minetest.get_worldpath().."/tell.txt", "w"):write(minetest.serialize(list))
- end
- -- Load
- load()
- -- [register] On shutdown
- minetest.register_on_shutdown(save)
- -- [function] Add item
- function tell.add(name, from, msg)
- if not list[name] then
- list[name] = {}
- end
- list[name][#list[name] + 1] = {
- from = from,
- msg = msg,
- time = os.date("%I:%M %p on %B %d, %Y"),
- }
- minetest.log("action", dump(list))
- return #list[name] + 1
- end
- -- [function] Remove item
- function tell.remove(name, id)
- if list[name] and list[name][id] then
- list[name][id] = nil
- end
- end
- -- [function] Show messages
- function tell.show(name)
- if list and list[name] then
- for _, i in ipairs(list[name]) do
- minetest.chat_send_player(name, minetest.colorize("#ff5400", "Message from "
- ..i.from.." at "..i.time..": "..i.msg))
- -- Remove entry
- tell.remove(name, _)
- end
- end
- end
- -- [register] Chatcommand
- minetest.register_chatcommand(commandname, {
- description = "Send a message to an offline or AFK player",
- params = "<name> <message>",
- func = function(name, param)
- local sendto, msg = param:match("^(%S+)%s(.+)$")
- if not sendto or not msg then
- return false, "Invalid usage, see /help " .. commandname .. "."
- end
- minetest.log("action", "Tell from " .. name .. " to " .. sendto
- .. ": " .. msg)
- if tell.add(sendto, name, msg) then
- return true, "I'll pass that on when "..sendto.." is around."
- else
- return false, "Unknown error."
- end
- end,
- })
- -- [register] On join player
- minetest.register_on_joinplayer(function(player)
- local name = player:get_player_name()
- tell.show(name)
- end)
- -- [register] On chat message
- minetest.register_on_chat_message(function(name)
- tell.show(name)
- end)
|