that's because the space character makes the !player command in $2 thus the rest of the information becomes $3, $4, $5, etc.
It gets worse if you had multiple words before the !player command.
Try replacing the first 2 lines of your ON TEXT event with
var %player = $findtok($1-,!player,1,32)
%player = $+($,%player,-)
tokenize 32 %player
if ($sock(!player)) .sockclose !player
That will force the script to see !player as the first word ($1) no matter where it actually occurs in the sentence.