added MODE_HALFOP (+h, %)
[ircu2.10.12-pk.git] / include / channel.h
index cad2de035ef81d6db02b0d4f65fea3f69f5fb434..63cb19c8709daddeaafa14cf3de4827a9d0f8ef2 100644 (file)
@@ -66,10 +66,12 @@ typedef signed long long long64;
 #define ChannelExists(n)        (0 != FindChannel(n))
 
 #define CHFL_CHANOP             0x0001  /**< Channel operator */
-#define CHFL_VOICE              0x0002  /**< the power to speak */
-#define CHFL_DEOPPED            0x0004  /**< Is de-opped by a server */
-#define CHFL_SERVOPOK           0x0008  /**< Server op allowed */
-#define CHFL_ZOMBIE             0x0010  /**< Kicked from channel */
+#define CHFL_HALFOP             0x0002  /**< Channel operator */
+#define CHFL_VOICE              0x0004  /**< the power to speak */
+
+#define CHFL_DEOPPED            0x0010  /**< Is de-opped by a server */
+#define CHFL_SERVOPOK           0x0020  /**< Server op allowed */
+#define CHFL_ZOMBIE             0x0040  /**< Kicked from channel */
 #define CHFL_BURST_JOINED       0x0100  /**< Just joined by net.junction */
 #define CHFL_BANVALID           0x0800  /**< CHFL_BANNED bit is valid */
 #define CHFL_BANNED             0x1000  /**< Channel member is banned */
@@ -82,50 +84,55 @@ typedef signed long long long64;
                                        /**, In oob BURST, but was already 
                                         * joined and voiced 
                                         */
-#define CHFL_CHANNEL_MANAGER   0x10000 /**< Set when creating channel or using 
+#define CHFL_BURST_ALREADY_HALFOPPED   0x10000  
+                                       /**, In oob BURST, but was already 
+                                        * joined and voiced 
+                                        */
+#define CHFL_CHANNEL_MANAGER   0x40000 /**< Set when creating channel or using 
                                         * Apass 
                                         */
-#define CHFL_USER_PARTING       0x20000 /**< User is already parting that 
+#define CHFL_USER_PARTING       0x80000 /**< User is already parting that 
                                         * channel 
                                         */
-#define CHFL_DELAYED            0x40000 /**< User's join message is delayed */
-#define CHFL_INVISIBLE            0x80000 /**< User's join message is delayed */
+#define CHFL_DELAYED            0x100000 /**< User's join message is delayed */
+#define CHFL_INVISIBLE            0x200000 /**< User's join message is delayed */
 
-#define CHFL_OVERLAP         (CHFL_CHANOP | CHFL_VOICE)
+#define CHFL_OVERLAP         (CHFL_CHANOP | CHFL_HALFOP | CHFL_VOICE)
 #define CHFL_BANVALIDMASK    (CHFL_BANVALID | CHFL_BANNED)
-#define CHFL_VOICED_OR_OPPED (CHFL_CHANOP | CHFL_VOICE)
+#define CHFL_VOICED_OR_OPPED (CHFL_CHANOP | CHFL_HALFOP | CHFL_VOICE)
 
 /* Channel Visibility macros */
 
 #define MODE_NULL           0
 #define MODE_CHANOP         CHFL_CHANOP        /**< +o Chanop */
+#define MODE_HALFOP         CHFL_HALFOP /**< +h Halfop */
 #define MODE_VOICE          CHFL_VOICE /**< +v Voice */
