Merge branch 'umode-B'

This patch series allows ngIRCd to support the user mode "B" ("Bot flasg"):
it is settable and unsettable by every (non-restricted) client.
According to DNS777, this is how Unreal and InspIRCd do behave, so do we :-)

By Alexander Barton (1) and DNS777 (1)

* umode-B:
  Add new user mode "B" to doc/Modes.txt
  Implement an Unreal-like user mode "B" ("Bot mode")
This commit is contained in:
Alexander Barton 2012-08-27 23:27:30 +02:00
commit 1d3def0cc6
5 changed files with 18 additions and 2 deletions

View File

@ -2,7 +2,7 @@
ngIRCd - Next Generation IRC Server ngIRCd - Next Generation IRC Server
http://ngircd.barton.de/ http://ngircd.barton.de/
(c)2001-2011 Alexander Barton and Contributors. (c)2001-2012 Alexander Barton and Contributors.
ngIRCd is free software and published under the ngIRCd is free software and published under the
terms of the GNU General Public License. terms of the GNU General Public License.
@ -22,6 +22,7 @@ channels he is using at the moment.
mode since description mode since description
a 0.3.0 User is away. a 0.3.0 User is away.
B 20 User is flagged as a "bot".
c 17 IRC operator wants to receive connect/disconnect NOTICEs. c 17 IRC operator wants to receive connect/disconnect NOTICEs.
C 19 Only users that share a channel are allowed to send messages. C 19 Only users that share a channel are allowed to send messages.
i 0.0.1 User is "invisible". i 0.0.1 User is "invisible".

View File

@ -161,7 +161,7 @@
#endif #endif
/** Supported user modes. */ /** Supported user modes. */
#define USERMODES "acCiorRswx" #define USERMODES "aBcCiorRswx"
/** Supported channel modes. */ /** Supported channel modes. */
#define CHANMODES "beiIklmMnoOPrRstvz" #define CHANMODES "beiIklmMnoOPrRstvz"

View File

@ -1111,6 +1111,12 @@ IRC_WHOIS_SendReply(CLIENT *Client, CLIENT *from, CLIENT *c)
Client_ID(from), Client_ID(c))) Client_ID(from), Client_ID(c)))
return DISCONNECTED; return DISCONNECTED;
/* IRC-Bot? */
if (Client_HasMode(c, 'B') &&
!IRC_WriteStrClient(from, RPL_WHOISBOT_MSG,
Client_ID(from), Client_ID(c)))
return DISCONNECTED;
/* Connected using SSL? */ /* Connected using SSL? */
if (Conn_UsesSSL(Client_Conn(c)) && if (Conn_UsesSSL(Client_Conn(c)) &&
!IRC_WriteStrClient(from, RPL_WHOISSSL_MSG, Client_ID(from), !IRC_WriteStrClient(from, RPL_WHOISSSL_MSG, Client_ID(from),

View File

@ -229,6 +229,14 @@ Client_Mode( CLIENT *Client, REQUEST *Req, CLIENT *Origin, CLIENT *Target )
ERR_NOPRIVILEGES_MSG, ERR_NOPRIVILEGES_MSG,
Client_ID(Origin)); Client_ID(Origin));
break; break;
case 'B': /* Bot */
if (Client_HasMode(Client, 'r'))
ok = IRC_WriteStrClient(Origin,
ERR_RESTRICTED_MSG,
Client_ID(Origin));
else
x[0] = 'B';
break;
case 'c': /* Receive connect notices case 'c': /* Receive connect notices
* (only settable by IRC operators!) */ * (only settable by IRC operators!) */
if (!set || Client_Type(Client) == CLIENT_SERVER if (!set || Client_Type(Client) == CLIENT_SERVER

View File

@ -72,6 +72,7 @@
#define RPL_NOTOPIC_MSG "331 %s %s :No topic is set" #define RPL_NOTOPIC_MSG "331 %s %s :No topic is set"
#define RPL_TOPIC_MSG "332 %s %s :%s" #define RPL_TOPIC_MSG "332 %s %s :%s"
#define RPL_TOPICSETBY_MSG "333 %s %s %s %u" #define RPL_TOPICSETBY_MSG "333 %s %s %s %u"
#define RPL_WHOISBOT_MSG "335 %s %s :is a IRC Bot"
#define RPL_INVITING_MSG "341 %s %s %s%s" #define RPL_INVITING_MSG "341 %s %s %s%s"
#define RPL_INVITELIST_MSG "346 %s %s %s" #define RPL_INVITELIST_MSG "346 %s %s %s"
#define RPL_ENDOFINVITELIST_MSG "347 %s %s :End of channel invite list" #define RPL_ENDOFINVITELIST_MSG "347 %s %s :End of channel invite list"