-
Notifications
You must be signed in to change notification settings - Fork 8
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
2 changed files
with
93 additions
and
101 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,40 +1,93 @@ | ||
--luacheck: no_unused_args | ||
|
||
--[[ TODO: | ||
* Move rest of password stuff from chatcommands. | ||
* Possibly also move channel invitation commands here. | ||
* Add simple channel ACLs. Invite command to add users, kick command to remove users. | ||
* Build simple RBAC on top of that to allow multiple managers / role based permissions for users. | ||
--]] | ||
|
||
beerchat.register_callback('after_joinplayer', function(player) | ||
-- CHECK ACTIVE CHANNEL ACL HERE AND TAKE ACTION IF NEEDED | ||
end) | ||
|
||
beerchat.register_callback('before_invite', function(name, recipient, channel) | ||
-- INJECT EVERYTHING THAT IS REQUIRED TO HAVE FULL ACCESS TO CHANNEL SO THAT | ||
-- PLAYERS WITH THE FORCE CAN MOVE ANYONE TO ANY CHANNEL, ALSO TO LOCKED CHANNELS. | ||
end) | ||
|
||
beerchat.register_callback('before_join', function(name, channel_name, options) | ||
local channel = beerchat.channels[channel_name] | ||
if channel.password and channel.password ~= "" then | ||
if not options or not options.password or options.password == "" then | ||
return false, "ERROR: This channel requires that you supply a password. " | ||
.. "Supply it in the following format: /jc my channel,password01" | ||
end | ||
if options.password ~= channel.password then | ||
return false, "ERROR: Invalid password." | ||
end | ||
end | ||
end) | ||
|
||
beerchat.register_callback('before_switch_chan', function(name, oldchannel, newchannel) | ||
-- COULD BE USED TO REVALIDATE ACCESS IF NEEDED, PROBABLY NOT NEEDED | ||
-- IF KICKING PLAYERS FROM CHANNELS IS ALSO ADDED. | ||
end) | ||
|
||
beerchat.register_callback('on_forced_join', function(name, target, channel, from_channel) | ||
-- INJECT EVERYTHING THAT IS REQUIRED TO HAVE FULL ACCESS TO CHANNEL SO THAT | ||
-- PLAYERS WITH THE FORCE CAN MOVE ANYONE TO ANY CHANNEL, ALSO TO LOCKED CHANNELS. | ||
end) | ||
--luacheck: no_unused_args | ||
|
||
--[[ TODO: | ||
* Move rest of password stuff from chatcommands. | ||
* Possibly also move channel invitation commands here. | ||
* Add simple channel ACLs. Invite command to add users, kick command to remove users. | ||
* Build simple RBAC on top of that to allow multiple managers / role based permissions for users. | ||
--]] | ||
|
||
local channel_invitation_string = "|#${channel_name}| Channel invite from ${from_player}, to join the channel, " | ||
.. "do /jc ${channel_name} after which you can send messages to the channel via #${channel_name} message" | ||
local channel_invited_string = "|#${channel_name}| Invite sent to ${to_player}" | ||
local channel_invite_sound = "beerchat_chirp" -- Sound when sending / receiving an invite to a channel | ||
|
||
local invite_channel = { | ||
params = "<Channel Name>,<Player Name>", | ||
description = "Invite player named <Player Name> to channel named <Channel Name>. " | ||
.. "You must be the owner of the channel in order to invite others.", | ||
func = function(name, param) | ||
if not param or param == "" then | ||
return false, "ERROR: Invalid number of arguments. Please supply the channel " | ||
.. "name and the player name." | ||
end | ||
|
||
local channel_name, recipient = string.match(param, "#?(.*),(.*)") | ||
if not channel_name or channel_name == "" then | ||
return false, "ERROR: Channel name is empty." | ||
elseif not recipient or recipient == "" then | ||
return false, "ERROR: Player name not supplied or empty." | ||
elseif not beerchat.execute_callbacks('before_invite', name, recipient, channel_name) then | ||
return true -- Assume that callback handler already handled error messages | ||
end | ||
|
||
if beerchat.allow_private_message(name, recipient) then | ||
-- Message to player who was invited to channel | ||
beerchat.sound_play(recipient, channel_invite_sound) | ||
minetest.chat_send_player(recipient, beerchat.format_message(channel_invitation_string, { | ||
channel_name = channel_name, | ||
from_player = name | ||
})) | ||
end | ||
-- Feedback to player who ran command and invited other player | ||
beerchat.sound_play(name, channel_invite_sound) | ||
minetest.chat_send_player(name, beerchat.format_message(channel_invited_string, { | ||
channel_name = channel_name, | ||
to_player = recipient | ||
})) | ||
end | ||
} | ||
|
||
minetest.register_chatcommand("ic", invite_channel) | ||
minetest.register_chatcommand("invite_channel", invite_channel) | ||
|
||
-- | ||
-- ACL core functionality | ||
-- | ||
|
||
beerchat.register_callback('after_joinplayer', function(player) | ||
-- CHECK ACTIVE CHANNEL ACL HERE AND TAKE ACTION IF NEEDED | ||
end) | ||
|
||
beerchat.register_callback('before_invite', function(name, recipient, channel) | ||
-- INJECT EVERYTHING THAT IS REQUIRED TO HAVE FULL ACCESS TO CHANNEL SO THAT | ||
-- PLAYERS WITH THE FORCE CAN MOVE ANYONE TO ANY CHANNEL, ALSO TO LOCKED CHANNELS. | ||
if not beerchat.channels[channel] then | ||
return false, "ERROR: Channel #" .. channel .. " does not exist." | ||
elseif name ~= beerchat.channels[channel].owner then | ||
return false, "ERROR: You are not the owner of channel " .. channel .. "." | ||
end | ||
end) | ||
|
||
beerchat.register_callback('before_join', function(name, channel_name, options) | ||
local channel = beerchat.channels[channel_name] | ||
if channel.password and channel.password ~= "" then | ||
if not options or not options.password or options.password == "" then | ||
return false, "ERROR: This channel requires that you supply a password. " | ||
.. "Supply it in the following format: /jc my channel,password01" | ||
end | ||
if options.password ~= channel.password then | ||
return false, "ERROR: Invalid password." | ||
end | ||
end | ||
end) | ||
|
||
beerchat.register_callback('before_switch_chan', function(name, oldchannel, newchannel) | ||
-- COULD BE USED TO REVALIDATE ACCESS IF NEEDED, PROBABLY NOT NEEDED | ||
-- IF KICKING PLAYERS FROM CHANNELS IS ALSO ADDED. | ||
end) | ||
|
||
beerchat.register_callback('on_forced_join', function(name, target, channel, from_channel) | ||
-- INJECT EVERYTHING THAT IS REQUIRED TO HAVE FULL ACCESS TO CHANNEL SO THAT | ||
-- PLAYERS WITH THE FORCE CAN MOVE ANYONE TO ANY CHANNEL, ALSO TO LOCKED CHANNELS. | ||
end) |