Page MenuHome1F616EMO Bugtracker

No OneTemporary

Size
4 KB
Referenced Files
None
Subscribers
None
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

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)

Event Timeline