diff --git a/chatcommands.lua b/chatcommands.lua index b8e969f..54ac1ca 100644 --- a/chatcommands.lua +++ b/chatcommands.lua @@ -1,12 +1,15 @@ local mod_storage = minetest.get_mod_storage() local channel_created_string = "|#${channel_name}| Channel created" -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_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_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_already_deleted_string = "|#${channel_name}| Channel seems to have already been deleted, " .. + "will unregister channel from your list of channels" local join_channel_sound = "beerchat_chirp" -- Sound when you join a channel local leave_channel_sound = "beerchat_chirp" -- Sound when you leave a channel @@ -26,7 +29,8 @@ local create_channel = { local str = string.split(param, ",") if #str > 3 then - return false, "ERROR: Invalid number of arguments. 4 parameters passed, maximum of 3 allowed: ,," + return false, "ERROR: Invalid number of arguments. 4 parameters passed, " .. + "maximum of 3 allowed: ,," end local lchannel_name = string.trim(str[1]) @@ -39,7 +43,8 @@ local create_channel = { end if beerchat.channels[lchannel_name] then - return false, "ERROR: Channel "..lchannel_name.." already exists, owned by player "..beerchat.channels[lchannel_name].owner + return false, "ERROR: Channel "..lchannel_name.." already exists, owned by player ".. + beerchat.channels[lchannel_name].owner end local arg2 = str[2] @@ -62,7 +67,10 @@ local create_channel = { mod_storage:set_string("channels", minetest.write_json(beerchat.channels)) beerchat.playersChannels[lowner][lchannel_name] = "owner" - minetest.get_player_by_name(lowner):set_attribute("beerchat:channels", minetest.write_json(beerchat.playersChannels[lowner])) + minetest.get_player_by_name(lowner):set_attribute( + "beerchat:channels", + minetest.write_json(beerchat.playersChannels[lowner]) + ) if beerchat.enable_sounds then minetest.sound_play(beerchat.channel_management_sound, { to_player = lowner, gain = 1.0 } ) end @@ -74,10 +82,9 @@ local create_channel = { local delete_channel = { params = "", - description = "Delete channel named . You must be the owner of the channel or you are not allowed to delete the channel", + description = "Delete channel named . " .. + "You must be the owner of the channel or you are not allowed to delete the channel", func = function(name, param) - local owner = name - if not param or param == "" then return false, "ERROR: Invalid number of arguments. Please supply the channel name" end @@ -99,7 +106,10 @@ local delete_channel = { mod_storage:set_string("channels", minetest.write_json(beerchat.channels)) beerchat.playersChannels[name][param] = nil - minetest.get_player_by_name(name):set_attribute("beerchat:channels", minetest.write_json(beerchat.playersChannels[name])) + minetest.get_player_by_name(name):set_attribute( + "beerchat:channels", + minetest.write_json(beerchat.playersChannels[name]) + ) if beerchat.enable_sounds then minetest.sound_play(beerchat.channel_management_sound, { to_player = name, gain = 1.0 } ) @@ -114,7 +124,8 @@ local delete_channel = { 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", + 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 beerchat.enable_sounds then @@ -138,7 +149,8 @@ local my_channels = { local join_channel = { params = ",", - description = "Join channel named . After joining you will see messages sent to that channel (in addition to the other channels you have joined)", + description = "Join channel named . " .. + "After joining you will see messages sent to that channel (in addition to the other channels you have joined)", func = function(name, param) if not param or param == "" then return false, "ERROR: Invalid number of arguments. Please supply the channel name as a minimum" @@ -157,7 +169,8 @@ local join_channel = { if beerchat.channels[channel_name].password and beerchat.channels[channel_name].password ~= "" then if #str == 1 then - return false, "ERROR: This channel requires that you supply a password. Supply it in the following format: /jc my channel,password01" + return false, "ERROR: This channel requires that you supply a password. " .. + "Supply it in the following format: /jc my channel,password01" end if str[2] ~= beerchat.channels[channel_name].password then return false, "ERROR: Invalid password" @@ -166,7 +179,11 @@ local join_channel = { beerchat.playersChannels[name] = beerchat.playersChannels[name] or {} beerchat.playersChannels[name][channel_name] = "joined" - minetest.get_player_by_name(name):set_attribute("beerchat:channels", minetest.write_json(beerchat.playersChannels[name])) + minetest.get_player_by_name(name):set_attribute( + "beerchat:channels", + minetest.write_json(beerchat.playersChannels[name]) + ) + if beerchat.enable_sounds then minetest.sound_play(join_channel_sound, { to_player = name, gain = 1.0 } ) end @@ -179,7 +196,9 @@ local join_channel = { local leave_channel = { params = "", - description = "Leave channel named . When you leave the channel you can no longer send/ receive messages from that channel. NOTE: You can also leave the main channel", + description = "Leave channel named . " .. + "When you leave the channel you can no longer send/ receive messages from that channel. " .. + "NOTE: You can also leave the main channel", func = function(name, param) if not param or param == "" then return false, "ERROR: Invalid number of arguments. Please supply the channel name" @@ -192,7 +211,10 @@ local leave_channel = { end beerchat.playersChannels[name][channel_name] = nil - minetest.get_player_by_name(name):set_attribute("beerchat:channels", minetest.write_json(beerchat.playersChannels[name])) + minetest.get_player_by_name(name):set_attribute( + "beerchat:channels", + minetest.write_json(beerchat.playersChannels[name]) + ) if beerchat.enable_sounds then minetest.sound_play(leave_channel_sound, { to_player = name, gain = 1.0 } ) @@ -210,10 +232,9 @@ local leave_channel = { local invite_channel = { params = ",", - description = "Invite player named to channel named . You must be the owner of the channel in order to do invites", + description = "Invite player named to channel named . " .. + "You must be the owner of the channel in order to do invites", func = function(name, param) - local owner = name - if not param or param == "" then return false, "ERROR: Invalid number of arguments. Please supply the channel name and the player name" end @@ -244,12 +265,18 @@ local invite_channel = { minetest.sound_play(channel_invite_sound, { to_player = player_name, gain = 1.0 } ) end -- Sending the message - minetest.chat_send_player(player_name, format_message(channel_invitation_string, { channel_name = channel_name, from_player = name })) + minetest.chat_send_player( + player_name, + format_message(channel_invitation_string, { channel_name = channel_name, from_player = name }) + ) end if beerchat.enable_sounds then minetest.sound_play(channel_invite_sound, { to_player = name, gain = 1.0 } ) end - minetest.chat_send_player(name, format_message(channel_invited_string, { channel_name = channel_name, to_player = player_name })) + minetest.chat_send_player( + name, + format_message(channel_invited_string, { channel_name = channel_name, to_player = player_name }) + ) end return true @@ -258,7 +285,8 @@ local invite_channel = { local mute_player = { params = "", - description = "Mute a player. After muting a player, you will no longer see chat messages of this user, regardless of what channel his user sends messages to", + description = "Mute a player. After muting a player, you will no longer see chat messages of this user, " .. + "regardless of what channel his user sends messages to", func = function(name, param) if not param or param == "" then return false, "ERROR: Invalid number of arguments. Please supply the name of the user to mute" diff --git a/hash.lua b/hash.lua index d54d8c2..c7e587a 100644 --- a/hash.lua +++ b/hash.lua @@ -1,9 +1,49 @@ local channel_message_string = "|#${channel_name}| <${from_player}> ${message}" --- # chat a.k.a. hash chat/ channel chat code, to send messages in chat channels using # e.g. #my channel: hello everyone in my channel! +-- # chat a.k.a. hash chat/ channel chat code, to send messages in chat channels using # +-- e.g. #my channel: hello everyone in my channel! hashchat_lastrecv = {} +local hash_send_all = function(msg, name, channel_name) + for _,player in ipairs(minetest.get_connected_players()) do + local target = player:get_player_name() + -- Checking if the target is in this channel + if beerchat.playersChannels[target] and beerchat.playersChannels[target][channel_name] then + if not minetest.get_player_by_name(target):get_attribute("beerchat:muted:"..name) then + if channel_name == beerchat.main_channel_name then + minetest.chat_send_player( + target, + format_message( + beerchat.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 beerchat.enable_sounds then + minetest.sound_play(beerchat.channel_message_sound, { to_player = target, gain = 1.0 } ) + end + end + end + end + end + -- Register the chat in the target persons last spoken to table + hashchat_lastrecv[name] = channel_name +end + minetest.register_on_chat_message(function(name, message) local channel_name, msg = string.match(message, "^#(.-): (.*)") if not beerchat.channels[channel_name] then @@ -27,24 +67,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 beerchat.playersChannels[target] and beerchat.playersChannels[target][channel_name] then - if not minetest.get_player_by_name(target):get_attribute("beerchat:muted:"..name) then - if channel_name == beerchat.main_channel_name then - minetest.chat_send_player(target, format_message(beerchat.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 beerchat.enable_sounds then - minetest.sound_play(beerchat.channel_message_sound, { to_player = target, gain = 1.0 } ) - end - end - end - end - end - -- Register the chat in the target persons last spoken to table - hashchat_lastrecv[name] = channel_name + hash_send_all(msg, name, channel_name) else return false end @@ -61,10 +84,18 @@ minetest.register_on_chat_message(function(name, message) beerchat.currentPlayerChannel[name] = channel_name minetest.get_player_by_name(name):set_attribute("beerchat:current_channel", channel_name) if channel_name == beerchat.main_channel_name then - minetest.chat_send_player(name, "Switched to channel "..channel_name..", messages will now be sent to this channel") + minetest.chat_send_player( + name, + "Switched to channel "..channel_name.. + ", messages will now be sent to this channel" + ) else - minetest.chat_send_player(name, "Switched to channel "..channel_name..", messages will now be sent to this channel. To switch back ".. - "to the main channel, type #"..beerchat.main_channel_name) + minetest.chat_send_player( + name, + "Switched to channel "..channel_name.. + ", messages will now be sent to this channel. To switch back ".. + "to the main channel, type #"..beerchat.main_channel_name + ) end if beerchat.enable_sounds then diff --git a/me.lua b/me.lua index 105bed2..9f87cc6 100644 --- a/me.lua +++ b/me.lua @@ -3,7 +3,8 @@ local me_message_string = "|#${channel_name}| * ${from_player} ${message}" local me_override = { params = "", - description = "Send message in the \"* player message\" format, e.g. /me eats pizza becomes |#"..beerchat.main_channel_name.."| * Player01 eats pizza", + description = "Send message in the \"* player message\" format, e.g. /me eats pizza becomes |#".. + beerchat.main_channel_name.."| * Player01 eats pizza", func = function(name, param) local msg = param local channel_name = beerchat.main_channel_name @@ -19,7 +20,14 @@ local me_override = { -- Checking if the target is in this channel if beerchat.playersChannels[target] and beerchat.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 })) + minetest.chat_send_player( + target, + format_message(me_message_string, { + channel_name = channel_name, + from_player = name, + message = msg + }) + ) end end end diff --git a/message.lua b/message.lua index 437717d..39dc524 100644 --- a/message.lua +++ b/message.lua @@ -13,7 +13,8 @@ -- ${channel_owner} owner of the channel -- ${channel_password} password to use when joining the channel, used e.g. for invites -- ${from_player} the player that is sending the message --- ${to_player} player to which the message is sent, will contain multiple player names e.g. when sending a PM to multiple players +-- ${to_player} player to which the message is sent, will contain multiple player names +-- e.g. when sending a PM to multiple players -- ${message} the actual message that is to be sent -- ${time} the current time in 24 hour format, as returned from os.date("%X") -- @@ -54,7 +55,11 @@ minetest.register_on_chat_message(function(name, message) local channel_name = beerchat.currentPlayerChannel[name] if not beerchat.channels[channel_name] then - minetest.chat_send_player(name, "Channel "..channel_name.." does not exist, switching back to "..beerchat.main_channel_name..". Please resend your message") + minetest.chat_send_player( + name, + "Channel "..channel_name.." does not exist, switching back to ".. + beerchat.main_channel_name..". Please resend your message" + ) beerchat.currentPlayerChannel[name] = beerchat.main_channel_name minetest.get_player_by_name(name):set_attribute("beerchat:current_channel", beerchat.main_channel_name) return true @@ -72,7 +77,17 @@ minetest.register_on_chat_message(function(name, message) -- Checking if the target is in this channel if beerchat.playersChannels[target] and beerchat.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(beerchat.main_channel_message_string, { channel_name = channel_name, from_player = name, message = message })) + minetest.chat_send_player( + target, + format_message( + beerchat.main_channel_message_string, { + channel_name = channel_name, + from_player = name, + message = message + } + ) + ) + if channel_name ~= beerchat.main_channel_name and beerchat.enable_sounds then minetest.sound_play(beerchat.channel_message_sound, { to_player = target, gain = 0.6 } ) end diff --git a/pm.lua b/pm.lua index 013b009..199f232 100644 --- a/pm.lua +++ b/pm.lua @@ -50,21 +50,70 @@ minetest.register_on_chat_message(function(name, message) if atleastonesent then successplayers = successplayers:sub(1, -2) if (successplayers ~= name) then - minetest.chat_send_player(name, format_message(private_message_sent_string, { to_player = successplayers, message = msg })) + minetest.chat_send_player( + name, + format_message( + private_message_sent_string, { + to_player = successplayers, + message = msg + } + ) + ) end end else - minetest.chat_send_player(name, "You have not sent private messages to anyone yet, please specify player names to send message to") + minetest.chat_send_player(name, "You have not sent private messages to anyone yet, " .. + "please specify player names to send message to") end end return true end end) +local send_pm = function(players, name, msg) + local atleastonesent = false + local successplayers = "" + for target in string.gmatch(","..players..",", ",([^,]+),") do + -- Checking if the target exists + if not minetest.get_player_by_name(target) then + minetest.chat_send_player(name, ""..target.." is not online") + else + if not minetest.get_player_by_name(target):get_attribute("beerchat:muted:"..name) then + if target ~= name then + -- Sending the message + minetest.chat_send_player(target, format_message(private_message_string, { from_player = name, message = msg })) + if beerchat.enable_sounds then + minetest.sound_play(private_message_sound, { to_player = target, gain = 1.0 } ) + end + else + minetest.chat_send_player(target, format_message(self_message_string, { from_player = name, message = msg })) + if beerchat.enable_sounds then + minetest.sound_play(self_message_sound, { to_player = target, gain = 1.0 } ) + end + end + end + atleastonesent = true + successplayers = successplayers..target.."," + end + end + -- Register the chat in the target persons last spoken to table + atchat_lastrecv[name] = players + if atleastonesent then + successplayers = successplayers:sub(1, -2) + if (successplayers ~= name) then + minetest.chat_send_player( + name, + format_message(private_message_sent_string, { to_player = successplayers, message = msg }) + ) + end + end + +end local msg_override = { params = " ", - description = "Send private message to player, for compatibility with the old chat command but with new style chat muting support ".. + description = "Send private message to player, ".. + "for compatibility with the old chat command but with new style chat muting support ".. "(players will not receive your message if they muted you) and multiple (comma separated) player support", func = function(name, param) minetest.log("action", "PM " .. name .. ": " .. param) @@ -78,39 +127,7 @@ local msg_override = { return false else if players and players ~= "" then - local atleastonesent = false - local successplayers = "" - for target in string.gmatch(","..players..",", ",([^,]+),") do - -- Checking if the target exists - if not minetest.get_player_by_name(target) then - minetest.chat_send_player(name, ""..target.." is not online") - else - if not minetest.get_player_by_name(target):get_attribute("beerchat:muted:"..name) then - if target ~= name then - -- Sending the message - minetest.chat_send_player(target, format_message(private_message_string, { from_player = name, message = msg })) - if beerchat.enable_sounds then - minetest.sound_play(private_message_sound, { to_player = target, gain = 1.0 } ) - end - else - minetest.chat_send_player(target, format_message(self_message_string, { from_player = name, message = msg })) - if beerchat.enable_sounds then - minetest.sound_play(self_message_sound, { to_player = target, gain = 1.0 } ) - end - end - end - atleastonesent = true - successplayers = successplayers..target.."," - end - end - -- Register the chat in the target persons last spoken to table - atchat_lastrecv[name] = players - if atleastonesent then - successplayers = successplayers:sub(1, -2) - if (successplayers ~= name) then - minetest.chat_send_player(name, format_message(private_message_sent_string, { to_player = successplayers, message = msg })) - end - end + send_pm(players, name, msg) end end return true diff --git a/whisper.lua b/whisper.lua index 95148d8..0d216ce 100644 --- a/whisper.lua +++ b/whisper.lua @@ -5,7 +5,8 @@ local whisper_color = "#aaaaaa" -- Whisper color override local whisper_string = "|#${channel_name}| <${from_player}> whispers: ${message}" --- $ chat a.k.a. dollar chat code, to whisper messages in chat to nearby players only using $, optionally supplying a radius e.g. $32 Hello +-- $ chat a.k.a. dollar chat code, to whisper messages in chat to nearby players only using $, +-- optionally supplying a radius e.g. $32 Hello minetest.register_on_chat_message(function(name, message) local dollar, sradius, msg = string.match(message, "^($)(.-) (.*)") if dollar == "$" then