basic off-channel support; restructuring how part functions are handled
[srvx.git] / src / hash.c
index f5a21cddb661ef16a982bf0fe4e2c955432bd28e..cbe43ceaa9c1dc5627ff2f176e1eaf624ce7eb00 100644 (file)
@@ -308,7 +308,6 @@ wipeout_channel(struct chanNode *cNode, time_t new_time, char **modes, unsigned
             argc++;
     }
     if (argc) {
-        extern struct userNode *opserv;
         struct mod_chanmode *change;
 
         change = mod_chanmode_alloc(argc);
@@ -325,10 +324,8 @@ wipeout_channel(struct chanNode *cNode, time_t new_time, char **modes, unsigned
             }
         }
         assert(argc == change->argc);
-        if (change->argc > 0)
-            mod_chanmode_announce(change->args[0].member->user, cNode, change);
-        else
-            mod_chanmode_announce(opserv, cNode, change);
+        change->args[0].member->modes &= ~MODE_CHANOP;
+        mod_chanmode_announce(change->args[0].member->user, cNode, change);
         mod_chanmode_free(change);
     }
 }
@@ -547,14 +544,14 @@ DelChannelUser(struct userNode* user, struct chanNode* channel, const char *reas
     if (!mNode)
         return;
 
+    for (n=0; n<pf_used; n++)
+       pf_list[n](mNode, reason);
+
     /* remove modeNode from channel and user */
     modeList_remove(&channel->members, mNode);
     modeList_remove(&user->channels, mNode);
     free(mNode);
 
-    for (n=0; n<pf_used; n++)
-        pf_list[n](user, channel, reason);
-
     if (!deleting && !channel->members.used && !channel->locks)
         DelChannel(channel);
 }