#include "parse.h"
#include "modules.h"
#include "packet.h"
+#include "chmode.h"
static int m_join(struct Client *, struct Client *, int, const char **);
static int ms_join(struct Client *, struct Client *, int, const char **);
struct ConfItem *aconf;
char *name;
char *key = NULL;
+ const char *modes;
int i, flags = 0;
char *p = NULL, *p2 = NULL;
char *chanlist;
if ((i != ERR_NEEDREGGEDNICK && i != ERR_THROTTLE && i != ERR_INVITEONLYCHAN && i != ERR_CHANNELISFULL) ||
(!ConfigChannel.use_forward || (chptr = check_forward(source_p, chptr, key)) == NULL))
{
- sendto_one(source_p, form_str(i), me.name, source_p->name, name);
+ /* might be wrong, but is there any other better location for such?
+ * see extensions/chm_operonly.c for other comments on this
+ * -- dwr
+ */
+ if(i != ERR_CUSTOM)
+ sendto_one(source_p, form_str(i), me.name, source_p->name, name);
+
if(successful_join_count > 0)
successful_join_count--;
continue;
}
+
sendto_one_numeric(source_p, ERR_LINKCHANNEL, form_str(ERR_LINKCHANNEL), name, chptr->chname);
}
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
{
/*
* 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[0] = sender prefix
+ * 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[])
*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]);
*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++ = '-';
*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],