--- /dev/null
+
+typedef int neonserv_cmd_set_function(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *argument);
+static int neonserv_cmd_set_trigger(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *argument);
+static int neonserv_cmd_set_modes(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *argument);
+static int neonserv_cmd_set_dynlimit(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *argument);
+static int neonserv_cmd_set_nodelete(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *argument);
+
+#define NS_VALID_FUNCTION 0x01
+#define NS_VALID_STRING 0x02
+#define NS_VALID_ACCESS 0x04
+#define NS_VALID_NO501 0x08
+#define NS_VALID_OPTIONS 0x10
+#define NS_VALID_NUMERIC 0x20
+#define NS_VALID_BOOLEAN 0x40
+
+static const struct {
+ const char *setting;
+ const char *chanfield;
+ unsigned int valid;
+ void *parameter;
+} channel_settings[] {
+ {"trigger", "channel_trigger", NS_VALID_FUNCTION, neonserv_cmd_set_trigger},
+ {"defaulttopic", "channel_defaulttopic", NS_VALID_STRING, NULL},
+ {"topicmask", "channel_topicmask", NS_VALID_STRING, NULL},
+ {"greeting", "channel_greeting", NS_VALID_STRING, NULL},
+ {"usergreeting", "channel_usergreeting", NS_VALID_STRING, NULL},
+ {"userinfo", "channel_userinfo", NS_VALID_ACCESS, NULL},
+ {"wipeinfo", "channel_wipeinfo", NS_VALID_ACCESS, NULL},
+ {"modes", "channel_modes", NS_VALID_FUNCTION, neonserv_cmd_set_modes},
+ {"inviteme", "channel_getinvite", NS_VALID_ACCESS, NULL},
+ {"giveops", "channel_getop", NS_VALID_ACCESS, NULL},
+ {"givevoice", "channel_getvoice", NS_VALID_ACCESS, NULL},
+ {"enfops", "channel_canop", NS_VALID_ACCESS, NULL},
+ {"enfvoice", "channel_canvoice", NS_VALID_ACCESS, NULL},
+ {"kick", "channel_cankick", NS_VALID_ACCESS, NULL},
+ {"ban", "channel_canban", NS_VALID_ACCESS, NULL},
+ {"staticban", "channel_staticban", NS_VALID_ACCESS, NULL},
+ {"pubcmd", "channel_pubcmd", NS_VALID_ACCESS, NULL},
+ {"enfmodes", "channel_enfmodes", NS_VALID_ACCESS, NULL},
+ {"enftopic", "channel_enftopic", NS_VALID_ACCESS, NULL},
+ {"topicsnarf", "channel_topicsnarf", NS_VALID_ACCESS, NULL},
+ {"changetopic", "channel_changetopic", NS_VALID_ACCESS, NULL},
+ {"setters", "channel_setters", NS_VALID_ACCESS | NS_VALID_NO501, NULL},
+ {"adduser", "channel_canadd", NS_VALID_ACCESS, NULL},
+ {"deluser", "channel_candel", NS_VALID_ACCESS, NULL},
+ {"clvl", "channel_canclvl", NS_VALID_ACCESS, NULL},
+ {"resync", "channel_canresync", NS_VALID_ACCESS, NULL},
+ {"suspend", "channel_cansuspend", NS_VALID_ACCESS, NULL},
+ {"noticeusers", "channel_notice", NS_VALID_ACCESS, NULL},
+ {"noticereaction", "channel_noticereaction", NS_VALID_OPTIONS, 4},
+ {"ctcpusers", "channel_ctcp", NS_VALID_ACCESS, NULL},
+ {"ctcpreaction", "channel_ctcpreaction", NS_VALID_OPTIONS, 4},
+ {"protect", "channel_protect", NS_VALID_OPTIONS, 4},
+ {"toys", "channel_toys", NS_VALID_OPTIONS, 3},
+ {"dynlimit", "channel_dynlimit", NS_VALID_NUMERIC | NS_VALID_FUNCTION, neonserv_cmd_set_dynlimit},
+ {"nodelete", "channel_nodelete", NS_VALID_BOOLEAN | NS_VALID_FUNCTION, neonserv_cmd_set_nodelete},
+ {NULL, NULL, 0, NULL}
+};
+
+static CMD_BIND(neonserv_cmd_set) {
+
+}