 		
 		var lowest: (command: String, score: Int)?
 		for (command, score) in commandScores {
-			if score <= command.characters.count/2 && score < (lowest?.score ?? Int.max) {
+			let commandCharacters = command.components(separatedBy: " ").filter {
+				$0 != "*" && $0 != "..."
+				}.joined(separator: " ")
+			
+			if score <= commandCharacters.characters.count/2 && score < (lowest?.score ?? Int.max) {
 				lowest = (command, score)
 			}
 		}
 		
 		if let (command, _) = lowest {
-			room.postReply("Unrecognized command `\(components.joined(separator: " "))`; did you mean `\(command)`?", to: message)
-		}
-	}
-	
+			let reply = "Unrecognized command `\(components.joined(separator: " "))`; did you mean `\(command)`?"
+			message.room.postReply(reply, to: message)
+		}
+	}
+	
+	
+	///Process a ChatMessage in the specified room.
 	open func processMessage(_ room: ChatRoom, message: ChatMessage, isEdit: Bool) {
 		let lowercase = message.content.lowercased()
 		

		}
	}
	
	open func stop(_ stopAction: StopAction) {
		pendingStopAction = stopAction
		if self.runningCommands.isEmpty {
			shutdownHandler(self.pendingStopAction == .reboot, self.pendingStopAction == .update)
		}
	}
	
	public init(_ room: ChatRoom, commands: [Command.Type]) {
		self.room = room
		self.commands = commands
	}
}

					}
					for _ in args {
						if !availableComponents.isEmpty {
							score += availableComponents.first!.characters.count / 3
							availableComponents.removeFirst()
						}
					}
