* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
- * $Id: m_join.c 3494 2007-05-27 13:07:27Z jilles $
*/
#include "stdinc.h"
* me_svsjoin - small function to allow services to forcejoin clients, mainly for ns_ajoin
* parv[1] = user to act on (join to a channel)
* parv[2] = channel
+ * This does allow opers to "forcejoin" users to channels with operserv/raw or by writing a
+ * custom module (where they can make it not log anything), but the former bitches that it's
+ * being used and the latter...Can probably be done anyway with enough hackyness if this
+ * command didn't exist so it's not all that bad.
*/
static int
me_svsjoin(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
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;
}
source_p->servptr->name,
chptr->chname, modebuf, parabuf);
*omodebuf = *modebuf = *parabuf = '\0';
+
+ /* since we're dropping our modes, we want to clear the mlock as well. --nenolod */
+ set_channel_mlock(client_p, source_p, chptr, NULL, FALSE);
}
if(!IsMember(source_p, chptr))
/* Update capitalization in channel name, this makes the
* capitalization timestamped like modes are -- jilles */
strcpy(chptr->chname, parv[2]);
+
+ /* since we're dropping our modes, we want to clear the mlock as well. --nenolod */
+ set_channel_mlock(client_p, source_p, chptr, NULL, FALSE);
}
if(*modebuf != '\0')
{
fl = 0;
- for (i = 0; i < 2; i++)
+ for (i = 0; i < 4; i++)
{
if(*s == '!')
{
para[pargs++] = target_p->name;
}
}
- if(fl & CHFL_CHANOP)
+ else if(fl & CHFL_CHANOP)
{
*mbuf++ = 'o';
para[pargs++] = target_p->name;
para[pargs++] = target_p->name;
}
}
- if(fl & CHFL_HALFOP)
+ else if(fl & CHFL_HALFOP)
{
*mbuf++ = 'h';
para[pargs++] = target_p->name;