Page Menu
Home
1F616EMO Bugtracker
Search
Configure Global Search
Log In
Files
F239750
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
View Options
diff --git a/beerchat_mod/init.lua b/beerchat_mod/init.lua
new file mode 100644
index 0000000..3d55bbc
--- /dev/null
+++ b/beerchat_mod/init.lua
@@ -0,0 +1,95 @@
+-- twi_mods/beerchat_mods/init.lua
+-- special channels
+-- Copyright (C) 2024 1F616EMO
+-- SPDX-License-Identifier: LGPL-3.0-or-later
+
+local S = core.get_translator("beerchat_mod")
+
+local owner = core.settings:get("name") or "$SYSTEM"
+
+local function is_privileged(name)
+ local privs = core.get_player_privs(name)
+ return name == owner or privs.server or privs.privs or privs.ban or privs.role_helper or false
+end
+
+do
+ local old_is_player_subscribed_to_channel = beerchat.is_player_subscribed_to_channel
+
+ function beerchat.is_player_subscribed_to_channel(name, channel)
+ if channel == "Moderators" then
+ return is_privileged(name)
+ elseif channel == "grounded" then
+ return is_privileged(name) or old_is_player_subscribed_to_channel(name, channel)
+ end
+
+ return old_is_player_subscribed_to_channel(name, channel)
+ end
+end
+
+beerchat.register_callback('before_invite', function(name, _, channel)
+ if channel == "Moderators" or channel == "grounded" then
+ return false, S("The members of #@1 is automatically set by the server.", channel)
+ end
+end)
+
+-- Does not handle forced join
+beerchat.register_callback('before_join', function(name, channel)
+ if channel == "Moderators" or channel == "grounded" then
+ return false, S("The members of #@1 is automatically set by the server.", channel)
+ end
+end)
+
+beerchat.register_callback('before_leave', function(name, channel)
+ if channel == "Moderators" then
+ return false, S("The members of #@1 is automatically set by the server.", channel)
+ elseif channel == "grounded" and is_privileged(name) then
+ return false, S("Can't leave #@1: You're privileged.", channel)
+ end
+end)
+
+beerchat.register_callback('before_delete_channel', function(name, delete)
+ local channel = delete.channel
+ if channel == "Moderators" or channel == "grounded" then
+ return false, S("Can't delete #@1: It's a system channel.", channel)
+ end
+end)
+
+-- Make sure system-handled channels are registered
+
+beerchat.channels.Moderators = beerchat.channels.Moderators or {}
+beerchat.channels.Moderators.owner = owner
+beerchat.channels.Moderators.name = "Moderators"
+beerchat.channels.Moderators.password = "" -- Don't worry, players can't join anyways
+beerchat.channels.Moderators.color = beerchat.channels.color or beerchat.default_channel_color
+
+beerchat.channels.grounded = beerchat.channels.grounded or {}
+beerchat.channels.grounded.owner = owner
+beerchat.channels.grounded.name = "grounded"
+beerchat.channels.grounded.password = "" -- Don't worry, players can't join anyways
+beerchat.channels.grounded.color = beerchat.channels.color or beerchat.default_channel_color
+
+beerchat.mod_storage:set_string("channels", core.write_json(beerchat.channels))
+
+-- Invite owner (so they can modify the channel) and kick all others
+
+beerchat.register_callback('after_joinplayer', function(player, last_login)
+ local name = player:get_player_name()
+ local meta = player:get_meta()
+
+ if name == owner then
+ beerchat.playersChannels[name].Moderators = "owner"
+ beerchat.playersChannels[name].grounded = "owner"
+ else
+ beerchat.playersChannels[name].Moderators = nil
+ if beerchat.playersChannels[name].grounded == "owner" then
+ beerchat.playersChannels[name].grounded = nil
+ end
+ end
+
+ if not beerchat.playersChannels[name][beerchat.currentPlayerChannel[name]] then
+ beerchat.currentPlayerChannel[name] = beerchat.main_channel_name
+ meta:set_string("beerchat:current_channel", beerchat.main_channel_name)
+ end
+
+ meta:set_string("beerchat:channels", core.write_json(beerchat.playersChannels[name]))
+end)
diff --git a/beerchat_mod/mod.conf b/beerchat_mod/mod.conf
new file mode 100644
index 0000000..e8bc2fe
--- /dev/null
+++ b/beerchat_mod/mod.conf
@@ -0,0 +1,2 @@
+name = beerchat_mod
+depends = beerchat
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Jun 5 2026, 5:20 PM (6 w, 5 d ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
58/db/90ca128908e8834781ee586154cd
Default Alt Text
(4 KB)
Attached To
Mode
rTWIMODS Survival Server Custom Modifications
Attached
Detach File
Event Timeline
Log In to Comment