#include "parse.h"
#include "modules.h"
#include "packet.h"
+#include "tgchange.h"
static int m_topic(struct Client *, struct Client *, int, const char **);
static int ms_topic(struct Client *, struct Client *, int, const char **);
/*
* m_topic
- * parv[0] = sender prefix
* parv[1] = channel name
* parv[2] = new topic, if setting topic
*/
return 0;
}
- if((chptr->mode.mode & MODE_TOPICLIMIT) == 0 || is_chanop(msptr))
+ if(MyClient(source_p) && !is_chanop_voiced(msptr) &&
+ !IsOper(source_p) &&
+ !add_channel_target(source_p, chptr))
+ {
+ sendto_one(source_p, form_str(ERR_TARGCHANGE),
+ me.name, source_p->name, chptr->chname);
+ return 0;
+ }
+
+ if(((chptr->mode.mode & MODE_TOPICLIMIT) == 0 ||
+ is_chanop(msptr)) &&
+ (!MyClient(source_p) ||
+ can_send(chptr, source_p, msptr)))
{
char topic_info[USERHOST_REPLYLEN];
rb_sprintf(topic_info, "%s!%s@%s",
}
else
sendto_one(source_p, form_str(ERR_CHANOPRIVSNEEDED),
- me.name, source_p->name, name);
+ get_id(&me, source_p),
+ get_id(source_p, source_p), name);
}
else if(MyClient(source_p))
{
/*
* ms_topic
- * parv[0] = sender prefix
* parv[1] = channel name
* parv[2] = topic_info
* parv[3] = topic_info time