From d6b82546eb4300e89799f5899dee6c01a0f9c23e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20P=C3=A9rez-Cerezo?= Date: Wed, 22 Apr 2020 03:13:47 +0200 Subject: Clean up code, add moderator commands --- init.lua | 184 +++++++++++++++++++++++++++++++++++++-------------------------- 1 file 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 = " ", description = "Create a channel named with optional and hexadecimal ".. - "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 = "", 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 = "", + 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 = "", + 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) + + + -- cgit v1.2.3