SOURCES: eggdrop-vanilla-topicprot.patch (NEW) - patch for eggdrop-vanilla

duddits duddits at pld-linux.org
Mon Sep 22 17:05:38 CEST 2008


Author: duddits                      Date: Mon Sep 22 15:05:38 2008 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- patch for eggdrop-vanilla

---- Files affected:
SOURCES:
   eggdrop-vanilla-topicprot.patch (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/eggdrop-vanilla-topicprot.patch
diff -u /dev/null SOURCES/eggdrop-vanilla-topicprot.patch:1.1
--- /dev/null	Mon Sep 22 17:05:39 2008
+++ SOURCES/eggdrop-vanilla-topicprot.patch	Mon Sep 22 17:05:33 2008
@@ -0,0 +1,268 @@
+diff -burNp eggdrop1.6.19/src/chan.h eggdrop1.6.19.new/src/chan.h
+--- eggdrop1.6.19/src/chan.h	2008-02-16 22:41:03.000000000 +0100
++++ eggdrop1.6.19.new/src/chan.h	2008-09-22 11:27:30.636306556 +0200
+@@ -191,6 +191,7 @@ struct chanset_t {
+   int mode_mns_prot;     /* modes to reject                   */
+   int limit_prot;        /* desired limit                     */
+   char key_prot[121];    /* desired password                  */
++  char topic_prot[501];  /* desired topic                     */
+   char pls[21];          /* positive mode changes             */
+   char mns[21];          /* negative mode changes             */
+   char *key;             /* new key to set                    */
+diff -burNp eggdrop1.6.19/src/chanprog.c eggdrop1.6.19.new/src/chanprog.c
+--- eggdrop1.6.19/src/chanprog.c	2008-02-16 22:41:03.000000000 +0100
++++ eggdrop1.6.19.new/src/chanprog.c	2008-09-22 11:30:50.744325464 +0200
+@@ -690,3 +690,24 @@ int isowner(char *name)
+ 
+   return 0;
+ }
++
++/* If we have a protected topic and the bot is opped, halfoped,
++ * or the channel is -t, change the topic. (Sup 11May2001)
++*/
++void check_topic(struct chanset_t *chan)
++{
++  memberlist *m = NULL;
++
++  if (chan->topic_prot[0]) {
++    m = ismember(chan, botname);
++    if (!m)
++      return;
++    if (chan->channel.topic) {
++      if (!egg_strcasecmp(chan->topic_prot, chan->channel.topic))
++       return;
++    }
++    if (chan_hasop(m) || !channel_optopic(chan) || chan_hashalfop(m))
++      dprintf(DP_SERVER, "TOPIC %s :%s\n", chan->name, chan->topic_prot);
++  }
++}
++
+diff -burNp eggdrop1.6.19/src/mod/channels.mod/channels.c eggdrop1.6.19.new/src/mod/channels.mod/channels.c
+--- eggdrop1.6.19/src/mod/channels.mod/channels.c	2008-02-16 22:41:06.000000000 +0100
++++ eggdrop1.6.19.new/src/mod/channels.mod/channels.c	2008-09-22 11:34:55.161533902 +0200
+@@ -385,6 +385,7 @@ static void write_channels()
+   FILE *f;
+   char s[121], w[1024], w2[1024], name[163];
+   char need1[242], need2[242], need3[242], need4[242], need5[242];
++  char topic[1002];
+   struct chanset_t *chan;
+   struct udef_struct *ul;
+ 
+@@ -405,6 +406,7 @@ static void write_channels()
+     convert_element(chan->dname, name);
+     get_mode_protect(chan, w);
+     convert_element(w, w2);
++    convert_element(chan->topic_prot, topic);
+     convert_element(chan->need_op, need1);
+     convert_element(chan->need_invite, need2);
+     convert_element(chan->need_key, need3);
+@@ -412,7 +414,7 @@ static void write_channels()
+     convert_element(chan->need_limit, need5);
+     /* Do not indent me (adds extra spaces to chan file). */
+     fprintf(f,
+-"channel %s %s%schanmode %s idle-kick %d stopnethack-mode %d revenge-mode %d \
++"channel %s %s%schanmode %s topic %s idle-kick %d stopnethack-mode %d revenge-mode %d \
+ need-op %s need-invite %s need-key %s need-unban %s need-limit %s \
+ flood-chan %d:%d flood-ctcp %d:%d flood-join %d:%d flood-kick %d:%d \
+ flood-deop %d:%d flood-nick %d:%d aop-delay %d:%d ban-time %d exempt-time %d \
+@@ -422,7 +424,7 @@ invite-time %d %cenforcebans %cdynamicba
+ %cseen %cinactive %cdynamicexempts %cuserexempts %cdynamicinvites \
+ %cuserinvites %cnodesynch ",
+             channel_static(chan) ? "set" : "add", name, channel_static(chan) ?
+-            " " : " { ", w2, chan->idle_kick, chan->stopnethack_mode,
++	    " " : " { ", w2, topic, chan->idle_kick, chan->stopnethack_mode,
+             chan->revenge_mode, need1, need2, need3, need4, need5,
+             chan->flood_pub_thr, chan->flood_pub_time,
+             chan->flood_ctcp_thr, chan->flood_ctcp_time,
+diff -burNp eggdrop1.6.19/src/mod/channels.mod/cmdschan.c eggdrop1.6.19.new/src/mod/channels.mod/cmdschan.c
+--- eggdrop1.6.19/src/mod/channels.mod/cmdschan.c	2008-02-16 22:41:07.000000000 +0100
++++ eggdrop1.6.19.new/src/mod/channels.mod/cmdschan.c	2008-09-22 11:37:38.571477034 +0200
+@@ -1269,6 +1269,7 @@ static void cmd_chaninfo(struct userrec 
+             channel_static(chan) ? "static" : "dynamic", chan->dname);
+     get_mode_protect(chan, work);
+     dprintf(idx, "Protect modes (chanmode): %s\n", work[0] ? work : "None");
++    dprintf(idx, "Protect topic: %s\n", chan->topic_prot[0] ? chan->topic_prot : "None");
+     if (chan->idle_kick)
+       dprintf(idx, "Idle Kick after (idle-kick): %d\n", chan->idle_kick);
+     else
+diff -burNp eggdrop1.6.19/src/mod/channels.mod/help/chaninfo.help eggdrop1.6.19.new/src/mod/channels.mod/help/chaninfo.help
+--- eggdrop1.6.19/src/mod/channels.mod/help/chaninfo.help	2003-02-02 05:20:44.000000000 +0100
++++ eggdrop1.6.19.new/src/mod/channels.mod/help/chaninfo.help	2008-09-22 11:42:29.504962817 +0200
+@@ -4,6 +4,7 @@
+      It shows any of the following:
+         %bchanmode%b   These modes are enforced on the channel. Both + and -
+                    modes can be enforced.
++        %btopic%b      which topic is enforced on the channel
+         %bidle-kick%b  Kick idle users that are not +f or above on the channel
+                    after how many minutes (set this to 0 to disable).
+ %{+n}
+diff -burNp eggdrop1.6.19/src/mod/channels.mod/tclchan.c eggdrop1.6.19.new/src/mod/channels.mod/tclchan.c
+--- eggdrop1.6.19/src/mod/channels.mod/tclchan.c	2008-02-16 22:41:07.000000000 +0100
++++ eggdrop1.6.19.new/src/mod/channels.mod/tclchan.c	2008-09-22 11:46:12.888320583 +0200
+@@ -1223,6 +1223,15 @@ static int tcl_channel_modify(Tcl_Interp
+         return TCL_ERROR;
+       }
+       chan->invite_time = atoi(item[i]);
++    } else if (!strcmp(item[i], "topic")) {
++      i++;
++      if (i >= items) {
++       if (irp)
++         Tcl_AppendResult(irp, "channel topic needs argument", NULL);
++       return TCL_ERROR;
++      }
++      strncpyz(chan->topic_prot, item[i], sizeof(chan->topic_prot));
++      check_topic(chan);
+     } else if (!strcmp(item[i], "+enforcebans"))
+       chan->status |= CHAN_ENFORCEBANS;
+     else if (!strcmp(item[i], "-enforcebans"))
+diff -burNp eggdrop1.6.19/src/mod/irc.mod/chan.c eggdrop1.6.19.new/src/mod/irc.mod/chan.c
+--- eggdrop1.6.19/src/mod/irc.mod/chan.c	2008-02-16 22:41:09.000000000 +0100
++++ eggdrop1.6.19.new/src/mod/irc.mod/chan.c	2008-09-22 11:51:07.921436628 +0200
+@@ -1513,12 +1513,14 @@ static int gottopic(char *from, char *ms
+   memberlist *m;
+   struct chanset_t *chan;
+   struct userrec *u;
++  struct flag_record fr = {FR_GLOBAL | FR_CHAN, 0, 0, 0, 0, 0};
+ 
+   chname = newsplit(&msg);
+   fixcolon(msg);
+   u = get_user_by_host(from);
+   nick = splitnick(&from);
+   chan = findchan(chname);
++  get_user_flagrec(u, &fr, chname);
+   if (chan) {
+     putlog(LOG_JOIN, chan->dname, "Topic changed on %s by %s!%s: %s",
+            chan->dname, nick, from, msg);
+@@ -1527,6 +1529,8 @@ static int gottopic(char *from, char *ms
+       m->last = now;
+     set_topic(chan, msg);
+     check_tcl_topc(nick, from, u, chan->dname, msg);
++    if (egg_strcasecmp(botname, nick) && !glob_master(fr) && !chan_master(fr))
++      check_topic(chan);
+   }
+   return 0;
+ }
+@@ -1545,6 +1549,7 @@ static int got331(char *from, char *msg)
+   if (chan) {
+     set_topic(chan, NULL);
+     check_tcl_topc("*", "*", NULL, chan->dname, "");
++    check_topic(chan);
+   }
+   return 0;
+ }
+@@ -1564,6 +1569,7 @@ static int got332(char *from, char *msg)
+     fixcolon(msg);
+     set_topic(chan, msg);
+     check_tcl_topc("*", "*", NULL, chan->dname, msg);
++    check_topic(chan);
+   }
+   return 0;
+ }
+diff -burNp eggdrop1.6.19/src/mod/irc.mod/cmdsirc.c eggdrop1.6.19.new/src/mod/irc.mod/cmdsirc.c
+--- eggdrop1.6.19/src/mod/irc.mod/cmdsirc.c	2008-02-16 22:41:09.000000000 +0100
++++ eggdrop1.6.19.new/src/mod/irc.mod/cmdsirc.c	2008-09-22 11:55:02.514726004 +0200
+@@ -898,6 +898,7 @@ static void cmd_channel(struct userrec *
+ static void cmd_topic(struct userrec *u, int idx, char *par)
+ {
+   struct chanset_t *chan;
++  struct flag_record fr = {FR_GLOBAL | FR_CHAN, 0, 0, 0, 0, 0};
+ 
+   if (par[0] && (strchr(CHANMETA, par[0]) != NULL)) {
+     char *chname = newsplit(&par);
+@@ -923,6 +924,13 @@ static void cmd_topic(struct userrec *u,
+     dprintf(idx, "I'm not a channel op or halfop on %s and the channel is "
+             "+t.\n", chan->dname);
+   else {
++      if (chan->topic_prot[0]) {
++       get_user_flagrec(u, &fr, chan->dname);
++       if (!glob_master(fr) && !chan_master(fr)) {
++	 dprintf(idx, "The topic of %s is protected.\n", chan->dname);
++	 return;
++       }
++      }
+     dprintf(DP_SERVER, "TOPIC %s :%s\n", chan->name, par);
+     dprintf(idx, "Changing topic...\n");
+     putlog(LOG_CMDS, "*", "#%s# (%s) topic %s", dcc[idx].nick,
+diff -burNp eggdrop1.6.19/src/mod/irc.mod/mode.c eggdrop1.6.19.new/src/mod/irc.mod/mode.c
+--- eggdrop1.6.19/src/mod/irc.mod/mode.c	2008-02-16 22:41:09.000000000 +0100
++++ eggdrop1.6.19.new/src/mod/irc.mod/mode.c	2008-09-22 12:00:05.134685721 +0200
+@@ -460,8 +460,10 @@ static void got_op(struct chanset_t *cha
+     }
+   }
+   m->flags |= WASOP;
+-  if (check_chan)
++  if (check_chan) {
+     recheck_channel(chan, 1);
++    check_topic(chan);
++  }
+ }
+ 
+ static void got_halfop(struct chanset_t *chan, char *nick, char *from,
+@@ -549,8 +551,10 @@ static void got_halfop(struct chanset_t 
+     }
+   }
+   m->flags |= WASHALFOP;
+-  if (check_chan)
++  if (check_chan) {
+     recheck_channel(chan, 1);
++    check_topic(chan);
++  }
+ }
+ 
+ static void got_deop(struct chanset_t *chan, char *nick, char *from,
+@@ -1246,6 +1250,8 @@ static int gotmode(char *from, char *ori
+                      (chan->mode_mns_prot & todo)))
+               add_mode(chan, ms2[0] == '+' ? '-' : '+', *chg, "");
+           }
++	  if ((ms2[0] == '-') && ((*chg == 't') || (*chg == 'h')))
++            check_topic(chan);
+         }
+         chg++;
+       }
+diff -burNp eggdrop1.6.19/src/mod/module.h eggdrop1.6.19.new/src/mod/module.h
+--- eggdrop1.6.19/src/mod/module.h	2008-02-16 22:41:06.000000000 +0100
++++ eggdrop1.6.19.new/src/mod/module.h	2008-09-22 12:01:11.964804368 +0200
+@@ -361,7 +361,7 @@
+ #define rem_tcl_coups ((void (*) (tcl_coups *))global[210])
+ #define botname ((char *)(global[211]))
+ /* 212 - 215 */
+-/* 212: remove_gunk() -- UNUSED (drummer) */
++#define check_topic ((void (*)(struct chanset_t *))global[212])
+ #define check_tcl_chjn ((void (*) (const char *,const char *,int,char,int,const char *))global[213])
+ #define sanitycheck_dcc ((int (*)(char *, char *, char *, char *))global[214])
+ #define isowner ((int (*)(char *))global[215])
+diff -burNp eggdrop1.6.19/src/modules.c eggdrop1.6.19.new/src/modules.c
+--- eggdrop1.6.19/src/modules.c	2008-02-16 22:41:04.000000000 +0100
++++ eggdrop1.6.19.new/src/modules.c	2008-09-22 12:09:57.119525901 +0200
+@@ -461,7 +461,7 @@ Function global_table[] = {
+   (Function) rem_tcl_coups,
+   (Function) botname,
+   /* 212 - 215 */
+-  (Function) 0,                   /* remove_gunk() -- UNUSED! (drummer)  */
++  (Function) check_topic,
+   (Function) check_tcl_chjn,
+   (Function) sanitycheck_dcc,
+   (Function) isowner,
+diff -burNp eggdrop1.6.19/src/patch.h eggdrop1.6.19.new/src/patch.h
+--- eggdrop1.6.19/src/patch.h	2008-04-19 06:21:20.000000000 +0200
++++ eggdrop1.6.19.new/src/patch.h	2008-09-22 12:11:00.141439071 +0200
+@@ -36,7 +36,7 @@
+  *
+  *
+  */
+-/* PATCH GOES HERE */
++patch("topicprot");
+ /*
+  *
+  *
+diff -burNp eggdrop1.6.19/src/proto.h eggdrop1.6.19.new/src/proto.h
+--- eggdrop1.6.19/src/proto.h	2008-02-16 22:41:04.000000000 +0100
++++ eggdrop1.6.19.new/src/proto.h	2008-09-22 12:12:19.684612158 +0200
+@@ -114,6 +114,7 @@ void check_timers();
+ void set_chanlist(const char *host, struct userrec *rec);
+ void clear_chanlist(void);
+ void clear_chanlist_member(const char *nick);
++void check_topic(struct chanset_t *);
+ 
+ /* cmds.c */
+ int check_dcc_attrs(struct userrec *, int);
================================================================


More information about the pld-cvs-commit mailing list