flags.h 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. /*
  2. * flags.h
  3. *
  4. */
  5. #ifndef _EGG_FLAGS_H
  6. #define _EGG_FLAGS_H
  7. #include "chan.h"
  8. /* For private() checking */
  9. #define PRIV_OP 1
  10. #define PRIV_VOICE 2
  11. typedef long flag_t;
  12. struct flag_record {
  13. flag_t match;
  14. flag_t global;
  15. flag_t bot;
  16. flag_t chan;
  17. };
  18. #define FR_GLOBAL 0x00000001
  19. #define FR_BOT 0x00000002
  20. #define FR_CHAN 0x00000004
  21. #define FR_ANYWH 0x10000000
  22. #define FR_AND 0x20000000
  23. #define FR_OR 0x40000000
  24. #define FR_ALL 0x0fffffff
  25. /*
  26. * userflags:
  27. * abcdefgh?jklmnopqr?tuvwxy?
  28. * + user defined A-Z
  29. * unused letters: isz
  30. *
  31. * botflags:
  32. * 0123456789ab????ghi??l???p?rs???????
  33. * unused letters: cdefjkmnoqtuvwxyz
  34. *
  35. * chanflags:
  36. * a??defg???klmno?qr??uv?xyz
  37. * + user defined A-Z
  38. * unused letters: bchijpstw
  39. */
  40. #define ROLE_KICK_MDOP (role)
  41. #define ROLE_KICK_MEAN (role)
  42. #define DEFLAG_BADCOOKIE 1
  43. #define DEFLAG_MANUALOP 2
  44. #ifdef G_MEAN
  45. # define DEFLAG_MEAN_DEOP 3
  46. # define DEFLAG_MEAN_KICK 4
  47. # define DEFLAG_MEAN_BAN 5
  48. #endif /* G_MEAN */
  49. #define DEFLAG_MDOP 6
  50. #define DEFLAG_MOP 7
  51. #define USER_VALID 0x03ffffff /* all USER_ flags in use */
  52. #define CHAN_VALID 0x03ffffff /* all flags that can be chan specific */
  53. #define BOT_VALID 0x7fe689C1 /* all BOT_ flags in use */
  54. #define USER_ADMIN BIT0 /* a user is an admin */
  55. #define USER_BOT BIT1 /* b user is a bot */
  56. #define USER_CHANHUB BIT2 /* c bot is a chanhub */
  57. #define USER_DEOP BIT3 /* d user is global de-op */
  58. #define USER_EXEMPT BIT4 /* e exempted from stopnethack */
  59. #define USER_F BIT5 /* f unused */
  60. #define USER_G BIT6 /* g unused */
  61. #define USER_H BIT7 /* h unused */
  62. #define USER_HUBA BIT8 /* i access to HUBS */
  63. #define USER_CHUBA BIT9 /* j access to CHANHUBS(+c) */
  64. #define USER_KICK BIT10 /* k user is global auto-kick */
  65. #define USER_DOLIMIT BIT11 /* l bot sets limit on channel(s) */
  66. #define USER_MASTER BIT12 /* m user has full bot access */
  67. #define USER_OWNER BIT13 /* n user is the bot owner */
  68. #define USER_OP BIT14 /* o user is +o on all channels */
  69. #define USER_PARTY BIT15 /* p user can CHAT on partyline:*needs (+i or +j) */
  70. #define USER_QUIET BIT16 /* q user is global de-voice */
  71. #define USER_R BIT17 /* r unused */
  72. #define USER_S BIT18 /* s unused */
  73. #define USER_T BIT19 /* t unused */
  74. #define USER_UPDATEHUB BIT20 /* u bot is the updatehub */
  75. #define USER_VOICE BIT21 /* v user is +v on all channels */
  76. #define USER_WASOPTEST BIT22 /* w wasop test needed for stopnethack */
  77. #define USER_NOFLOOD BIT23 /* x user is exempt from flood kicks */
  78. #define USER_DOVOICE BIT24 /* y bot gives voices */
  79. #define USER_DEFAULT BIT25 /* use default-flags */
  80. #define bot_hublevel(x) ( ( (x) && (x->flags & USER_BOT) && (get_user(&USERENTRY_BOTADDR, x)) ) ? \
  81. ( ((struct bot_addr *) get_user(&USERENTRY_BOTADDR, x))->hublevel ? \
  82. ((struct bot_addr *) get_user(&USERENTRY_BOTADDR, x))->hublevel : 999) \
  83. : 999)
  84. /* Flag checking macros
  85. */
  86. #define chan_op(x) ((x).chan & USER_OP)
  87. #define glob_op(x) ((x).global & USER_OP)
  88. #define chan_deop(x) ((x).chan & USER_DEOP)
  89. #define glob_deop(x) ((x).global & USER_DEOP)
  90. #define glob_master(x) ((x).global & USER_MASTER)
  91. #define glob_bot(x) ((x).global & USER_BOT)
  92. #define glob_owner(x) ((x).global & USER_OWNER)
  93. #define chan_master(x) ((x).chan & USER_MASTER)
  94. #define chan_owner(x) ((x).chan & USER_OWNER)
  95. #define chan_kick(x) ((x).chan & USER_KICK)
  96. #define glob_kick(x) ((x).global & USER_KICK)
  97. #define chan_voice(x) ((x).chan & USER_VOICE)
  98. #define glob_voice(x) ((x).global & USER_VOICE)
  99. #define chan_wasoptest(x) ((x).chan & USER_WASOPTEST)
  100. #define glob_wasoptest(x) ((x).global & USER_WASOPTEST)
  101. #define chan_quiet(x) ((x).chan & USER_QUIET)
  102. #define glob_quiet(x) ((x).global & USER_QUIET)
  103. #define glob_party(x) ((x).global & USER_PARTY)
  104. #define glob_hilite(x) ((x).global & USER_HIGHLITE)
  105. #define chan_exempt(x) ((x).chan & USER_EXEMPT)
  106. #define glob_exempt(x) ((x).global & USER_EXEMPT)
  107. #define glob_admin(x) ((x).global & USER_ADMIN)
  108. #define glob_huba(x) ((x).global & USER_HUBA)
  109. #define glob_chuba(x) ((x).global & USER_CHUBA)
  110. #define glob_dolimit(x) ((x).global & USER_DOLIMIT)
  111. #define chan_dolimit(x) ((x).chan & USER_DOLIMIT)
  112. #define glob_dovoice(x) ((x).global & USER_DOVOICE)
  113. #define chan_dovoice(x) ((x).chan & USER_DOVOICE)
  114. #define glob_noflood(x) ((x).global & USER_NOFLOOD)
  115. #define chan_noflood(x) ((x).chan & USER_NOFLOOD)
  116. #define glob_chanhub(x) ((x).global & USER_CHANHUB)
  117. void get_user_flagrec(struct userrec *, struct flag_record *, const char *);
  118. void set_user_flagrec(struct userrec *, struct flag_record *, const char *);
  119. void break_down_flags(const char *, struct flag_record *, struct flag_record *);
  120. int build_flags(char *, struct flag_record *, struct flag_record *);
  121. int flagrec_eq(struct flag_record *, struct flag_record *);
  122. int flagrec_ok(struct flag_record *, struct flag_record *);
  123. int sanity_check(flag_t);
  124. int chan_sanity_check(int, int);
  125. char geticon(int);
  126. int private(struct flag_record, struct chanset_t *, int);
  127. int chk_op(struct flag_record, struct chanset_t *);
  128. int chk_deop(struct flag_record, struct chanset_t *);
  129. int chk_voice(struct flag_record, struct chanset_t *);
  130. int chk_devoice(struct flag_record, struct chanset_t *);
  131. int chk_noflood(struct flag_record, struct chanset_t *);
  132. int ischanhub();
  133. int isupdatehub();
  134. int dovoice(struct chanset_t *);
  135. int dolimit(struct chanset_t *);
  136. int whois_access(struct userrec *, struct userrec *);
  137. #endif /* _EGG_FLAGS_H */