فهرست منبع

* DRY channel joining

Bryan Drewery 14 سال پیش
والد
کامیت
bc60c7936d
3فایلهای تغییر یافته به همراه15 افزوده شده و 11 حذف شده
  1. 1 5
      src/mod/channels.mod/chanmisc.c
  2. 13 6
      src/mod/irc.mod/irc.c
  3. 1 0
      src/mod/irc.mod/irc.h

+ 1 - 5
src/mod/channels.mod/chanmisc.c

@@ -830,11 +830,7 @@ int channel_modify(char *result, struct chanset_t *chan, int items, char **item,
   if (!conf.bot->hub && (chan != chanset_default)) {
     // Check if groups changed or +/-backup set
     if (changed_groups || ((old_status ^ chan->status) & (CHAN_INACTIVE | CHAN_BACKUP))) {
-      if (!shouldjoin(chan) && (chan->ircnet_status & (CHAN_ACTIVE | CHAN_PEND))) {
-        putlog(LOG_DEBUG, "*", "In %s, but I shouldn't be, parting...", chan->dname);
-        dprintf(DP_SERVER, "PART %s\n", chan->name[0] ? chan->name : chan->dname);
-      } else if (shouldjoin(chan))
-        join_chan(chan);
+      check_shouldjoin(chan);
     }
     if (me_op(chan)) {
       if ((old_status ^ chan->status) & (CHAN_ENFORCEBANS|CHAN_NOUSERBANS|CHAN_DYNAMICBANS|CHAN_NOUSEREXEMPTS|CHAN_NOUSERINVITES|CHAN_DYNAMICEXEMPTS|CHAN_DYNAMICINVITES)) {

+ 13 - 6
src/mod/irc.mod/irc.c

@@ -1553,13 +1553,21 @@ raise_limit(struct chanset_t *chan)
 
 }
 
-static void
-check_expired_chanstuff(struct chanset_t *chan)
+void check_shouldjoin(struct chanset_t* chan)
 {
   if ((channel_active(chan) || channel_pending(chan)) && !shouldjoin(chan)) {
     sdprintf("Active/Pending in %s but I shouldn't be there, parting...", chan->dname);
-    dprintf(DP_MODE, "PART %s\n", chan->name[0] ? chan->name : chan->dname);
-  } else if (channel_active(chan)) {
+    dprintf(DP_SERVER, "PART %s\n", chan->name[0] ? chan->name : chan->dname);
+  } else if (shouldjoin(chan)) {
+    join_chan(chan);
+  }
+}
+
+static void
+check_expired_chanstuff(struct chanset_t *chan)
+{
+  check_shouldjoin(chan);
+  if (channel_active(chan) && shouldjoin(chan)) {
     masklist *b = NULL, *e = NULL;
     memberlist *m = NULL, *n = NULL;
     char s[UHOSTLEN] = "";
@@ -1670,8 +1678,7 @@ check_expired_chanstuff(struct chanset_t *chan)
     // Update minutely
     chan->channel.splitmembers = splitmembers;
     check_lonely_channel(chan);
-  } else if (shouldjoin(chan))
-    join_chan(chan);
+  }
 }
 
 void

+ 1 - 0
src/mod/irc.mod/irc.h

@@ -145,6 +145,7 @@ void irc_report(int, int);
 void flush_modes();
 void reset_chan_info(struct chanset_t *);
 char *getnick(const char *, struct chanset_t *);
+void check_shouldjoin(struct chanset_t* chan);
 
 extern int		max_bans, max_exempts, max_invites, max_modes;
 extern bool		use_354, include_lk;