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
Code:
on *:text:*!player*:#:{
  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.