]> git.pld-linux.org Git - packages/eggdrop.git/blame - eggdrop-topicprot.patch
- refresh config.sub
[packages/eggdrop.git] / eggdrop-topicprot.patch
CommitLineData
1338a78c
AG
1diff -urN eggdrop1.6.15/src/chan.h eggdrop1.6.15-topicprot/src/chan.h
2--- eggdrop1.6.15/src/chan.h Mon May 5 00:05:32 2003
3+++ eggdrop1.6.15-topicprot/src/chan.h Wed May 7 10:51:30 2003
4@@ -185,6 +185,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 char pls[21]; /* positive mode changes */
10 char mns[21]; /* negative mode changes */
11 char *key; /* new key to set */
12diff -urN eggdrop1.6.15/src/chanprog.c eggdrop1.6.15-topicprot/src/chanprog.c
13--- eggdrop1.6.15/src/chanprog.c Mon May 5 00:05:32 2003
14+++ eggdrop1.6.15-topicprot/src/chanprog.c Wed May 7 10:53:11 2003
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+}
39diff -urN eggdrop1.6.15/src/mod/channels.mod/channels.c eggdrop1.6.15-topicprot/src/mod/channels.mod/channels.c
40--- eggdrop1.6.15/src/mod/channels.mod/channels.c Mon May 5 00:05:32 2003
41+++ eggdrop1.6.15-topicprot/src/mod/channels.mod/channels.c Wed May 7 11:07:16 2003
42@@ -364,6 +364,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@@ -384,13 +385,14 @@
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,
61- "channel %s %s%schanmode %s idle-kick %d stopnethack-mode %d \
62+ "channel %s %s%schanmode %s topic %s idle-kick %d stopnethack-mode %d \
63 revenge-mode %d need-op %s need-invite %s need-key %s \
64 need-unban %s need-limit %s flood-chan %d:%d flood-ctcp %d:%d \
65 flood-join %d:%d flood-kick %d:%d flood-deop %d:%d \
66@@ -402,7 +404,7 @@
67 %cdynamicexempts %cuserexempts %cdynamicinvites \
68 %cuserinvites %cnodesynch ",
69 channel_static(chan) ? "set" : "add", name, channel_static(chan) ?
70- " " : " { ", w2, chan->idle_kick, chan->stopnethack_mode,
71+ " " : " { ", w2, topic, chan->idle_kick, chan->stopnethack_mode,
72 chan->revenge_mode, need1, need2, need3, need4, need5,
73 chan->flood_pub_thr, chan->flood_pub_time,
74 chan->flood_ctcp_thr, chan->flood_ctcp_time,
75diff -urN eggdrop1.6.15/src/mod/channels.mod/cmdschan.c eggdrop1.6.15-topicprot/src/mod/channels.mod/cmdschan.c
76--- eggdrop1.6.15/src/mod/channels.mod/cmdschan.c Mon May 5 00:05:32 2003
77+++ eggdrop1.6.15-topicprot/src/mod/channels.mod/cmdschan.c Wed May 7 11:09:01 2003
78@@ -1241,6 +1241,7 @@
79 channel_static(chan) ? "static" : "dynamic", chan->dname);
80 get_mode_protect(chan, work);
81 dprintf(idx, "Protect modes (chanmode): %s\n", work[0] ? work : "None");
82+ dprintf(idx, "Protect topic: %s\n", chan->topic_prot[0] ? chan->topic_prot : "None");
83 if (chan->idle_kick)
84 dprintf(idx, "Idle Kick after (idle-kick): %d\n", chan->idle_kick);
85 else
86diff -urN eggdrop1.6.15/src/mod/channels.mod/help/chaninfo.help eggdrop1.6.15-topicprot/src/mod/channels.mod/help/chaninfo.help
87--- eggdrop1.6.15/src/mod/channels.mod/help/chaninfo.help Mon May 5 00:05:32 2003
88+++ eggdrop1.6.15-topicprot/src/mod/channels.mod/help/chaninfo.help Wed May 7 11:09:44 2003
89@@ -4,6 +4,7 @@
90 It shows any of the following:
91 %bchanmode%b These modes are enforced on the channel. Both + and -
92 modes can be enforced.
93+ %btopic%b which topic is enforced on the channel
94 %bidle-kick%b Kick idle users that are not +f or above on the channel
95 after how many minutes (set this to 0 to disable).
96 %{+n}
97diff -urN eggdrop1.6.15/src/mod/channels.mod/tclchan.c eggdrop1.6.15-topicprot/src/mod/channels.mod/tclchan.c
98--- eggdrop1.6.15/src/mod/channels.mod/tclchan.c Mon May 5 00:05:32 2003
99+++ eggdrop1.6.15-topicprot/src/mod/channels.mod/tclchan.c Wed May 7 11:10:59 2003
100@@ -1223,6 +1223,15 @@
101 return TCL_ERROR;
102 }
103 chan->invite_time = atoi(item[i]);
104+ } else if (!strcmp(item[i], "topic")) {
105+ i++;
106+ if (i >= items) {
107+ if (irp)
108+ Tcl_AppendResult(irp, "channel topic needs argument", NULL);
109+ return TCL_ERROR;
110+ }
111+ strncpyz(chan->topic_prot, item[i], sizeof(chan->topic_prot));
112+ check_topic(chan);
113 } else if (!strcmp(item[i], "+enforcebans"))
114 chan->status |= CHAN_ENFORCEBANS;
115 else if (!strcmp(item[i], "-enforcebans"))
116diff -urN eggdrop1.6.15/src/mod/irc.mod/chan.c eggdrop1.6.15-topicprot/src/mod/irc.mod/chan.c
117--- eggdrop1.6.15/src/mod/irc.mod/chan.c Mon May 5 00:05:32 2003
118+++ eggdrop1.6.15-topicprot/src/mod/irc.mod/chan.c Wed May 7 11:13:46 2003
119@@ -1473,12 +1473,14 @@
120 memberlist *m;
121 struct chanset_t *chan;
122 struct userrec *u;
123+ struct flag_record fr = {FR_GLOBAL | FR_CHAN, 0, 0, 0, 0, 0};
124
125 chname = newsplit(&msg);
126 fixcolon(msg);
127 u = get_user_by_host(from);
128 nick = splitnick(&from);
129 chan = findchan(chname);
130+ get_user_flagrec(u, &fr, chname);
131 if (chan) {
132 putlog(LOG_JOIN, chan->dname, "Topic changed on %s by %s!%s: %s",
133 chan->dname, nick, from, msg);
134@@ -1487,6 +1489,8 @@
135 m->last = now;
136 set_topic(chan, msg);
137 check_tcl_topc(nick, from, u, chan->dname, msg);
138+ if (egg_strcasecmp(botname, nick) && !glob_master(fr) && !chan_master(fr))
139+ check_topic(chan);
140 }
141 return 0;
142 }
143@@ -1505,6 +1509,7 @@
144 if (chan) {
145 set_topic(chan, NULL);
146 check_tcl_topc("*", "*", NULL, chan->dname, "");
147+ check_topic(chan);
148 }
149 return 0;
150 }
151@@ -1524,6 +1529,7 @@
152 fixcolon(msg);
153 set_topic(chan, msg);
154 check_tcl_topc("*", "*", NULL, chan->dname, msg);
155+ check_topic(chan);
156 }
157 return 0;
158 }
159diff -urN eggdrop1.6.15/src/mod/irc.mod/cmdsirc.c eggdrop1.6.15-topicprot/src/mod/irc.mod/cmdsirc.c
160--- eggdrop1.6.15/src/mod/irc.mod/cmdsirc.c Mon May 5 00:05:32 2003
161+++ eggdrop1.6.15-topicprot/src/mod/irc.mod/cmdsirc.c Wed May 7 11:15:35 2003
162@@ -895,6 +895,7 @@
163 static void cmd_topic(struct userrec *u, int idx, char *par)
164 {
165 struct chanset_t *chan;
166+ struct flag_record fr = {FR_GLOBAL | FR_CHAN, 0, 0, 0, 0, 0};
167
168 if (par[0] && (strchr(CHANMETA, par[0]) != NULL)) {
169 char *chname = newsplit(&par);
170@@ -920,6 +921,13 @@
171 dprintf(idx, "I'm not a channel op or halfop on %s and the channel is "
172 "+t.\n", chan->dname);
173 else {
174+ if (chan->topic_prot[0]) {
175+ get_user_flagrec(u, &fr, chan->dname);
176+ if (!glob_master(fr) && !chan_master(fr)) {
177+ dprintf(idx, "The topic of %s is protected.\n", chan->dname);
178+ return;
179+ }
180+ }
181 dprintf(DP_SERVER, "TOPIC %s :%s\n", chan->name, par);
182 dprintf(idx, "Changing topic...\n");
183 putlog(LOG_CMDS, "*", "#%s# (%s) topic %s", dcc[idx].nick,
184diff -urN eggdrop1.6.15/src/mod/irc.mod/mode.c eggdrop1.6.15-topicprot/src/mod/irc.mod/mode.c
185--- eggdrop1.6.15/src/mod/irc.mod/mode.c Mon May 5 00:05:32 2003
186+++ eggdrop1.6.15-topicprot/src/mod/irc.mod/mode.c Wed May 7 11:18:41 2003
187@@ -460,8 +460,10 @@
188 }
189 }
190 m->flags |= WASOP;
191- if (check_chan)
192+ if (check_chan) {
193 recheck_channel(chan, 1);
194+ check_topic(chan);
195+ }
196 }
197
198 static void got_halfop(struct chanset_t *chan, char *nick, char *from,
199@@ -549,8 +551,10 @@
200 }
201 }
202 m->flags |= WASHALFOP;
203- if (check_chan)
204+ if (check_chan) {
205 recheck_channel(chan, 1);
206+ check_topic(chan);
207+ }
208 }
209
210 static void got_deop(struct chanset_t *chan, char *nick, char *from,
211@@ -1223,6 +1227,8 @@
212 (chan->mode_mns_prot & todo)))
213 add_mode(chan, ms2[0] == '+' ? '-' : '+', *chg, "");
214 }
215+ if ((ms2[0] == '-') && ((*chg == 't') || (*chg == 'h')))
216+ check_topic(chan);
217 }
218 chg++;
219 }
220diff -urN eggdrop1.6.15/src/mod/module.h eggdrop1.6.15-topicprot/src/mod/module.h
221--- eggdrop1.6.15/src/mod/module.h Mon May 5 00:05:32 2003
222+++ eggdrop1.6.15-topicprot/src/mod/module.h Wed May 7 11:19:36 2003
223@@ -368,7 +368,7 @@
224 #define rem_tcl_coups ((void (*) (tcl_coups *))global[210])
225 #define botname ((char *)(global[211]))
226 /* 212 - 215 */
227-/* 212: remove_gunk() -- UNUSED (drummer) */
228+#define check_topic ((void (*)(struct chanset_t *))global[212])
229 #define check_tcl_chjn ((void (*) (const char *,const char *,int,char,int,const char *))global[213])
230 #define sanitycheck_dcc ((int (*)(char *, char *, char *, char *))global[214])
231 #define isowner ((int (*)(char *))global[215])
232diff -urN eggdrop1.6.15/src/modules.c eggdrop1.6.15-topicprot/src/modules.c
233--- eggdrop1.6.15/src/modules.c Mon May 5 00:05:33 2003
234+++ eggdrop1.6.15-topicprot/src/modules.c Wed May 7 11:20:12 2003
235@@ -461,7 +461,7 @@
236 (Function) rem_tcl_coups,
237 (Function) botname,
238 /* 212 - 215 */
239- (Function) 0, /* remove_gunk() -- UNUSED! (drummer) */
240+ (Function) check_topic,
241 (Function) check_tcl_chjn,
242 (Function) sanitycheck_dcc,
243 (Function) isowner,
244diff -urN eggdrop1.6.15/src/patch.h eggdrop1.6.15-topicprot/src/patch.h
245--- eggdrop1.6.15/src/patch.h Mon May 5 00:08:01 2003
246+++ eggdrop1.6.15-topicprot/src/patch.h Wed May 7 11:21:14 2003
247@@ -36,7 +36,7 @@
248 *
249 *
250 */
251-/* PATCH GOES HERE */
252+patch("topicprot");
253 /*
254 *
255 *
256diff -urN eggdrop1.6.15/src/proto.h eggdrop1.6.15-topicprot/src/proto.h
257--- eggdrop1.6.15/src/proto.h Mon May 5 00:05:33 2003
258+++ eggdrop1.6.15-topicprot/src/proto.h Wed May 7 11:21:48 2003
259@@ -116,6 +116,7 @@
260 void set_chanlist(const char *host, struct userrec *rec);
261 void clear_chanlist(void);
262 void clear_chanlist_member(const char *nick);
263+void check_topic(struct chanset_t *);
264
265 /* cmds.c */
266 int check_dcc_attrs(struct userrec *, int);
This page took 0.089574 seconds and 4 git commands to generate.