Implement an Unreal-like user mode "B" ("Bot mode")
authorDNS777 <dns@rbose.org>
Thu, 23 Aug 2012 09:25:30 +0000 (09:25 +0000)
committerAlexander Barton <alex@barton.de>
Sun, 26 Aug 2012 13:58:37 +0000 (15:58 +0200)
src/ngircd/defines.h
src/ngircd/irc-info.c
src/ngircd/irc-mode.c
src/ngircd/messages.h

index cd0a1666ae58a7696c27f7c5aeac40fcfeea565b..27eecf1d169f10a2aa124d7d2363e6bf54601aea 100644 (file)
 #endif
 
 /** Supported user modes. */
-#define USERMODES "acCiorRswx"
+#define USERMODES "aBcCiorRswx"
 
 /** Supported channel modes. */
 #define CHANMODES "beiIklmnoOPrRstvz"
index 0ea85874862b7114b6cd355d59467371055a4013..f5139d07ebed78c68953bc56b19ed04424b9c884 100644 (file)
@@ -1111,6 +1111,12 @@ IRC_WHOIS_SendReply(CLIENT *Client, CLIENT *from, CLIENT *c)
                                Client_ID(from), Client_ID(c)))
                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? */
        if (Conn_UsesSSL(Client_Conn(c)) &&
            !IRC_WriteStrClient(from, RPL_WHOISSSL_MSG, Client_ID(from),
index fa35cdd0f29d7742d92c169f6ce992a56eaa1ca5..9cad32493d84b2ddb55520913b64e6628e0cfc7e 100644 (file)
@@ -229,6 +229,14 @@ Client_Mode( CLIENT *Client, REQUEST *Req, CLIENT *Origin, CLIENT *Target )
                                                        ERR_NOPRIVILEGES_MSG,
                                                        Client_ID(Origin));
                        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
                           * (only settable by IRC operators!) */
                        if (!set || Client_Type(Client) == CLIENT_SERVER
index 9ad6be1763d569f7af3b486e3620930f15127516..4858fea91af9589c7865715b6d15cfbf99e446d5 100644 (file)
@@ -72,6 +72,7 @@
 #define RPL_NOTOPIC_MSG                        "331 %s %s :No topic is set"
 #define RPL_TOPIC_MSG                  "332 %s %s :%s"
 #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_INVITELIST_MSG             "346 %s %s %s"
 #define RPL_ENDOFINVITELIST_MSG                "347 %s %s :End of channel invite list"