]> jfr.im git - irc/rqf/shadowircd.git/blobdiff - modules/core/m_join.c
Automated merge with ssh://taros@hg.atheme.org//hg/unofficial/shadowircd
[irc/rqf/shadowircd.git] / modules / core / m_join.c
index 73c497e8a00849f213210b87e1f618b6d926c50f..67360befe0d70f87e94143a0cb93d42ae62ba61f 100644 (file)
@@ -46,6 +46,8 @@ static int me_svsjoin(struct Client *, struct Client *, int, const char **);
 static int ms_join(struct Client *, struct Client *, int, const char **);
 static int ms_sjoin(struct Client *, struct Client *, int, const char **);
 
+struct module_modes ModuleModes;
+
 struct Message join_msgtab = {
        "JOIN", 0, 0, 0, MFLG_SLOW,
        {mg_unreg, {m_join, 2}, {ms_join, 2}, mg_ignore, mg_ignore, {m_join, 2}}
@@ -111,6 +113,9 @@ me_svsjoin(struct Client *client_p, struct Client *source_p, int parc, const cha
        if((target_p = find_person(parv[1])) == NULL)
                return 0;
 
+       if(!MyClient(target_p))
+               return 0;
+
        user_join(&me, target_p, parv[2], NULL);
        return 0;
 }
@@ -530,7 +535,7 @@ ms_sjoin(struct Client *client_p, struct Client *source_p, int parc, const char
        {
                fl = 0;
 
-               for (i = 0; i < 2; i++)
+               for (i = 0; i < 4; i++)
                {
                        if(*s == '!')
                        {
@@ -690,7 +695,7 @@ ms_sjoin(struct Client *client_p, struct Client *source_p, int parc, const char
                                para[pargs++] = target_p->name;
                        }
                }
-               if(fl & CHFL_CHANOP)
+               else if(fl & CHFL_CHANOP)
                {
                        *mbuf++ = 'o';
                        para[pargs++] = target_p->name;
@@ -740,7 +745,7 @@ ms_sjoin(struct Client *client_p, struct Client *source_p, int parc, const char
                                para[pargs++] = target_p->name;
                        }
                }
-               if(fl & CHFL_HALFOP)
+               else if(fl & CHFL_HALFOP)
                {
                        *mbuf++ = 'h';
                        para[pargs++] = target_p->name;
@@ -819,7 +824,7 @@ ms_sjoin(struct Client *client_p, struct Client *source_p, int parc, const char
                                     CheckEmpty(para[2]), CheckEmpty(para[3]));
        }
 
-       if(!joins && !(chptr->mode.mode & MODE_PERMANENT) && isnew)
+       if(!joins && !(chptr->mode.mode & ModuleModes.MODE_PERMANENT) && isnew)
        {
                destroy_channel(chptr);
 
@@ -970,7 +975,7 @@ set_final_mode(struct Mode *mode, struct Mode *oldmode)
                len = rb_sprintf(pbuf, "%d:%d ", mode->join_num, mode->join_time);
                pbuf += len;
        }
-       if(mode->forward[0] && strcmp(oldmode->forward, mode->forward) && ConfigChannel.use_forward)
+       if(mode->forward[0] && strcmp(oldmode->forward, mode->forward) && ModuleModes.MODE_FORWARD)
        {
                if(dir != MODE_ADD)
                {