Channel administration
Wizards administer communication channels with @chan. Running it without a
self-management must provide Lua commands that enforce its desired policy and
switch prints the available operations. Mortals cannot invoke @chan. A game
that wants to offer mortal self-management must provide Lua commands that
enforce its desired policy and
self-management must provide Lua commands that enforce its desired policy and
call the appropriate channel functionality.
Create and inspect channels
Create a channel, make it public if desired, and inspect the result:
@chan/create Staff
@chan/flags Staff=public
@chan/status Staff
@chan/status/full Staff
List and inspect channels
Use @chan/list for the normal description view. The
@chan/list/full and @chan/status/full forms expose the capability flags,
attached channel-object dbref, membership count, and message count.
Destroy channels
Destroy a channel with:
@chan/destroy Staff
Destruction removes the channel and its membership records immediately.
Manage channel membership
Inspect membership and listening state with @chan/who Staff. Add /all to
the channel argument to include inactive membership records:
@chan/who Staff/all
A Wizard can remove a member while also on the channel:
@chan/boot Staff=TroublesomePlayer
Channel flags
Channel flags may be set and unset using the @chan/flags command.
New channels are private. Setting the public flag includes a channel in
public comlist listings. Clear the flag with !public to take it private:
@chan/flags Staff=!public
A loud channel announces member connections and disconnections. Removing the
loud flag on a channel suppresses those notices:
@chan/flags Staff=loud
@chan/flags Staff=!loud
A transparent channel reveals eligible hidden members in membership output;
clearing the flag hides them:
@chan/flags Staff=transparent
@chan/flags Staff=!transparent
Channel member flags
Channels track join, receive, and transmit grants separately for players and
objects. Use /pflags for players and /oflags for objects:
@chan/pflags Staff=join
@chan/pflags Staff=!transmit
@chan/oflags Staff=receive
@chan/oflags Staff=!join
An enabled flag grants that capability to every member of that type. Prefix
the capability with ! to clear the grant. Clearing a flag does not
necessarily deny access: an attached channel object’s corresponding lock can
still grant it.
Attach an object for descriptions and locks
A channel object supplies the description displayed by normal list and status output and can grant channel capabilities through Lua locks. Create and describe a dedicated object, attach an object module, and assign it to the channel:
@create Staff Channel Object
@desc #123=Coordination channel for game staff.
@lua/parent #123=channels/staff.lua
@chan/object Staff=#123
For example, game/lua/object_logic/channels/staff.lua can define:
local function is_staff(player)
return mux.object(player):state("channels.staff"):get("member", false)
end
return {
locks = {
default = function(ctx) return is_staff(ctx.subject) end,
use = function(ctx) return is_staff(ctx.subject) end,
enter = function(ctx) return is_staff(ctx.subject) end,
},
}
The lock mapping is:
| Channel capability | Channel-object lock |
|---|---|
| Join | default |
| Transmit | use |
| Receive | enter |
Capability flags are permissive grants and take precedence over the need to pass a lock. For example, if the player join flag is enabled, every player can join regardless of the default lock. To make a lock authoritative for a type and capability, clear that grant first:
@chan/pflags Staff=!join
@chan/oflags Staff=!join
Repeat that pattern for receive or transmit when their locks should decide
access. Wizards bypass these access checks.
Detach the channel object with an empty value:
@chan/object Staff=
Detaching removes the description and lock-based grants but does not change the channel’s player or object capability flags.
Emit to channels
Use the @chan/emit command to send a message to every channel member:
@chan/emit Staff=The meeting starts in five minutes.
Ordinary player channel speech has color markup and raw terminal formatting
removed before delivery. Because @chan/emit is Wizard-only, its message may
contain color markup.
To send a message without the channel’s name prefixed before the message, use
the /noheader emit switch:
@chan/emit/noheader Staff=Exact text sent to listeners