+static MODCMD_FUNC(cmd_forcekick)
+{
+ struct userNode *target;
+ char *reason;
+
+ if (argc < 3) {
+ reason = alloca(strlen(OSMSG_KICK_REQUESTED)+strlen(user->nick)+1);
+ sprintf(reason, OSMSG_KICK_REQUESTED, user->nick);
+ } else {
+ reason = unsplit_string(argv+2, argc-2, NULL);
+ }
+ target = GetUserH(argv[1]);
+ if (!target) {
+ reply("MSG_NICK_UNKNOWN", argv[1]);
+ return 0;
+ }
+ if (!GetUserMode(channel, target)) {
+ reply("OSMSG_NOT_ON_CHANNEL", target->nick, channel->name);
+ return 0;
+ }
+ if (IsLocal(target)) {
+ reply("OSMSG_FORCEKICK_LOCAL", target->nick);
+ return 0;
+ }
+ irc_kick(cmd->parent->bot, target, channel, reason);
+ return 1;
+}
+