add token expiration check into chat() and used timezone() instead of datetime()