X-Git-Url: https://jfr.im/git/irc/rqf/shadowircd.git/blobdiff_plain/7608ef493330f1504f7df0ba5e8da05ca96812f6..12c4f819fadcc5fac4de0c9f510c02c560ad0f20:/modules/core/m_join.c diff --git a/modules/core/m_join.c b/modules/core/m_join.c index ff4750f..e9f092d 100644 --- a/modules/core/m_join.c +++ b/modules/core/m_join.c @@ -125,7 +125,6 @@ check_forward(struct Client *source_p, struct Channel *chptr, /* * m_join - * parv[0] = sender prefix * parv[1] = channel * parv[2] = channel password (key) */ @@ -137,6 +136,7 @@ m_join(struct Client *client_p, struct Client *source_p, int parc, const char *p struct ConfItem *aconf; char *name; char *key = NULL; + const char *modes; int i, flags = 0; char *p = NULL, *p2 = NULL; char *chanlist; @@ -341,17 +341,15 @@ m_join(struct Client *client_p, struct Client *source_p, int parc, const char *p chptr->channelts = rb_current_time(); chptr->mode.mode |= MODE_TOPICLIMIT; chptr->mode.mode |= MODE_NOPRIVMSGS; + modes = channel_modes(chptr, &me); - sendto_channel_local(ONLY_CHANOPS, chptr, ":%s MODE %s +nt", - me.name, chptr->chname); + sendto_channel_local(ONLY_CHANOPS, chptr, ":%s MODE %s %s", + me.name, chptr->chname, modes); - if(*chptr->chname == '#') - { - sendto_server(client_p, chptr, CAP_TS6, NOCAPS, - ":%s SJOIN %ld %s +nt :@%s", - me.id, (long) chptr->channelts, - chptr->chname, source_p->id); - } + sendto_server(client_p, chptr, CAP_TS6, NOCAPS, + ":%s SJOIN %ld %s %s :@%s", + me.id, (long) chptr->channelts, + chptr->chname, modes, source_p->id); } else { @@ -389,14 +387,10 @@ m_join(struct Client *client_p, struct Client *source_p, int parc, const char *p /* * ms_join - * - * inputs - - * output - none - * side effects - handles remote JOIN's sent by servers. In TSora - * remote clients are joined using SJOIN, hence a - * JOIN sent by a server on behalf of a client is an error. - * here, the initial code is in to take an extra parameter - * and use it for the TimeStamp on a new channel. + * parv[1] = channel TS + * parv[2] = channel + * parv[3] = "+", formerly channel modes but now unused + * alternatively, a single "0" parameter parts all channels */ static int ms_join(struct Client *client_p, struct Client *source_p, int parc, const char *parv[]) @@ -770,9 +764,6 @@ ms_sjoin(struct Client *client_p, struct Client *source_p, int parc, const char else modes = empty_modes; - /* working on the presumption eventually itll be more efficient to - * build a TS6 buffer without checking its needed.. - */ mlen_uid = rb_sprintf(buf_uid, ":%s SJOIN %ld %s %s :", use_id(source_p), (long) chptr->channelts, parv[2], modes); ptr_uid = buf_uid + mlen_uid; @@ -1185,7 +1176,7 @@ remove_our_modes(struct Channel *chptr, struct Client *source_p) *mbuf = '\0'; sendto_channel_local(ALL_MEMBERS, chptr, ":%s MODE %s %s %s %s %s %s", - me.name, chptr->chname, + source_p->name, chptr->chname, lmodebuf, lpara[0], lpara[1], lpara[2], lpara[3]); @@ -1217,7 +1208,7 @@ remove_our_modes(struct Channel *chptr, struct Client *source_p) *mbuf = '\0'; sendto_channel_local(ALL_MEMBERS, chptr, ":%s MODE %s %s %s %s %s %s", - me.name, chptr->chname, lmodebuf, + source_p->name, chptr->chname, lmodebuf, lpara[0], lpara[1], lpara[2], lpara[3]); mbuf = lmodebuf; *mbuf++ = '-'; @@ -1233,7 +1224,7 @@ remove_our_modes(struct Channel *chptr, struct Client *source_p) *mbuf = '\0'; sendto_channel_local(ALL_MEMBERS, chptr, ":%s MODE %s %s %s %s %s %s", - me.name, chptr->chname, lmodebuf, + source_p->name, chptr->chname, lmodebuf, EmptyString(lpara[0]) ? "" : lpara[0], EmptyString(lpara[1]) ? "" : lpara[1], EmptyString(lpara[2]) ? "" : lpara[2],