]> git.pld-linux.org Git - packages/eggdrop.git/blame - eggdrop-topicprot.patch
- more ru_RU -> ru, uk_UA -> uk changes
[packages/eggdrop.git] / eggdrop-topicprot.patch
CommitLineData
9f896ea6
AG
1diff -burN eggdrop1.6.17.orig/src/chan.h eggdrop1.6.17/src/chan.h
2--- eggdrop1.6.17.orig/src/chan.h 2004-11-01 12:48:53.752584640 +0100
3+++ eggdrop1.6.17/src/chan.h 2004-11-01 13:38:31.701867536 +0100
4@@ -190,6 +190,7 @@
1338a78c
AG
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 */
9f896ea6
AG
12diff -burN eggdrop1.6.17.orig/src/chanprog.c eggdrop1.6.17/src/chanprog.c
13--- eggdrop1.6.17.orig/src/chanprog.c 2004-11-01 12:48:53.766582512 +0100
14+++ eggdrop1.6.17/src/chanprog.c 2004-11-01 13:38:31.704867080 +0100
15@@ -690,3 +690,23 @@
16
17 return 0;
1338a78c
AG
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+}
9f896ea6
AG
39diff -burN eggdrop1.6.17.orig/src/mod/channels.mod/channels.c eggdrop1.6.17/src/mod/channels.mod/channels.c
40--- eggdrop1.6.17.orig/src/mod/channels.mod/channels.c 2004-11-01 12:48:53.673596648 +0100
41+++ eggdrop1.6.17/src/mod/channels.mod/channels.c 2004-11-01 13:39:57.089886584 +0100
42@@ -380,6 +380,7 @@
1338a78c
AG
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
9f896ea6 50@@ -400,6 +401,7 @@
1338a78c
AG
51 convert_element(chan->dname, name);
52 get_mode_protect(chan, w);
53 convert_element(w, w2);
eef4670e 54+ convert_element(chan->topic_prot, topic);
1338a78c
AG
55 convert_element(chan->need_op, need1);
56 convert_element(chan->need_invite, need2);
57 convert_element(chan->need_key, need3);
9f896ea6 58@@ -407,7 +409,7 @@
1338a78c 59 convert_element(chan->need_limit, need5);
9f896ea6 60 /* Do not indent me (adds extra spaces to chan file). */
1338a78c 61 fprintf(f,
9f896ea6
AG
62-"channel %s %s%schanmode %s idle-kick %d stopnethack-mode %d revenge-mode %d \
63+"channel %s %s%schanmode %s topic %s idle-kick %d stopnethack-mode %d revenge-mode %d \
64 need-op %s need-invite %s need-key %s need-unban %s need-limit %s \
65 flood-chan %d:%d flood-ctcp %d:%d flood-join %d:%d flood-kick %d:%d \
66 flood-deop %d:%d flood-nick %d:%d aop-delay %d:%d ban-time %d exempt-time %d \
67@@ -417,7 +419,7 @@
68 %cseen %cinactive %cdynamicexempts %cuserexempts %cdynamicinvites \
69 %cuserinvites %cnodesynch ",
1338a78c
AG
70 channel_static(chan) ? "set" : "add", name, channel_static(chan) ?
71- " " : " { ", w2, chan->idle_kick, chan->stopnethack_mode,
72+ " " : " { ", w2, topic, chan->idle_kick, chan->stopnethack_mode,
73 chan->revenge_mode, need1, need2, need3, need4, need5,
74 chan->flood_pub_thr, chan->flood_pub_time,
75 chan->flood_ctcp_thr, chan->flood_ctcp_time,
9f896ea6
AG
76diff -burN eggdrop1.6.17.orig/src/mod/channels.mod/cmdschan.c eggdrop1.6.17/src/mod/channels.mod/cmdschan.c
77--- eggdrop1.6.17.orig/src/mod/channels.mod/cmdschan.c 2004-11-01 12:48:53.670597104 +0100
78+++ eggdrop1.6.17/src/mod/channels.mod/cmdschan.c 2004-11-01 13:38:31.711866016 +0100
79@@ -1269,6 +1269,7 @@
1338a78c
AG
80 channel_static(chan) ? "static" : "dynamic", chan->dname);
81 get_mode_protect(chan, work);
82 dprintf(idx, "Protect modes (chanmode): %s\n", work[0] ? work : "None");
83+ dprintf(idx, "Protect topic: %s\n", chan->topic_prot[0] ? chan->topic_prot : "None");
84 if (chan->idle_kick)
85 dprintf(idx, "Idle Kick after (idle-kick): %d\n", chan->idle_kick);
86 else
9f896ea6
AG
87diff -burN eggdrop1.6.17.orig/src/mod/channels.mod/help/chaninfo.help eggdrop1.6.17/src/mod/channels.mod/help/chaninfo.help
88--- eggdrop1.6.17.orig/src/mod/channels.mod/help/chaninfo.help 2004-11-01 12:48:53.669597256 +0100
89+++ eggdrop1.6.17/src/mod/channels.mod/help/chaninfo.help 2004-11-01 13:38:31.713865712 +0100
1338a78c
AG
90@@ -4,6 +4,7 @@
91 It shows any of the following:
92 %bchanmode%b These modes are enforced on the channel. Both + and -
93 modes can be enforced.
94+ %btopic%b which topic is enforced on the channel
95 %bidle-kick%b Kick idle users that are not +f or above on the channel
96 after how many minutes (set this to 0 to disable).
97 %{+n}
9f896ea6
AG
98diff -burN eggdrop1.6.17.orig/src/mod/channels.mod/tclchan.c eggdrop1.6.17/src/mod/channels.mod/tclchan.c
99--- eggdrop1.6.17.orig/src/mod/channels.mod/tclchan.c 2004-11-01 12:48:53.671596952 +0100
100+++ eggdrop1.6.17/src/mod/channels.mod/tclchan.c 2004-11-01 13:38:31.716865256 +0100
1338a78c
AG
101@@ -1223,6 +1223,15 @@
102 return TCL_ERROR;
103 }
104 chan->invite_time = atoi(item[i]);
105+ } else if (!strcmp(item[i], "topic")) {
106+ i++;
107+ if (i >= items) {
108+ if (irp)
109+ Tcl_AppendResult(irp, "channel topic needs argument", NULL);
110+ return TCL_ERROR;
111+ }
112+ strncpyz(chan->topic_prot, item[i], sizeof(chan->topic_prot));
113+ check_topic(chan);
114 } else if (!strcmp(item[i], "+enforcebans"))
115 chan->status |= CHAN_ENFORCEBANS;
116 else if (!strcmp(item[i], "-enforcebans"))
9f896ea6
AG
117diff -burN eggdrop1.6.17.orig/src/mod/irc.mod/chan.c eggdrop1.6.17/src/mod/irc.mod/chan.c
118--- eggdrop1.6.17.orig/src/mod/irc.mod/chan.c 2004-11-01 12:48:53.738586768 +0100
119+++ eggdrop1.6.17/src/mod/irc.mod/chan.c 2004-11-01 13:38:31.721864496 +0100
120@@ -1500,12 +1500,14 @@
1338a78c
AG
121 memberlist *m;
122 struct chanset_t *chan;
123 struct userrec *u;
124+ struct flag_record fr = {FR_GLOBAL | FR_CHAN, 0, 0, 0, 0, 0};
125
126 chname = newsplit(&msg);
127 fixcolon(msg);
128 u = get_user_by_host(from);
129 nick = splitnick(&from);
130 chan = findchan(chname);
131+ get_user_flagrec(u, &fr, chname);
132 if (chan) {
133 putlog(LOG_JOIN, chan->dname, "Topic changed on %s by %s!%s: %s",
134 chan->dname, nick, from, msg);
9f896ea6 135@@ -1514,6 +1516,8 @@
1338a78c
AG
136 m->last = now;
137 set_topic(chan, msg);
138 check_tcl_topc(nick, from, u, chan->dname, msg);
139+ if (egg_strcasecmp(botname, nick) && !glob_master(fr) && !chan_master(fr))
140+ check_topic(chan);
141 }
142 return 0;
143 }
9f896ea6 144@@ -1532,6 +1536,7 @@
1338a78c
AG
145 if (chan) {
146 set_topic(chan, NULL);
147 check_tcl_topc("*", "*", NULL, chan->dname, "");
148+ check_topic(chan);
149 }
150 return 0;
151 }
9f896ea6 152@@ -1551,6 +1556,7 @@
1338a78c
AG
153 fixcolon(msg);
154 set_topic(chan, msg);
155 check_tcl_topc("*", "*", NULL, chan->dname, msg);
156+ check_topic(chan);
157 }
158 return 0;
159 }
9f896ea6
AG
160diff -burN eggdrop1.6.17.orig/src/mod/irc.mod/cmdsirc.c eggdrop1.6.17/src/mod/irc.mod/cmdsirc.c
161--- eggdrop1.6.17.orig/src/mod/irc.mod/cmdsirc.c 2004-11-01 12:48:53.740586464 +0100
162+++ eggdrop1.6.17/src/mod/irc.mod/cmdsirc.c 2004-11-01 13:38:31.724864040 +0100
163@@ -900,6 +900,7 @@
1338a78c
AG
164 static void cmd_topic(struct userrec *u, int idx, char *par)
165 {
166 struct chanset_t *chan;
167+ struct flag_record fr = {FR_GLOBAL | FR_CHAN, 0, 0, 0, 0, 0};
168
169 if (par[0] && (strchr(CHANMETA, par[0]) != NULL)) {
170 char *chname = newsplit(&par);
9f896ea6 171@@ -925,6 +926,13 @@
1338a78c
AG
172 dprintf(idx, "I'm not a channel op or halfop on %s and the channel is "
173 "+t.\n", chan->dname);
174 else {
175+ if (chan->topic_prot[0]) {
176+ get_user_flagrec(u, &fr, chan->dname);
177+ if (!glob_master(fr) && !chan_master(fr)) {
178+ dprintf(idx, "The topic of %s is protected.\n", chan->dname);
179+ return;
180+ }
181+ }
182 dprintf(DP_SERVER, "TOPIC %s :%s\n", chan->name, par);
183 dprintf(idx, "Changing topic...\n");
184 putlog(LOG_CMDS, "*", "#%s# (%s) topic %s", dcc[idx].nick,
9f896ea6
AG
185diff -burN eggdrop1.6.17.orig/src/mod/irc.mod/mode.c eggdrop1.6.17/src/mod/irc.mod/mode.c
186--- eggdrop1.6.17.orig/src/mod/irc.mod/mode.c 2004-11-01 12:48:53.739586616 +0100
187+++ eggdrop1.6.17/src/mod/irc.mod/mode.c 2004-11-01 13:38:31.727863584 +0100
1338a78c
AG
188@@ -460,8 +460,10 @@
189 }
190 }
191 m->flags |= WASOP;
192- if (check_chan)
193+ if (check_chan) {
194 recheck_channel(chan, 1);
195+ check_topic(chan);
196+ }
197 }
198
199 static void got_halfop(struct chanset_t *chan, char *nick, char *from,
200@@ -549,8 +551,10 @@
201 }
202 }
203 m->flags |= WASHALFOP;
204- if (check_chan)
205+ if (check_chan) {
206 recheck_channel(chan, 1);
207+ check_topic(chan);
208+ }
209 }
210
211 static void got_deop(struct chanset_t *chan, char *nick, char *from,
9f896ea6 212@@ -1241,6 +1245,8 @@
1338a78c
AG
213 (chan->mode_mns_prot & todo)))
214 add_mode(chan, ms2[0] == '+' ? '-' : '+', *chg, "");
215 }
216+ if ((ms2[0] == '-') && ((*chg == 't') || (*chg == 'h')))
217+ check_topic(chan);
218 }
219 chg++;
220 }
9f896ea6
AG
221diff -burN eggdrop1.6.17.orig/src/mod/module.h eggdrop1.6.17/src/mod/module.h
222--- eggdrop1.6.17.orig/src/mod/module.h 2004-11-01 12:48:53.681595432 +0100
223+++ eggdrop1.6.17/src/mod/module.h 2004-11-01 13:38:31.729863280 +0100
224@@ -361,7 +361,7 @@
1338a78c
AG
225 #define rem_tcl_coups ((void (*) (tcl_coups *))global[210])
226 #define botname ((char *)(global[211]))
227 /* 212 - 215 */
228-/* 212: remove_gunk() -- UNUSED (drummer) */
229+#define check_topic ((void (*)(struct chanset_t *))global[212])
230 #define check_tcl_chjn ((void (*) (const char *,const char *,int,char,int,const char *))global[213])
231 #define sanitycheck_dcc ((int (*)(char *, char *, char *, char *))global[214])
232 #define isowner ((int (*)(char *))global[215])
9f896ea6
AG
233diff -burN eggdrop1.6.17.orig/src/modules.c eggdrop1.6.17/src/modules.c
234--- eggdrop1.6.17.orig/src/modules.c 2004-11-01 12:48:53.762583120 +0100
235+++ eggdrop1.6.17/src/modules.c 2004-11-01 13:38:31.732862824 +0100
1338a78c
AG
236@@ -461,7 +461,7 @@
237 (Function) rem_tcl_coups,
238 (Function) botname,
239 /* 212 - 215 */
240- (Function) 0, /* remove_gunk() -- UNUSED! (drummer) */
241+ (Function) check_topic,
242 (Function) check_tcl_chjn,
243 (Function) sanitycheck_dcc,
244 (Function) isowner,
9f896ea6
AG
245diff -burN eggdrop1.6.17.orig/src/patch.h eggdrop1.6.17/src/patch.h
246--- eggdrop1.6.17.orig/src/patch.h 2004-11-01 12:48:53.765582664 +0100
247+++ eggdrop1.6.17/src/patch.h 2004-11-01 13:38:31.734862520 +0100
1338a78c
AG
248@@ -36,7 +36,7 @@
249 *
250 *
251 */
252-/* PATCH GOES HERE */
253+patch("topicprot");
254 /*
255 *
256 *
9f896ea6
AG
257diff -burN eggdrop1.6.17.orig/src/proto.h eggdrop1.6.17/src/proto.h
258--- eggdrop1.6.17.orig/src/proto.h 2004-11-01 12:48:53.769582056 +0100
259+++ eggdrop1.6.17/src/proto.h 2004-11-01 13:38:31.735862368 +0100
1338a78c
AG
260@@ -116,6 +116,7 @@
261 void set_chanlist(const char *host, struct userrec *rec);
262 void clear_chanlist(void);
263 void clear_chanlist_member(const char *nick);
264+void check_topic(struct chanset_t *);
265
266 /* cmds.c */
267 int check_dcc_attrs(struct userrec *, int);
This page took 0.087529 seconds and 4 git commands to generate.