docstr: Handle first message from player.
  
  Run when a psid is given that is not paired with any assignment yet.
  Launch an overworld, complete onboarding, etc.
  
  :param message:
      message sent from agent
code: def _on_first_message(self, message: Dict[str, Any]):
      """
      Handle first message from player.
  
      Run when a psid is given that is not paired with any assignment yet.
      Launch an overworld, complete onboarding, etc.
  
      :param message:
          message sent from agent
      """
      if self.service_reference_id is None:
          self.service_reference_id = message["recipient"]["id"]
  
      agent_id = message["sender"]["id"]
      if self.opt["password"] is not None:
          if message["text"] != self.opt["password"]:
              self.observe_message(
                  agent_id,
                  "Sorry, this conversation bot is password-protected. If "
                  "you have the password, please send it now.",
              )
              return
  
      self._launch_overworld(agent_id)
  
imports: from abc import ABC, abstractmethod
  from asyncio import Future
  import copy
  import sys
  import logging
  import datetime
  import threading
  import time
  import traceback
  from typing import Dict, Any, Optional, List, Callable
  from parlai.chat_service.core.agents import ChatServiceAgent
  import parlai.chat_service.utils.logging
  import parlai.chat_service.utils.misc
  import parlai.chat_service.utils.server
  from parlai.chat_service.core.world_runner import ChatServiceWorldRunner
  from parlai.core.opt import Opt
label_desc: Use image node_id 17 for calling the ChatServiceManager obj's underlying member method code with example usage: obj._on_first_message(message) without return types