+static MODCMD_FUNC(cmd_dehop)
+{
+ struct mod_chanmode *change;
+ unsigned int arg, count;
+
+ change = mod_chanmode_alloc(argc-1);
+ for (arg = 1, count = 0; arg < argc; ++arg) {
+ struct userNode *victim = GetUserH(argv[arg]);
+ struct modeNode *mn;
+ if (!victim || IsService(victim)
+ || !(mn = GetUserMode(channel, victim))
+ || !(mn->modes & MODE_HALFOP))
+ continue;
+ change->args[count].mode = MODE_REMOVE | MODE_HALFOP;
+ change->args[count++].u.member = mn;
+ }
+ if (count) {
+ change->argc = count;
+ modcmd_chanmode_announce(change);
+ }
+ mod_chanmode_free(change);
+ reply("OSMSG_DEHOP_DONE");
+ return 1;
+}
+