--- /dev/null
+
+/*
+* argv[0] "force"
+* argv[1] (optional) nick mask
+*/
+
+static CMD_BIND(neonserv_cmd_opall) {
+ int i, done_users;
+ char *nickmask = NULL;
+ struct UserNode *cuser;
+ struct ChanUser *chanuser;
+ struct ModeBuffer *modeBuf;
+ check_mysql();
+ if(!checkChannelAccess(user, chan, "channel_canop", 1, 0)) {
+ reply(getTextBot(), user, "NS_ACCESS_DENIED");
+ return;
+ }
+ if(!argc || strcmp(argv[0], "FORCE")) {
+ reply(getTextBot(), user, "NS_OPALL_SECURITY", chan->name);
+ return;
+ }
+ if(argc > 1)
+ nickmask = argv[1];
+ modeBuf = initModeBuffer(client, chan);
+ for(chanuser = getChannelUsers(chan, NULL); chanuser; chanuser = getChannelUsers(chan, chanuser)) {
+ if(nickmask && match(nickmask, chanuser->user->nick)) continue;
+ if(chanuser->flags & CHANUSERFLAG_OPPED) continue;
+ modeBufferOp(modeBuf, argv[i]);
+ done_users++;
+ }
+ freeModeBuffer(modeBuf);
+ reply(getTextBot(), user, "NS_OPALL_DONE", done_users, chan->name);
+}