class_docstr: A conversational dialog chat bot.
code: def __init__(self, name, **kwargs):
      self.name = name
  
      storage_adapter = kwargs.get(
          "storage_adapter", "chatterbot.storage.SQLStorageAdapter"
      )
  
      logic_adapters = kwargs.get(
          "logic_adapters", ["chatterbot.logic.BestMatch"]
      )
  
      # Check that each adapter is a valid subclass of it's respective parent
      utils.validate_adapter_class(storage_adapter, StorageAdapter)
  
      # Logic adapters used by the chat bot
      self.logic_adapters = []
  
      self.storage = utils.initialize_class(storage_adapter, **kwargs)
  
      primary_search_algorithm = IndexedTextSearch(self, **kwargs)
      text_search_algorithm = TextSearch(self, **kwargs)
  
      self.search_algorithms = {
          primary_search_algorithm.name: primary_search_algorithm,
          text_search_algorithm.name: text_search_algorithm,
      }
  
      for adapter in logic_adapters:
          utils.validate_adapter_class(adapter, LogicAdapter)
          logic_adapter = utils.initialize_class(
              adapter, self, **kwargs
          )
          self.logic_adapters.append(logic_adapter)
  
      preprocessors = kwargs.get(
          "preprocessors", ["chatterbot.preprocessors.clean_whitespace"]
      )
  
      self.preprocessors = []
  
      for preprocessor in preprocessors:
          self.preprocessors.append(utils.import_module(preprocessor))
  
      self.logger = kwargs.get("logger", logging.getLogger(__name__))
  
      # Allow the bot to save input it receives so that it can learn
      self.read_only = kwargs.get("read_only", False)
  
file_path: ChatterBot/chatterbot/chatterbot.py
imports: import logging
  from chatterbot.storage import StorageAdapter
  from chatterbot.logic import LogicAdapter
  from chatterbot.search import TextSearch, IndexedTextSearch
  from chatterbot import utils
label_desc: Use image node_id 1 to create a new ChatBot object from inherited base classes: object with example: obj = ChatBot(name)