]>
Commit | Line | Data |
---|---|---|
3e9ba21e AG |
1 | diff -ur eggdrop1.6.12.old/src/chan.h eggdrop1.6.12.new/src/chan.h |
2 | --- eggdrop1.6.12.old/src/chan.h Wed Jun 19 17:13:38 2002 | |
3 | +++ eggdrop1.6.12.new/src/chan.h Fri Aug 23 19:47:33 2002 | |
4 | @@ -172,6 +172,7 @@ | |
5 | int mode_mns_prot; /* modes to reject */ | |
6 | int limit_prot; /* desired limit */ | |
7 | char key_prot[121]; /* desired password */ | |
8 | + char topic_prot[501]; /* desired topic */ | |
9 | /* queued mode changes: */ | |
10 | char pls[21]; /* positive mode changes */ | |
11 | char mns[21]; /* negative mode changes */ | |
12 | diff -ur eggdrop1.6.12.old/src/chanprog.c eggdrop1.6.12.new/src/chanprog.c | |
13 | --- eggdrop1.6.12.old/src/chanprog.c Thu Jul 18 16:28:32 2002 | |
14 | +++ eggdrop1.6.12.new/src/chanprog.c Fri Aug 23 19:55:06 2002 | |
15 | @@ -680,3 +680,23 @@ | |
16 | pa = pb; | |
17 | } | |
18 | } | |
19 | + | |
20 | +/* If we have a protected topic and the bot is opped, halfoped, | |
21 | + * or the channel is -t, change the topic. (Sup 11May2001) | |
22 | + */ | |
23 | +void check_topic(struct chanset_t *chan) | |
24 | +{ | |
25 | + memberlist *m = NULL; | |
26 | + | |
27 | + if (chan->topic_prot[0]) { | |
28 | + m = ismember(chan, botname); | |
29 | + if (!m) | |
30 | + return; | |
31 | + if (chan->channel.topic) { | |
32 | + if (!egg_strcasecmp(chan->topic_prot, chan->channel.topic)) | |
33 | + return; | |
34 | + } | |
35 | + if (chan_hasop(m) || !channel_optopic(chan) || chan_hashalfop(m)) | |
36 | + dprintf(DP_SERVER, "TOPIC %s :%s\n", chan->name, chan->topic_prot); | |
37 | + } | |
38 | +} | |
39 | diff -ur eggdrop1.6.12.old/src/mod/channels.mod/channels.c eggdrop1.6.12.new/src/mod/channels.mod/channels.c | |
40 | --- eggdrop1.6.12.old/src/mod/channels.mod/channels.c Thu Jul 18 15:01:44 2002 | |
41 | +++ eggdrop1.6.12.new/src/mod/channels.mod/channels.c Fri Aug 23 20:00:59 2002 | |
42 | @@ -382,6 +382,7 @@ | |
43 | FILE *f; | |
44 | char s[121], w[1024], w2[1024], name[163]; | |
45 | char need1[242], need2[242], need3[242], need4[242], need5[242]; | |
46 | + char topic[1002]; | |
47 | struct chanset_t *chan; | |
48 | struct udef_struct *ul; | |
49 | ||
50 | @@ -402,12 +403,13 @@ | |
51 | convert_element(chan->dname, name); | |
52 | get_mode_protect(chan, w); | |
53 | convert_element(w, w2); | |
54 | + convert_element(chan->topic_prot, topic); | |
55 | convert_element(chan->need_op, need1); | |
56 | convert_element(chan->need_invite, need2); | |
57 | convert_element(chan->need_key, need3); | |
58 | convert_element(chan->need_unban, need4); | |
59 | convert_element(chan->need_limit, need5); | |
60 | - fprintf(f, "channel %s %s%schanmode %s idle-kick %d stopnethack-mode %d \ | |
61 | + fprintf(f, "channel %s %s%schanmode %s topic %s idle-kick %d stopnethack-mode %d \ | |
62 | revenge-mode %d \ | |
63 | need-op %s need-invite %s need-key %s need-unban %s need-limit %s \ | |
64 | flood-chan %d:%d flood-ctcp %d:%d flood-join %d:%d \ | |
65 | @@ -421,6 +423,7 @@ | |
66 | name, | |
67 | channel_static(chan) ? " " : " { ", | |
68 | w2, | |
69 | + topic, | |
70 | chan->idle_kick, /* idle-kick 0 is same as dont-idle-kick (less code)*/ | |
71 | chan->stopnethack_mode, | |
72 | chan->revenge_mode, | |
73 | diff -ur eggdrop1.6.12.old/src/mod/channels.mod/cmdschan.c eggdrop1.6.12.new/src/mod/channels.mod/cmdschan.c | |
74 | --- eggdrop1.6.12.old/src/mod/channels.mod/cmdschan.c Mon Jul 22 01:48:53 2002 | |
75 | +++ eggdrop1.6.12.new/src/mod/channels.mod/cmdschan.c Fri Aug 23 20:02:26 2002 | |
76 | @@ -1199,6 +1199,7 @@ | |
77 | channel_static(chan) ? "static" : "dynamic", chan->dname); | |
78 | get_mode_protect(chan, work); | |
79 | dprintf(idx, "Protect modes (chanmode): %s\n", work[0] ? work : "None"); | |
80 | + dprintf(idx, "Protect topic: %s\n", chan->topic_prot[0] ? chan->topic_prot : "None"); | |
81 | if (chan->idle_kick) | |
82 | dprintf(idx, "Idle Kick after (idle-kick): %d\n", chan->idle_kick); | |
83 | else | |
84 | diff -ur eggdrop1.6.12.old/src/mod/channels.mod/help/chaninfo.help eggdrop1.6.12.new/src/mod/channels.mod/help/chaninfo.help | |
85 | --- eggdrop1.6.12.old/src/mod/channels.mod/help/chaninfo.help Thu Jun 13 23:46:48 2002 | |
86 | +++ eggdrop1.6.12.new/src/mod/channels.mod/help/chaninfo.help Fri Aug 23 20:03:05 2002 | |
87 | @@ -4,6 +4,7 @@ | |
88 | It shows any of the following: | |
89 | %bchanmode%b which modes are enforced on the channel, both + and - | |
90 | modes can be enforced | |
91 | + %btopic%b which topic is enforced on the channel | |
92 | %bidle-kick%b kick idle users (non +f's anyway) on the channel after | |
93 | how many minutes (use 0, or dont-idle-kick to turn this off) | |
94 | %{+n} | |
95 | diff -ur eggdrop1.6.12.old/src/mod/channels.mod/tclchan.c eggdrop1.6.12.new/src/mod/channels.mod/tclchan.c | |
96 | --- eggdrop1.6.12.old/src/mod/channels.mod/tclchan.c Thu Jul 18 15:01:44 2002 | |
97 | +++ eggdrop1.6.12.new/src/mod/channels.mod/tclchan.c Fri Aug 23 20:11:17 2002 | |
98 | @@ -1093,6 +1093,15 @@ | |
99 | return TCL_ERROR; | |
100 | } | |
101 | chan->invite_time = atoi(item[i]); | |
102 | + } else if (!strcmp(item[i], "topic")) { | |
103 | + i++; | |
104 | + if (i >= items) { | |
105 | + if (irp) | |
106 | + Tcl_AppendResult(irp, "channel topic needs argument", NULL); | |
107 | + return TCL_ERROR; | |
108 | + } | |
109 | + strncpyz(chan->topic_prot, item[i], sizeof(chan->topic_prot)); | |
110 | + check_topic(chan); | |
111 | } | |
112 | else if (!strcmp(item[i], "+enforcebans")) | |
113 | chan->status |= CHAN_ENFORCEBANS; | |
114 | diff -ur eggdrop1.6.12.old/src/mod/irc.mod/chan.c eggdrop1.6.12.new/src/mod/irc.mod/chan.c | |
115 | --- eggdrop1.6.12.old/src/mod/irc.mod/chan.c Thu Jul 25 13:40:18 2002 | |
116 | +++ eggdrop1.6.12.new/src/mod/irc.mod/chan.c Fri Aug 23 20:14:54 2002 | |
117 | @@ -1514,12 +1514,14 @@ | |
118 | memberlist *m; | |
119 | struct chanset_t *chan; | |
120 | struct userrec *u; | |
121 | + struct flag_record fr = {FR_GLOBAL | FR_CHAN, 0, 0, 0, 0, 0}; | |
122 | ||
123 | chname = newsplit(&msg); | |
124 | fixcolon(msg); | |
125 | u = get_user_by_host(from); | |
126 | nick = splitnick(&from); | |
127 | chan = findchan(chname); | |
128 | + get_user_flagrec(u, &fr, chname); | |
129 | if (chan) { | |
130 | putlog(LOG_JOIN, chan->dname, "Topic changed on %s by %s!%s: %s", | |
131 | chan->dname, nick, from, msg); | |
132 | @@ -1528,6 +1530,8 @@ | |
133 | m->last = now; | |
134 | set_topic(chan, msg); | |
135 | check_tcl_topc(nick, from, u, chan->dname, msg); | |
136 | + if (egg_strcasecmp(botname, nick) && !glob_master(fr) && !chan_master(fr)) | |
137 | + check_topic(chan); | |
138 | } | |
139 | return 0; | |
140 | } | |
141 | @@ -1546,6 +1550,7 @@ | |
142 | if (chan) { | |
143 | set_topic(chan, NULL); | |
144 | check_tcl_topc("*", "*", NULL, chan->dname, ""); | |
145 | + check_topic(chan); | |
146 | } | |
147 | return 0; | |
148 | } | |
149 | @@ -1565,6 +1570,7 @@ | |
150 | fixcolon(msg); | |
151 | set_topic(chan, msg); | |
152 | check_tcl_topc("*", "*", NULL, chan->dname, msg); | |
153 | + check_topic(chan); | |
154 | } | |
155 | return 0; | |
156 | } | |
157 | diff -ur eggdrop1.6.12.old/src/mod/irc.mod/cmdsirc.c eggdrop1.6.12.new/src/mod/irc.mod/cmdsirc.c | |
158 | --- eggdrop1.6.12.old/src/mod/irc.mod/cmdsirc.c Mon Jul 22 01:43:28 2002 | |
159 | +++ eggdrop1.6.12.new/src/mod/irc.mod/cmdsirc.c Fri Aug 23 20:16:44 2002 | |
160 | @@ -824,6 +824,7 @@ | |
161 | static void cmd_topic(struct userrec *u, int idx, char *par) | |
162 | { | |
163 | struct chanset_t *chan; | |
164 | + struct flag_record fr = {FR_GLOBAL | FR_CHAN, 0, 0, 0, 0, 0}; | |
165 | ||
166 | if (par[0] && (strchr(CHANMETA, par[0]) != NULL)) { | |
167 | char *chname = newsplit(&par); | |
168 | @@ -846,6 +847,13 @@ | |
169 | dprintf(idx, "I'm not a channel op or halfop on %s and the channel %s", | |
170 | "is +t.\n", chan->dname); | |
171 | } else { | |
172 | + if (chan->topic_prot[0]) { | |
173 | + get_user_flagrec(u, &fr, chan->dname); | |
174 | + if (!glob_master(fr) && !chan_master(fr)) { | |
175 | + dprintf(idx, "The topic of %s is protected.\n", chan->dname); | |
176 | + return; | |
177 | + } | |
178 | + } | |
179 | dprintf(DP_SERVER, "TOPIC %s :%s\n", chan->name, par); | |
180 | dprintf(idx, "Changing topic...\n"); | |
181 | putlog(LOG_CMDS, "*", "#%s# (%s) topic %s", dcc[idx].nick, | |
182 | diff -ur eggdrop1.6.12.old/src/mod/irc.mod/mode.c eggdrop1.6.12.new/src/mod/irc.mod/mode.c | |
183 | --- eggdrop1.6.12.old/src/mod/irc.mod/mode.c Thu Jun 13 16:43:08 2002 | |
184 | +++ eggdrop1.6.12.new/src/mod/irc.mod/mode.c Fri Aug 23 20:31:09 2002 | |
185 | @@ -471,8 +471,10 @@ | |
186 | } | |
187 | } | |
188 | m->flags |= WASOP; | |
189 | - if (check_chan) | |
190 | + if (check_chan) { | |
191 | recheck_channel(chan, 1); | |
192 | + check_topic(chan); | |
193 | + } | |
194 | } | |
195 | ||
196 | static void got_halfop(struct chanset_t *chan, char *nick, char *from, | |
197 | @@ -556,8 +558,10 @@ | |
198 | } | |
199 | } | |
200 | m->flags |= WASHALFOP; | |
201 | - if (check_chan) | |
202 | + if (check_chan) { | |
203 | recheck_channel(chan, 1); | |
204 | + check_topic(chan); | |
205 | + } | |
206 | } | |
207 | ||
208 | static void got_deop(struct chanset_t *chan, char *nick, char *from, | |
209 | @@ -1314,6 +1318,8 @@ | |
210 | ((ms2[0] == '-') || (chan->mode_mns_prot & todo))) | |
211 | add_mode(chan, ms2[0] == '+' ? '-' : '+', *chg, ""); | |
212 | } | |
213 | + if ((ms2[0] == '-') && ((*chg == 't') || (*chg == 'h'))) | |
214 | + check_topic(chan); | |
215 | } | |
216 | chg++; | |
217 | } | |
218 | diff -ur eggdrop1.6.12.old/src/mod/module.h eggdrop1.6.12.new/src/mod/module.h | |
219 | --- eggdrop1.6.12.old/src/mod/module.h Sun Feb 24 02:17:57 2002 | |
220 | +++ eggdrop1.6.12.new/src/mod/module.h Fri Aug 23 20:33:51 2002 | |
221 | @@ -358,7 +358,7 @@ | |
222 | #define rem_tcl_coups ((void (*) (tcl_coups *))global[210]) | |
223 | #define botname ((char *)(global[211])) | |
224 | /* 212 - 215 */ | |
225 | -/* 212: remove_gunk() -- UNUSED (drummer) */ | |
226 | +#define check_topic ((void (*)(struct chanset_t *))global[212]) | |
227 | #define check_tcl_chjn ((void (*) (const char *,const char *,int,char,int,const char *))global[213]) | |
228 | #define sanitycheck_dcc ((int (*)(char *, char *, char *, char *))global[214]) | |
229 | #define isowner ((int (*)(char *))global[215]) | |
230 | diff -ur eggdrop1.6.12.old/src/modules.c eggdrop1.6.12.new/src/modules.c | |
231 | --- eggdrop1.6.12.old/src/modules.c Sun Feb 24 02:17:57 2002 | |
232 | +++ eggdrop1.6.12.new/src/modules.c Fri Aug 23 20:34:33 2002 | |
233 | @@ -452,7 +452,7 @@ | |
234 | (Function) rem_tcl_coups, | |
235 | (Function) botname, | |
236 | /* 212 - 215 */ | |
237 | - (Function) 0, /* remove_gunk() -- UNUSED! (drummer) */ | |
238 | + (Function) check_topic, | |
239 | (Function) check_tcl_chjn, | |
240 | (Function) sanitycheck_dcc, | |
241 | (Function) isowner, | |
242 | diff -ur eggdrop1.6.12.old/src/patch.h eggdrop1.6.12.new/src/patch.h | |
243 | --- eggdrop1.6.12.old/src/patch.h Fri Jul 26 13:58:41 2002 | |
244 | +++ eggdrop1.6.12.new/src/patch.h Fri Aug 23 20:35:27 2002 | |
245 | @@ -36,7 +36,7 @@ | |
246 | * | |
247 | * | |
248 | */ | |
249 | -/* PATCH GOES HERE */ | |
250 | +patch("topicprot"); | |
251 | /* | |
252 | * | |
253 | * | |
254 | diff -ur eggdrop1.6.12.old/src/proto.h eggdrop1.6.12.new/src/proto.h | |
255 | --- eggdrop1.6.12.old/src/proto.h Tue Jan 1 22:46:36 2002 | |
256 | +++ eggdrop1.6.12.new/src/proto.h Fri Aug 23 20:35:00 2002 | |
257 | @@ -116,6 +116,7 @@ | |
258 | void set_chanlist(const char *host, struct userrec *rec); | |
259 | void clear_chanlist(void); | |
260 | void clear_chanlist_member(const char *nick); | |
261 | +void check_topic(struct chanset_t *); | |
262 | ||
263 | /* cmds.c */ | |
264 | int check_dcc_attrs(struct userrec *, int); |