]> git.pld-linux.org Git - packages/eggdrop.git/blame - eggdrop1.6.13-topicprot.patch
- updated
[packages/eggdrop.git] / eggdrop1.6.13-topicprot.patch
CommitLineData
3e9ba21e
AG
1diff -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 */
12diff -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+}
39diff -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,
73diff -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
84diff -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}
95diff -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;
114diff -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 }
157diff -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,
182diff -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 }
218diff -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])
230diff -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,
242diff -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 *
254diff -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);
This page took 0.087177 seconds and 4 git commands to generate.