]> git.pld-linux.org Git - packages/eggdrop.git/blob - eggdrop-topicprot.patch
- more ru_RU -> ru, uk_UA -> uk changes
[packages/eggdrop.git] / eggdrop-topicprot.patch
1 diff -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 @@
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                    */
12 diff -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;
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 -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 @@
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 @@ -400,6 +401,7 @@
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 @@ -407,7 +409,7 @@
59      convert_element(chan->need_limit, need5);
60      /* Do not indent me (adds extra spaces to chan file). */
61      fprintf(f,
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 ",
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,
76 diff -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 @@
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
87 diff -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
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}
98 diff -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
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"))
117 diff -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 @@
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);
135 @@ -1514,6 +1516,8 @@
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  }
144 @@ -1532,6 +1536,7 @@
145    if (chan) {
146      set_topic(chan, NULL);
147      check_tcl_topc("*", "*", NULL, chan->dname, "");
148 +    check_topic(chan);
149    }
150    return 0;
151  }
152 @@ -1551,6 +1556,7 @@
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  }
160 diff -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 @@
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);
171 @@ -925,6 +926,13 @@
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,
185 diff -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
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,
212 @@ -1241,6 +1245,8 @@
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        }
221 diff -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 @@
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])
233 diff -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
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,
245 diff -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
248 @@ -36,7 +36,7 @@
249   *
250   *
251   */
252 -/* PATCH GOES HERE */
253 +patch("topicprot");
254  /*
255   *
256   *
257 diff -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
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.040749 seconds and 3 git commands to generate.