async login(options = {}) {
    let { clientId, accessToken } = options;
    await this.connect(clientId);
    if (!options.scopes) {
      this.emit('ready');
      return this;
    }
    if (!accessToken) {
      accessToken = await this.authorize(options);
    }
    return this.authenticate(accessToken);
  }
Performs authentication flow. Automatically calls Client#connect if needed.
@param {RPCLoginOptions} options Options for authentication.
At least one property must be provided to perform login.
@example client.login({ clientId: '1234567', clientSecret: 'abcdef123' });
@returns {Promise<RPCClient>}