Server protocol:SJOIN command

The SJOIN command is used to synchronize channel information between servers and for user joins.

Syntax
Syntax: SJOIN timestamp channel [modes and parameters] :buffer Where:
 * timestamp: creation time of the channel
 * channel: the channel name
 * modes and parameters: the modes, including parameters, eg: . If the channel has no modes set then this parameter will not exist.
 * buffer: the sjoin buffer, explained further down

Creation time and behavior
Similar to, different rules apply depending on how their_ts (the timestamp of the other server) compares to our_ts (the timestamp we have on record for the channel):

So, the channel creation time decides what to do with the contents of the SJOIN command.

Channel members
A simple SJOIN for three users in a channel that only has modes +nt set would look like this: SJOIN 1548605089 #test +nt :One Two @Three Upon receipt of such a message, the IRC server will send the following to it's locally connected users: *** One joins #test
 * Two joins #test
 * Three joins #test
 * other.server sets modes: +o Three

In the SJOIN buffer each item is separated by spaces. The nick can be prefixed with the following characters to give the user certain channel privileges:

NOTE: As you can see the characters for +a and +q differ from the ones you see in NAMES as PREFIX on IRC. So take care not to mix them up!

Multiple characters can be combined if the user holds multiple privileges, eg +vo for user Ein will be communicated as

Mode lists
The SJOIN command is also used to communicate +b (bans), +e (ban exempts) and +I (invite exceptions). For example: SJOIN 1548605089 #test +nt :&this!is@a.ban "this!is@an.exempt 'this!is@an.invex

The first letter of each item tells the type of the list:

Extended information
For lists it is possible to prefix the buffer with additional information to communicate when and who set the +beI. This requires SJSBY to be enabled via

Example without extended information: SJOIN 1548605089 #test +nt :&this!is@a.ban Example with extended information: SJOIN 1548605089 #test +nt :<1548605202,UserOne>&this!is@a.ban

So, the  prefix is used to communicate this information. Being  in the example.

The server would still show this as: *** some.server.net sets mode: +b this!is@a.ban ...but if the user queries the list at a later point by doing  then it will show the user and time of the ban:
 * 1) test this!is@a.ban set by UserOne (Sun Jan 27 17:06:42 2019)
 * 2) test End of Channel Ban List