]> jfr.im git - irc/evilnet/x3.git/blame - src/chanserv.h
Lots of style changes to user replies. added numeric access back
[irc/evilnet/x3.git] / src / chanserv.h
CommitLineData
d76ed9a9
AS
1/* chanserv.h - Channel service bot
2 * Copyright 2000-2004 srvx Development Team
3 *
83ff05c3 4 * This file is part of x3.
d76ed9a9
AS
5 *
6 * srvx is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with srvx; if not, write to the Free Software Foundation,
18 * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
19 */
20
21#ifndef _chanserv_h
22#define _chanserv_h
23
24#include "nickserv.h"
25
26enum UL_ALIASES {
27 UL_PEON = 100,
55342ce8 28 UL_HALFOP = 150,
d76ed9a9 29 UL_OP = 200,
4048352e
AS
30 UL_MANAGER = 300,
31 UL_PRESENT = UL_MANAGER,
d76ed9a9
AS
32 UL_COOWNER = 400,
33 UL_OWNER = 500,
34 UL_HELPER = 600,
35};
36
37enum levelOption {
38 lvlGiveVoice,
55342ce8 39 lvlGiveHalfOps,
d76ed9a9
AS
40 lvlGiveOps,
41 lvlEnfOps,
55342ce8 42 lvlEnfHalfOps,
d76ed9a9
AS
43 lvlEnfModes,
44 lvlEnfTopic,
45 lvlPubCmd,
46 lvlSetters,
47 lvlCTCPUsers,
48 lvlUserInfo,
49 lvlInviteMe,
50 lvlTopicSnarf,
51 NUM_LEVEL_OPTIONS
52};
53
54enum charOption {
55 chProtect,
56 chToys,
57 chTopicRefresh,
58 chCTCPReaction,
59 NUM_CHAR_OPTIONS
60};
61
62#define CHANNEL_NODELETE 0x00000001 /* (1 << 0) */
63#define CHANNEL_SUSPENDED 0x00000002 /* (1 << 1) */
64#define CHANNEL_INFO_LINES 0x00000004 /* (1 << 2) - DEPRECATED */
65#define CHANNEL_VOICE_ALL 0x00000008 /* (1 << 3) - DEPRECATED */
55342ce8 66
d76ed9a9
AS
67/* No longer used. */ /* (1 << 4) */
68#define CHANNEL_DYNAMIC_LIMIT 0x00000020 /* (1 << 5) */
69#define CHANNEL_TOPIC_SNARF 0x00000040 /* (1 << 6) - DEPRECATED */
70#define CHANNEL_PEON_INVITE 0x00000080 /* (1 << 7) - DEPRECATED */
71#define CHANNEL_OFFCHANNEL 0x00000100 /* (1 << 8) */
55342ce8 72#define CHANNEL_HOP_ALL 0x00000200 /* (1 << 9) */
73
d76ed9a9
AS
74/* Flags with values over 0x20000000 or (1 << 29) will not work
75 * because chanData.flags is a 30-bit field.
76 */
77
78#define IsProtected(x) ((x)->flags & CHANNEL_NODELETE)
79#define IsSuspended(x) ((x)->flags & CHANNEL_SUSPENDED)
0d16e639 80#define IsOffChannel(x) (((x)->flags & CHANNEL_OFFCHANNEL) && (off_channel > 1))
d76ed9a9
AS
81
82struct chanData
83{
84 struct chanNode *channel;
85 struct mod_chanmode modes;
86
87 time_t registered;
88 time_t visited;
89 time_t limitAdjusted;
a32da4c7 90 time_t ownerTransfer;
d76ed9a9
AS
91
92 char *topic;
93 char *greeting;
94 char *user_greeting;
95 char *registrar;
96 char *topic_mask;
97
98 unsigned int flags : 30;
99 unsigned int may_opchan : 1;
100 unsigned int max;
101 unsigned int last_refresh;
102 unsigned short banCount;
103 unsigned short userCount;
104 unsigned short lvlOpts[NUM_LEVEL_OPTIONS];
105 unsigned char chOpts[NUM_CHAR_OPTIONS];
106
107 struct userData *users;
108 struct banData *bans;
109 struct dict *notes;
110 struct suspended *suspended;
111 struct chanData *prev;
112 struct chanData *next;
113};
114
115#define USER_AUTO_OP 0x00000001
116#define USER_SUSPENDED 0x00000002
117#define USER_AUTO_INVITE 0x00000004
118#define USER_FLAGS_SIZE 7
119
120#define IsUserAutoOp(USER) (!((USER)->flags & USER_AUTO_OP))
121#define IsUserSuspended(USER) ((USER)->flags & USER_SUSPENDED)
122#define IsUserAutoInvite(USER) ((USER)->flags & USER_AUTO_INVITE)
123
124struct userData
125{
126 struct handle_info *handle;
127 struct chanData *channel;
128
129 char *info;
130 time_t seen;
131 unsigned short access;
132 unsigned int present : 1;
133 unsigned int flags : USER_FLAGS_SIZE;
134
135 /* linked list of userDatas for a chanData */
136 struct userData *prev;
137 struct userData *next;
138 /* linked list of userDatas for a handle_info */
139 struct userData *u_prev;
140 struct userData *u_next;
141};
142
143struct banData
144{
145 char mask[NICKLEN + USERLEN + HOSTLEN + 3];
146 char owner[NICKLEN+1];
147 struct chanData *channel;
148
149 time_t set;
150 time_t triggered;
151 time_t expires;
152
153 char *reason;
154
155 struct banData *prev;
156 struct banData *next;
157};
158
159struct suspended
160{
161 struct chanData *cData;
162 char *suspender;
163 char *reason;
164 time_t issued, expires, revoked;
165 struct suspended *previous;
166};
167
168struct do_not_register
169{
170 char chan_name[CHANNELLEN+1];
171 char setter[NICKSERV_HANDLE_LEN+1];
172 time_t set;
173 char reason[1];
174};
175
176void init_chanserv(const char *nick);
177void del_channel_user(struct userData *user, int do_gc);
178struct channelList *chanserv_support_channels(void);
179unsigned short user_level_from_name(const char *name, unsigned short clamp_level);
180struct do_not_register *chanserv_is_dnr(const char *chan_name, struct handle_info *handle);
181int check_user_level(struct chanNode *channel, struct userNode *user, enum levelOption opt, int allow_override, int exempt_owner);
182
e5a8f7cd 183void do_math(char *Buffer, char *Math);
de9510bc
AS
184char* user_level_name_from_level(int level);
185
e5a8f7cd 186
d76ed9a9 187#endif