X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=ircd%2Fm_join.c;h=66c4379650c267d1f448eb66f9d49e1c835db6c5;hb=6147944c7207082239972619086c785bf96aad61;hp=89ef8c7f918e33f88a4e8535d2ec551a7e982561;hpb=2408eeb1527f43b1214bd80eccd76e7fc9959432;p=ircu2.10.12-pk.git diff --git a/ircd/m_join.c b/ircd/m_join.c index 89ef8c7..66c4379 100644 --- a/ircd/m_join.c +++ b/ircd/m_join.c @@ -287,6 +287,8 @@ int m_join(struct Client *cptr, struct Client *sptr, int parc, char *parv[]) do_names(sptr, chptrb, NAMES_ALL|NAMES_EON); } } else { + if(find_member_link(chptrb, sptr)) + continue; //we have already joined this channel //first of all check if we may even join this channel int err2 = 0; if (chptrb->users == 0 && !chptrb->mode.apass[0] && !(chptrb->mode.mode & MODE_PERSIST)) { @@ -312,23 +314,30 @@ int m_join(struct Client *cptr, struct Client *sptr, int parc, char *parv[]) send_reply(sptr, RPL_TOPIC, chptrb->chname, chptrb->topic); send_reply(sptr, RPL_TOPICWHOTIME, chptrb->chname, chptrb->topic_nick, chptrb->topic_time); } - do_names(sptr, chptrb, NAMES_ALL|NAMES_EON); /* send /names list */ + do_names(sptr, chptrb, NAMES_ALL|NAMES_EON|(((chptrb->mode.mode & MODE_AUDITORIUM) && !(flags & CHFL_CHANOP)) ? NAMES_OPS : 0)); /* send /names list */ } } } if (err) { - switch(err) { - case ERR_NEEDREGGEDNICK: - send_reply(sptr, - ERR_NEEDREGGEDNICK, - chptr->chname, - feature_str(FEAT_URLREG)); - break; - default: + const char *error = NULL; + if (err == ERR_CHANNELISFULL) + error = feature_str(FEAT_ERR_CHANNELISFULL); + else if (err == ERR_INVITEONLYCHAN) + error = feature_str(FEAT_ERR_INVITEONLYCHAN); + else if (err == ERR_BANNEDFROMCHAN) + error = feature_str(FEAT_ERR_BANNEDFROMCHAN); + else if (err == ERR_BADCHANNELKEY) + error = feature_str(FEAT_ERR_BADCHANNELKEY); + else if (err == ERR_NEEDREGGEDNICK) + error = feature_str(FEAT_ERR_NEEDREGGEDNICK); + else if (err == ERR_JOINACCESS) + error = feature_str(FEAT_ERR_JOINACCESS); + + if (error) + send_reply(sptr, err, chptr->chname, error); + else send_reply(sptr, err, chptr->chname); - break; - } continue; }