Implemented user mode "R" and channel mode "R"

- User mode "R": indicates that the nick name of this user is "registered".
   This mode isn't handled by ngIRCd itself, but must be set and unset by
   IRC services like Anope.

 - Channel mode "R": only registered users (having the user mode "R" set)
   are allowed to join this channel.
This commit is contained in:
Alexander Barton 2011-08-26 15:26:38 +02:00
parent 69803d6ff1
commit 8aac366802
4 changed files with 11 additions and 2 deletions

View File

@ -82,8 +82,8 @@
#define RECONNECT_DELAY 3 /* Time to delay re-connect attempts
in seconds. */
#define USERMODES "aciorswx" /* Supported user modes. */
#define CHANMODES "biIklmnoOPstvz" /* Supported channel modes. */
#define USERMODES "aciorRswx" /* Supported user modes. */
#define CHANMODES "biIklmnoOPRstvz" /* Supported channel modes. */
#define CONNECTED true /* Internal status codes. */
#define DISCONNECTED false

View File

@ -137,6 +137,13 @@ join_allowed(CLIENT *Client, CHANNEL *chan, const char *channame,
return false;
}
if (strchr(channel_modes, 'R') && !strchr(Client_Modes(Client), 'R')) {
/* Only registered users are allowed! */
IRC_WriteStrClient(Client, ERR_REGONLYCHANNEL_MSG,
Client_ID(Client), channame);
return false;
}
return true;
} /* join_allowed */

View File

@ -479,6 +479,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
case 'i': /* Invite only */
case 'm': /* Moderated */
case 'n': /* Only members can write */
case 'R': /* Registered users only */
case 's': /* Secret channel */
case 't': /* Topic locked */
case 'z': /* Secure connections only */

View File

@ -120,6 +120,7 @@
#define ERR_CHANNELISFULL_MSG "471 %s %s :Cannot join channel (+l)"
#define ERR_SECURECHANNEL_MSG "471 %s %s :Cannot join channel (+z)"
#define ERR_OPONLYCHANNEL_MSG "471 %s %s :Cannot join channel (+O)"
#define ERR_REGONLYCHANNEL_MSG "471 %s %s :Cannot join channel (+R)"
#define ERR_UNKNOWNMODE_MSG "472 %s: %c :is unknown mode char for %s"
#define ERR_INVITEONLYCHAN_MSG "473 %s %s :Cannot join channel (+i)"
#define ERR_BANNEDFROMCHAN_MSG "474 %s %s :Cannot join channel (+b)"