]> git.lizzy.rs Git - elidragon_v2.git/blob - mods/elidragon_request/init.lua
Add request API
[elidragon_v2.git] / mods / elidragon_request / init.lua
1 local request = {}
2
3 function request.register(def)
4         local sysname, description, progressive, preposition, func = def.name, def.description, def.progressive, def.func
5         local desc_capitalized = (description:sub(1, 1)):upper() .. description:sub(2)
6
7         local request_pool = {}
8
9         minetest.register_on_leaveplayer(function(name)
10                 request_pool[name] = nil
11         end)
12
13         local main_cmd = def.main_cmd or sysname
14
15         minetest.register_chatcommand(main_cmd, {
16                 description = "Request to " .. description .. " " .. preposition .. " another player",
17                 params = "<player>",
18                 func = function(name, param)
19                         if param == "" then
20                                 return false, "Usage: /" .. main_cmd .. " <player>"
21                         end
22                         if not minetest.get_player_by_name(param) then
23                                 return false, "There is no player by that name. Keep in mind this is case-sensitive, and the player must be online"
24                         end
25                         request_pool[param] = name
26                         minetest.after(60, function()
27                                 if request_pool[param] then
28                                         minetest.chat_send_player(name, "Request timed-out.")
29                                         minetest.chat_send_player(param, "Request timed-out.")
30                                         request_pool[param] = nil
31                                 end
32                         end)
33                         minetest.chat_send_player(param, name .. " is requesting to " .. description .. " " .. preposition .. " you. /" .. sysname .. "accept to accept")
34                         return true, desc_capitalized .. " request sent! It will timeout in 60 seconds."
35                 end
36         })
37
38         minetest.register_chatcommand(sysname .. "accept", {
39                 description = "Accept " .. description .. " request from another player",
40                 func = function(name)
41                         if not minetest.get_player_by_name(name) then return false, "You have to be online to use this command" end
42                         local other = request_pool[name]
43                         if not other then return false, "Usage: /" .. sysname .. "accept allows you to accept " .. description .. " requests sent to you by other players" end
44                         if not minetest.get_player_by_name(other) then return false, other .. " doesn't exist, or just disconnected/left (by timeout)." end
45                         minetest.chat_send_player(other, desc_capitalized .. " request accepted!")
46                         func(name, other)
47                         request_pool[name] = nil
48                         return true, other .. " is " .. progressive .. " " .. preposition .. " you."
49                 end
50         })
51
52         minetest.register_chatcommand(sysname .. "deny", {
53                 description = "Deny " .. description .." request from another player",
54                 func = function(name)
55                         local other = request_pool[name]
56                         if not other then return false, "Usage: /" .. sysname .. "deny allows you to deny " .. description .. " requests sent to you by other players." end
57                         minetest.chat_send_player(other, desc_capitalized .. " request denied.")
58                         request_pool[name] = nil
59                         return false, "You denied the " .. description .. " request " .. other .. " sent you."
60                 end
61         })
62 end
63
64 elidragon.request = request