2002.10.24 (木) 01:55:01 <Heracules> なんかうちで使ってたら、DSL回線がプチプチ切れる人がいて、そのときにゴーストが残っちゃったので、つけてみました。
2002.10.24 (木) 02:41:47 <u*j*2*6*> user3っていうのをl2にかえてもらってもいい?まわりの関数はそうしてるみたいなので
2002.10.24 (木) 02:56:00 <u*j*2*6*> パッチもちゃんとあたったし、実行ファイルもつくれました!
2002.10.24 (木) 22:21:47 <Heracules> 変更は任せます!(かなりいいかげんに作ったのでw
使い方は、OPENNAPと同じ。

/msg NickServ ghost <user> <pass>

shuusei21180:NickServでゴーストを切断する機能を追加(source by Heracules)

diff --dos -urN 21179/constants.pas 21180/constants.pas
--- 21179/constants.pas	Sat Oct 05 17:45:48 2002
+++ 21180/constants.pas	Thu Oct 24 02:50:28 2002
@@ -390,6 +390,9 @@
 MSG_CLIENT_DENGON_CLEAR         = 10504; //delete all messages
 MSG_CLIENT_DENGON_READNEW2      = 10505; //read new messages as from sender
 
+//GhostKick
+MSG_CLIENT_GHOST_KICK           = 11000; //ghost kick
+
 implementation
 
 end.
diff --dos -urN 21179/handler.pas 21180/handler.pas
--- 21179/handler.pas	Wed Oct 23 06:22:14 2002
+++ 21180/handler.pas	Thu Oct 24 03:00:04 2002
@@ -1702,12 +1702,14 @@
  gcmd.cmd:=NextParamEx(gcmd.cmd,2);
  gcmd.id:=0;
  if action='pass' then gcmd.id:=MSG_CLIENT_CHANGE_PASS
+ else if action='ghost' then gcmd.id:=MSG_CLIENT_GHOST_KICK
  else if action='help' then
  begin
    local.Exec(MSG_CLIENT_PRIVMSG,'NickServ NickServのコマンドリスト :');
    local.Exec(MSG_CLIENT_PRIVMSG,'NickServ --------------------------------');
    local.Exec(MSG_CLIENT_PRIVMSG,'NickServ help - このヘルプメッセージを表示');
    local.Exec(MSG_CLIENT_PRIVMSG,'NickServ pass <pass> - パスワードを変更');
+   local.Exec(MSG_CLIENT_PRIVMSG,'NickServ ghost <user> <pass> - ゴーストを切断');
    local.Exec(MSG_CLIENT_PRIVMSG,'NickServ --------------------------------');
    exit;
  end
@@ -9993,6 +9995,42 @@
  end;
 end;
 
+procedure Handler_GhostKick; //11000
+var
+ user2: POnlineUser;
+ l2: TLocalUser;
+ userID: String;
+ userPass: String;
+ srv: TServer;
+ i: Integer;
+begin
+ if not isLogged then exit;
+ if not CheckParams(1) then exit;
+ userID:=hlist.Strings[0];
+ userPass:=hlist.Strings[1];
+ user2:=db_online.FindUser(userID);
+ if user2=nil then
+ begin
+   UserIsOffline(userID,true);
+   exit;
+ end;
+ if user2^.password<>encode(userPass) then
+ begin
+   PermissionDenied('',true);
+   exit;
+ end;
+ if user^.server=nil then WriteAllServers(gcmd.id,user^.nick,gcmd.cmd);
+ l2:=FindLocalUser(user2);
+ if l2<>nil then
+  if l2<>cons then
+  begin
+   l2.Exec(MSG_SERVER_NOSUCH,GetLangT(LNG_KICKMSG));
+   if user2^.level<napUserModerator then
+    AddReconnector(decode_ip(l2.ip));
+   DisconnectUser(l2,'',GetLangT(LNG_KILLED,user2^.nick,user2^.software,user^.nick),'Handler_Kill',false);
+  end;
+end;
+
 function ProcessCommand(usr: TLocalUser; q: TQuery=queryNormal): Boolean;
 var
  str1: String;
@@ -10174,6 +10212,7 @@
    MSG_CLIENT_DENGON_DELETE           : Handler_DengonDelete; //10503 - delete a message
    MSG_CLIENT_DENGON_CLEAR            : Handler_DengonClear;  //10504 - delete all messages
    MSG_CLIENT_DENGON_READNEW2         : Handler_DengonReadNew2; //10505 - read new messages as from sender
+   MSG_CLIENT_GHOST_KICK              : Handler_GhostKick; // 11000 - client's ghost kick
 
 //     MSG_CLIENT_OPENNAPSERVER      : Handler_OpenNapLink; // 10010 - opennap server tries to link