+int csa_doaddchan(void *source, int cargc, char **cargv) {
+ nick *sender=(nick *)source;
+ reguser *rup = getreguserfromnick(sender), *founder;
+ chanindex *cip;
+ short type;
+ regchan *rcp;
+
+ if(cargc<3) {
+ controlreply(sender, "ADDCHAN FALSE args");
+ return CMD_ERROR;
+ }
+
+ if (*cargv[0] != '#' || strlen(cargv[0]) > CHANNELLEN) {
+ controlreply(sender, "ADDCHAN FALSE invalidchannel");
+ return CMD_ERROR;
+ }
+
+ if (!(cip=findorcreatechanindex(cargv[0]))) {
+ controlreply(sender, "ADDCHAN FALSE invalidchannel");
+ return CMD_ERROR;
+ }
+
+ founder = findreguserbyID(atoi(cargv[1]));
+ if(founder == NULL) {
+ controlreply(sender, "ADDCHAN FALSE useridnotexist");
+ return CMD_ERROR;
+ }
+
+ if(UIsInactive(founder)) {
+ controlreply(sender, "ADDCHAN FALSE accountinactive");
+ return CMD_ERROR;
+ }
+
+ for(type=CHANTYPES-1;type;type--)
+ if(!ircd_strcmp(chantypes[type]->content, cargv[2]))
+ break;
+
+ if(!type) {
+ controlreply(sender, "ADDCHAN FALSE invalidchantype");
+ return CMD_ERROR;
+ }
+
+ rcp = cs_addchan(cip, sender, rup, founder, QCFLAG_JOINED | QCFLAG_AUTOOP | QCFLAG_BITCH | QCFLAG_FORCETOPIC | QCFLAG_PROTECT | QCFLAG_TOPICSAVE, CHANMODE_NOCTCP | CHANMODE_DELJOINS | CHANMODE_MODNOAUTH | CHANMODE_NONOTICE | CHANMODE_NOEXTMSG | CHANMODE_SINGLETARG | CHANMODE_TOPICLIMIT | CHANMODE_NOQUITMSG, 0, type);
+ if(!rcp) {
+ controlreply(sender, "ADDCHAN FALSE alreadyregistered");
+ return CMD_ERROR;
+ }
+
+ cs_log(sender, "ADDCHAN %s #%s %s %s", cip->name->content, founder->username, printflags(rcp->flags, rcflags), chantypes[type]->content);
+ controlreply(sender, "ADDCHAN TRUE %u", rcp->ID);
+ return CMD_OK;
+}
+