-#define MODE_PRIVATE        0x00004            /**< +p Private */
-#define MODE_SECRET         0x00008            /**< +s Secret */
-#define MODE_MODERATED      0x00010            /**< +m Moderated */
-#define MODE_TOPICLIMIT     0x00020            /**< +t Topic Limited */
-#define MODE_INVITEONLY     0x00040            /**< +i Invite only */
-#define MODE_NOPRIVMSGS     0x00080            /**< +n No Private Messages */
-#define MODE_KEY            0x00100            /**< +k Keyed */
-#define MODE_BAN            0x00200            /**< +b Ban */
-#define MODE_LIMIT          0x00400            /**< +l Limit */
-#define MODE_REGONLY        0x00800            /**< Only +r users may join */
-#define MODE_DELJOINS       0x01000            /**< New join messages are delayed */
-#define MODE_REGISTERED     0x02000            /**< Channel marked as registered (for future semantic expansion) */
-#define MODE_PERSIST        0x04000            /**< +z persistant channel */
-#define MODE_NOCOLOUR       0x08000            /**< no ANSI color codes */
-#define MODE_NOCTCP         0x10000            /**< no channel CTCPs */
-#define MODE_SAVE           0x20000            /**< save this mode-with-arg 'til later */
-#define MODE_FREE           0x40000        /**< string needs to be passed to  MyFree() */
-#define MODE_BURSTADDED     0x80000            /**< channel was created by a BURST */
-#define MODE_UPASS         0x100000
-#define MODE_APASS         0x200000
-#define MODE_WASDELJOINS   0x400000            /**< Not DELJOINS, but some joins  pending */
-
-#define MODE_NOAMSGS      0x1000000            /**< No multi target messages */
-#define MODE_NONOTICE     0x2000000            /**< No channel notices */
-#define MODE_QUARANTINE   0x4000000            /**< No channel notices */
-#define MODE_ALTCHAN      0x8000000            /**< Alternative channel */
+
+#define MODE_PRIVATE           0x10            /**< +p Private */
+#define MODE_SECRET            0x20            /**< +s Secret */
+#define MODE_MODERATED         0x40            /**< +m Moderated */
+#define MODE_TOPICLIMIT        0x80            /**< +t Topic Limited */
+#define MODE_INVITEONLY       0x100            /**< +i Invite only */
+#define MODE_NOPRIVMSGS       0x200            /**< +n No Private Messages */
+#define MODE_KEY              0x400            /**< +k Keyed */
+#define MODE_BAN              0x800            /**< +b Ban */
+#define MODE_LIMIT           0x1000            /**< +l Limit */
+#define MODE_REGONLY         0x2000            /**< Only +r users may join */
+#define MODE_DELJOINS        0x4000            /**< New join messages are delayed */
+#define MODE_REGISTERED      0x8000            /**< Channel marked as registered (for future semantic expansion) */
+#define MODE_PERSIST        0x10000            /**< +z persistant channel */
+#define MODE_NOCOLOUR       0x20000            /**< no ANSI color codes */
+#define MODE_NOCTCP         0x40000            /**< no channel CTCPs */
+#define MODE_SAVE           0x80000            /**< save this mode-with-arg 'til later */
+#define MODE_FREE          0x100000        /**< string needs to be passed to  MyFree() */
+#define MODE_BURSTADDED    0x200000            /**< channel was created by a BURST */
+#define MODE_UPASS         0x400000
+#define MODE_APASS         0x800000
+#define MODE_WASDELJOINS  0x1000000            /**< Not DELJOINS, but some joins  pending */
+#define MODE_NOAMSGS      0x2000000            /**< No multi target messages */
+#define MODE_NONOTICE     0x4000000            /**< No channel notices */
+#define MODE_QUARANTINE   0x8000000            /**< No channel notices */
+#define MODE_ALTCHAN     0x10000000            /**< Alternative channel */
 #define MODE_DEL         0x20000000
 #define MODE_ADD         0x40000000
 #define MODE_ACCESS     0x100000000LLU /**< ChanServ access */
@@ -134,12 +141,12 @@ typedef signed long long long64;
 #define MODE_SSLCHAN    0x800000000LLU /**< +S SSL Channel */
 /** mode flags which take another parameter (With PARAmeterS)
  */
-#define MODE_WPARAS     (MODE_CHANOP|MODE_VOICE|MODE_BAN|MODE_KEY|MODE_LIMIT|MODE_APASS|MODE_UPASS|MODE_ALTCHAN|MODE_ACCESS|MODE_NOFLOOD)
+#define MODE_WPARAS     (MODE_CHANOP|MODE_HALFOP|MODE_VOICE|MODE_BAN|MODE_KEY|MODE_LIMIT|MODE_APASS|MODE_UPASS|MODE_ALTCHAN|MODE_ACCESS|MODE_NOFLOOD)
 
 /** Available Channel modes */
-#define infochanmodes feature_bool(FEAT_OPLEVELS) ? "AcCbiklmMnNopsStuUvrDRzQu" : "cCbiklmMnNopsStuvrDRzQu"
+#define infochanmodes feature_bool(FEAT_OPLEVELS) ? "AcCbhiklmMnNopsStuUvrDRzQu" : "cCbhiklmMnNopsStuvrDRzQu"
 /** Available Channel modes that take parameters */
-#define infochanmodeswithparams feature_bool(FEAT_OPLEVELS) ? "AbfkloUvFa" : "bfklovFa"
+#define infochanmodeswithparams feature_bool(FEAT_OPLEVELS) ? "AbfhkloUvFa" : "bfhklovFa"
 
 #define HoldChannel(x)          (!(x))
 /** name invisible */
@@ -213,8 +220,9 @@ struct Membership {
 };
 
 #define FLFL_CHANOP  0x01
-#define FLFL_VOICE   0x02
-#define FLFL_NOFLOOD  0x04
+#define FLFL_HALFOP   0x02
+#define FLFL_VOICE   0x04
+#define FLFL_NOFLOOD  0x08
 
 struct MemberFlood {
   struct MemberFlood* next_memberflood;
@@ -230,6 +238,8 @@ struct MemberFlood {
 #define IsBanValid(x)       ((x)->status & CHFL_BANVALID)
 #define IsChanOp(x)         ((x)->status & CHFL_CHANOP)
 #define OpLevel(x)          ((x)->oplevel)
+#define IsHalfOp(x)         ((x)->status & CHFL_HALFOP)
+#define IsChanOpOrHalfOp(x) ((x)->status & (CHFL_CHANOP | CHFL_HALFOP))
 #define HasVoice(x)         ((x)->status & CHFL_VOICE)
 #define IsServOpOk(x)       ((x)->status & CHFL_SERVOPOK)
 #define IsBurstJoined(x)    ((x)->status & CHFL_BURST_JOINED)
@@ -423,6 +433,7 @@ extern void remove_user_from_channel(struct Client *sptr, struct Channel *chptr)
 extern void remove_user_from_all_channels(struct Client* cptr);
 
 extern int is_chan_op(struct Client *cptr, struct Channel *chptr);
+extern int is_halfop(struct Client *cptr, struct Channel *chptr);
 extern int is_zombie(struct Client *cptr, struct Channel *chptr);
 extern int has_voice(struct Client *cptr, struct Channel *chptr);
 /*