implemented chat because why the fuck not