classroom/api.lua

120 lines
2.4 KiB
Lua

local _groups = {}
local _action_by_name = {}
local _actions = {}
function classroom.get_students()
local students = {}
for _, player in pairs(minetest.get_connected_players()) do
students[#students + 1] = player:get_player_name()
end
return students
end
function classroom.get_group_students(name)
local group = classroom.get_group(name)
if not group then
return nil
end
local students = {}
for _, student in pairs(group.students) do
if minetest.get_player_by_name(student) then
students[#students + 1] = student
end
end
return students
end
function classroom.get_students_except(students)
local student_by_name = {}
for _, name in pairs(students) do
student_by_name[name] = true
end
local retval = {}
for _, player in pairs(minetest.get_connected_players()) do
if not student_by_name[player:get_player_name()] and
true then --not minetest.check_player_privs(player, { teacher = true }) then
retval[#retval + 1] = player:get_player_name()
end
end
return retval
end
function classroom.get_all_groups()
return _groups
end
function classroom.get_group(name)
return _groups[name]
end
function classroom.create_group(name)
if _groups[name] then
return nil
end
local group = {
name = name,
students = {},
}
_groups[name] = group
return group
end
function classroom.add_student_to_group(name, student)
local group = classroom.get_group(name)
if group then
for i=1, #group.students do
if group.students[i] == student then
return
end
end
group.students[#group.students + 1] = student
end
end
function classroom.remove_student_from_group(name, student)
local group = classroom.get_group(name)
if group then
for i=1, #group.students do
if group.students[i] == student then
table.remove(group.students, i)
end
end
end
end
function classroom.register_action(name, def)
def.name = name
_action_by_name[name] = def
table.insert(_actions, def)
end
function classroom.get_actions()
return _actions
end
function classroom.get_students_by_selector(selector)
if selector == "*" then
return classroom.get_students()
elseif selector:sub(1, 6) == "group:" then
return classroom.get_group_students(selector:sub(7))
elseif selector:sub(1, 5) == "user:" then
return { selector:sub(6) }
else
return {}
end
end
function classroom.run_action(aname, runner, selector, params)
local action = _action_by_name[aname]
action.func(runner, classroom.get_students_by_selector(selector))
end