I don't test it yet but it should work.
procedure OnPlayerSpeak(ID: Byte; Text: string);
begin
// ask the person who type !join to join 127.0.0.1:23074, with a message for him
if (Text = '!join') then ForwardClient(IDtoIP(ID), GetPlayerStat(ID, 'port'), '127.0.0.1', 23074, 'Join this server instead!');
end;