aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabriel Pérez-Cerezo <gabriel@gpcf.eu>2020-04-22 03:13:47 +0200
committerGabriel Pérez-Cerezo <gabriel@gpcf.eu>2020-04-22 03:13:47 +0200
commitd6b82546eb4300e89799f5899dee6c01a0f9c23e (patch)
tree7f84abd75c74666da77b551e756f55131f995ff2
parenta900fd834c1fde07726d0bb18aa982587a35c827 (diff)
downloadbeerchat-d6b82546eb4300e89799f5899dee6c01a0f9c23e.tar.gz
beerchat-d6b82546eb4300e89799f5899dee6c01a0f9c23e.tar.bz2
beerchat-d6b82546eb4300e89799f5899dee6c01a0f9c23e.zip
Clean up code, add moderator commands
-rw-r--r--init.lua184
1 files changed, 107 insertions, 77 deletions
diff --git a/init.lua b/init.lua
index 29507aa..d904860 100644
--- a/init.lua
+++ b/init.lua
@@ -38,20 +38,52 @@ local whisper_color = "#aaaaaa" -- Whisper color override
-- ${message} the actual message that is to be sent
-- ${time} the current time in 24 hour format, as returned from os.date("%X")
--
-local channel_invitation_string = "|#${channel_name}| Channel invite from (${from_player}), to join the channel, do /jc ${channel_name} ${channel_password} 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_created_string = "|#${channel_name}| Channel created"
-local channel_deleted_string = "|#${channel_name}| Channel deleted"
-local channel_joined_string = "|#${channel_name}| Joined channel"
-local channel_left_string = "|#${channel_name}| Left channel"
-local channel_already_deleted_string = "|#${channel_name}| Channel seems to have already been deleted, will unregister channel from your list of channels"
+local channel_prefix = "|#${channel_name}| "
+local main_prefix = ""
+local channel_invitation_string = channel_prefix.."Channel invite from (${from_player}), to join the channel, do /jc ${channel_name} ${channel_password} after which you can send messages to the channel via #${channel_name}: message"
+local channel_invited_string = channel_prefix.."Invite sent to ${to_player}"
+local channel_created_string = channel_prefix.."Channel created"
+local channel_deleted_string = channel_prefix.."Channel deleted"
+local channel_joined_string = channel_prefix.."Joined channel"
+local channel_left_string = channel_prefix.."Left channel"
+local channel_already_deleted_string = channel_prefix.."Channel seems to have already been deleted, will unregister channel from your list of channels"
local private_message_string = "[PM] from (${from_player}) ${message}"
local self_message_string = "(${from_player} utters to him/ herself) ${message}"
local private_message_sent_string = "[PM] sent to @(${to_player}) ${message}"
-local me_message_string = "|#${channel_name}| * ${from_player} ${message}"
-local channel_message_string = "|#${channel_name}| <${from_player}> ${message}"
-local main_channel_message_string = "<${from_player}> ${message}"
-local whisper_string = "|#${channel_name}| <${from_player}> whispers: ${message}"
+local me_message_string = "* ${from_player} ${message}"
+local message_string = "<${from_player}> ${message}"
+local whisper_string = "<${from_player}> whispers: ${message}"
+
+beerchat = {}
+
+beerchat.get_channel_members= function (channel_name)
+ local members = {}
+ for _,player in ipairs(minetest.get_connected_players()) do
+ local target = player:get_player_name()
+ if playersChannels[target][channel_name] then
+ members[#members+1] = target
+ end
+ end
+ return members
+end
+
+
+beerchat.send_message= function (channel_name, name, str, message ,sound)
+ for _,player in ipairs(minetest.get_connected_players()) do
+ local target = player:get_player_name()
+ -- Checking if the target is in this channel
+ if playersChannels[target][channel_name] then
+ if not minetest.get_player_by_name(target):get_attribute("beerchat:muted:"..name) then
+ if channel_name == main_channel_name then
+ minetest.chat_send_player(target, format_message(main_prefix .. str, { channel_name = channel_name, from_player = name, message = message }))
+ else
+ minetest.chat_send_player(target, format_message(channel_prefix .. str, { channel_name = channel_name, from_player = name, message = message }))
+ end
+ end
+ end
+ end
+end
+
function format_message(s, tab)
local owner
@@ -96,6 +128,26 @@ channels[main_channel_name] = { owner = main_channel_owner, color = main_channel
playersChannels = {}
local currentPlayerChannel = {}
+beerchat.is_moderator = function(pname)
+ local has = minetest.check_player_privs(pname, { kick = true })
+ return has
+end
+
+beerchat.mod_message = function(pname, prefix, color, text_color ,message)
+ minetest.chat_send_all(minetest.colorize("#ccf", "[ "..pname.." ] ").. minetest.colorize(color, prefix..": ") ..minetest.colorize(text_color,message))
+end
+
+beerchat.get_current_channel = function(pname)
+ local channel_name = currentPlayerChannel[pname]
+ if not channels[channel_name] then
+ minetest.chat_send_player(pname, "Channel "..channel_name.." does not exist, switching back to "..main_channel_name..". Please resend your message")
+ currentPlayerChannel[pname] = main_channel_name
+ minetest.get_player_by_name(pname):set_attribute("beerchat:current_channel", main_channel_name)
+ return main_channel_name
+ end
+ return channel_name
+end
+
minetest.register_on_joinplayer(function(player)
local str = player:get_attribute("beerchat:channels")
if str and str ~= "" then
@@ -125,7 +177,7 @@ end)
local create_channel = {
params = "<Channel Name> <Password (optional)> <Color (optional, default is #ffffff)>",
description = "Create a channel named <Channel Name> with optional <Password> and hexadecimal <Color> "..
- "starting with # (e.g. #00ff00 for green). Use spaces to separate the arguments."
+ "starting with # (e.g. #00ff00 for green). Use spaces to separate the arguments.",
func = function(lname, param)
local lowner = lname
@@ -221,21 +273,24 @@ local delete_channel = {
end
}
+local function pp(tab)
+ -- pretty print
+ ret = ""
+ for k,v in pairs(tab) do
+ ret = ret.."\n"..k..":\t"..v
+ end
+ return ret
+end
+
local my_channels = {
params = "<Channel Name optional>",
description = "List the channels you have joined or are the owner of, or show channel information when passing channel name as argument",
func = function(name, param)
if not param or param == "" then
- if enable_sounds then
- minetest.sound_play(channel_management_sound, { to_player = name, gain = 1.0 } )
- end
- minetest.chat_send_player(name, dump2(playersChannels[name]))
+ minetest.chat_send_player(name, pp(playersChannels[name]))
else
if playersChannels[name][param] then
- if enable_sounds then
- minetest.sound_play(channel_management_sound, { to_player = name, gain = 1.0 } )
- end
- minetest.chat_send_player(name, dump2(channels[param]))
+ minetest.chat_send_player(name, pp(channels[param]))
else
minetest.chat_send_player(name, "ERROR: Channel not in your channel list")
return false
@@ -396,6 +451,24 @@ local unmute_player = {
end
}
+local mod_info = {
+ params = "<message>",
+ description = "Send a moderator message",
+ privs = { kick = true },
+ func = function(name, param)
+ beerchat.mod_message(name, "MODERATOR INFO", "#d0ff00", "#dfdfff",param)
+ end
+}
+local mod_warning = {
+ params = "<message>",
+ description = "Send a moderator warning",
+ privs = { kick = true },
+ func = function(name, param)
+ beerchat.mod_message(name, "MODERATOR WARNING", "#ffdf00", "#ff7fff", param)
+ end
+}
+
+
minetest.register_chatcommand("cc", create_channel)
minetest.register_chatcommand("create_channel", create_channel)
minetest.register_chatcommand("dc", delete_channel)
@@ -404,6 +477,9 @@ minetest.register_chatcommand("delete_channel", delete_channel)
minetest.register_chatcommand("mc", my_channels)
minetest.register_chatcommand("my_channels", my_channels)
+minetest.register_chatcommand("mi", mod_info)
+minetest.register_chatcommand("mw", mod_warning)
+
minetest.register_chatcommand("jc", join_channel)
minetest.register_chatcommand("join_channel", join_channel)
minetest.register_chatcommand("lc", leave_channel)
@@ -534,7 +610,7 @@ local me_override = {
description = "Send message in the \"* player message\" format, e.g. /me eats pizza becomes |#"..main_channel_name.."| * Player01 eats pizza",
func = function(name, param)
local msg = param
- local channel_name = main_channel_name
+ local channel_name = beerchat.get_current_channel(name)
if not channels[channel_name] then
minetest.chat_send_player(name, "Channel "..channel_name.." does not exist")
elseif msg == "" then
@@ -542,15 +618,7 @@ local me_override = {
elseif not playersChannels[name][channel_name] then
minetest.chat_send_player(name, "You need to join this channel in order to be able to send messages to it")
else
- for _,player in ipairs(minetest.get_connected_players()) do
- local target = player:get_player_name()
- -- Checking if the target is in this channel
- if playersChannels[target][channel_name] then
- if not minetest.get_player_by_name(target):get_attribute("beerchat:muted:"..name) then
- minetest.chat_send_player(target, format_message(me_message_string, { channel_name = channel_name, from_player = name, message = msg }))
- end
- end
- end
+ beerchat.send_message(channel_name, name, me_message_string, msg)
end
return true
end
@@ -585,22 +653,7 @@ minetest.register_on_chat_message(function(name, message)
channel_name = hashchat_lastrecv[name]
end
if channel_name and channel_name ~= "" then
- for _,player in ipairs(minetest.get_connected_players()) do
- local target = player:get_player_name()
- -- Checking if the target is in this channel
- if playersChannels[target][channel_name] then
- if not minetest.get_player_by_name(target):get_attribute("beerchat:muted:"..name) then
- if channel_name == main_channel_name then
- minetest.chat_send_player(target, format_message(main_channel_message_string, { channel_name = channel_name, from_player = name, message = msg }))
- else
- minetest.chat_send_player(target, format_message(channel_message_string, { channel_name = channel_name, from_player = name, message = msg }))
- if enable_sounds then
- minetest.sound_play(channel_message_sound, { to_player = target, gain = 1.0 } )
- end
- end
- end
- end
- end
+ beerchat.send_message(channel_name, name, message_string, msg)
-- Register the chat in the target persons last spoken to table
hashchat_lastrecv[name] = channel_name
else
@@ -651,7 +704,7 @@ minetest.register_on_chat_message(function(name, message)
else
local pl = minetest.get_player_by_name(name)
local all_objects = minetest.get_objects_inside_radius({x=pl:getpos().x, y=pl:getpos().y, z=pl:getpos().z}, radius)
-
+
for _,player in ipairs(all_objects) do
if player:is_player() then
local target = player:get_player_name()
@@ -671,39 +724,16 @@ minetest.register_on_chat_message(function(name, message)
end)
minetest.register_on_chat_message(function(name, message)
- local msg = message
- local channel_name = currentPlayerChannel[name]
-
- if not channels[channel_name] then
- minetest.chat_send_player(name, "Channel "..channel_name.." does not exist, switching back to "..main_channel_name..". Please resend your message")
- currentPlayerChannel[name] = main_channel_name
- minetest.get_player_by_name(name):set_attribute("beerchat:current_channel", main_channel_name)
- return true
- end
-
- if not channels[channel_name] then
- minetest.chat_send_player(name, "Channel "..channel_name.." does not exist")
- elseif msg == "" then
+ channel_name = beerchat.get_current_channel(name)
+ if msg == "" then
minetest.chat_send_player(name, "Please enter the message you would like to send to the channel")
elseif not playersChannels[name][channel_name] then
minetest.chat_send_player(name, "You need to join this channel in order to be able to send messages to it")
else
- for _,player in ipairs(minetest.get_connected_players()) do
- local target = player:get_player_name()
- -- Checking if the target is in this channel
- if playersChannels[target][channel_name] then
- if not minetest.get_player_by_name(target):get_attribute("beerchat:muted:"..name) then
- if channel_name == main_channel_name then
- minetest.chat_send_player(target, format_message(main_channel_message_string, { channel_name = channel_name, from_player = name, message = message }))
- else
- minetest.chat_send_player(target, format_message(channel_message_string, { channel_name = channel_name, from_player = name, message = message }))
- end
- if channel_name ~= main_channel_name and enable_sounds then
- minetest.sound_play(channel_message_sound, { to_player = target, gain = 1.0 } )
- end
- end
- end
- end
- end
+ beerchat.send_message(channel_name, name, message_string, message)
+ end
return true
end)
+
+
+