# Path: hypebot/hype_types.py

# 
# Path: hypebot/core/params_lib.py
# def _ParseChannel(channel):
# def _ParseChannels(channels):
#   def __init__(self, defaults=None):
#   def __str__(self):
#   def Override(self, params):
#   def _AssignValueConvertDict(self, key, value):
#   def _ParseDict(self, params):
#   def __setattr__(self, key, value):
#   def get(self, key, default_value=None):  # pylint: disable=invalid-name
#   def AsDict(self):
#   def Lock(self):
#   def _RaiseIfLocked(self):
# def MergeParams(defaults, *overrides):
# class HypeParams(object):
#   SPECIAL_ATTRS = ['_locked']
#   HAS_DYNAMIC_ATTRIBUTES = True


import abc
from absl import logging
from hypebot import hype_types
from hypebot.core import params_lib
from hypebot.protos import user_pb2
from six import with_metaclass
from typing import Optional, Text
  """

  DEFAULT_PARAMS = params_lib.HypeParams({
      # Display name used when chatting.
      'name': 'chatbot',
  })

  def __init__(self, params):
    self._params = params_lib.HypeParams(self.DEFAULT_PARAMS)
    self._params.Override(params)
    self._params.Lock()
    self._channels = set()

  def RegisterHandlers(self, on_message_fn, user_tracker, user_prefs):
    """Register handlers from the bot onto the interface.

    Allows the interface to communicate asynchronously to the bot when messages
    or user information comes.

    Args:
      on_message_fn: {callable(Channel, User, message)} Function that will be
        called in response to an incoming message.
      user_tracker: {UserTracker} Where to store results of Who/WhoAll requests.
      user_prefs: {SyncedDict} Persistent user preferences.
    """
    self._channels = set()
    self._on_message_fn = on_message_fn
    self._user_tracker = user_tracker
    self._user_prefs = user_prefs


# Path: hypebot/hype_types.py

# 
# Path: hypebot/core/params_lib.py
# def _ParseChannel(channel):
# def _ParseChannels(channels):
#   def __init__(self, defaults=None):
#   def __str__(self):
#   def Override(self, params):
#   def _AssignValueConvertDict(self, key, value):
#   def _ParseDict(self, params):
#   def __setattr__(self, key, value):
#   def get(self, key, default_value=None):  # pylint: disable=invalid-name
#   def AsDict(self):
#   def Lock(self):
#   def _RaiseIfLocked(self):
# def MergeParams(defaults, *overrides):
# class HypeParams(object):
#   SPECIAL_ATTRS = ['_locked']
#   HAS_DYNAMIC_ATTRIBUTES = True


# Path: hypebot/interfaces/interface_lib.py
import abc
from absl import logging
from hypebot import hype_types
from hypebot.core import params_lib
from hypebot.protos import user_pb2
from six import with_metaclass
from typing import Optional, Text

  """

  DEFAULT_PARAMS = params_lib.HypeParams({
      # Display name used when chatting.
      'name': 'chatbot',
  })

  def __init__(self, params):
    self._params = params_lib.HypeParams(self.DEFAULT_PARAMS)
    self._params.Override(params)
    self._params.Lock()
    self._channels = set()

  def RegisterHandlers(self, on_message_fn, user_tracker, user_prefs):
    """Register handlers from the bot onto the interface.

    Allows the interface to communicate asynchronously to the bot when messages
    or user information comes.

    Args:
      on_message_fn: {callable(Channel, User, message)} Function that will be
        called in response to an incoming message.
      user_tracker: {UserTracker} Where to store results of Who/WhoAll requests.
      user_prefs: {SyncedDict} Persistent user preferences.
    """
    self._channels = set()
    self._on_message_fn = on_message_fn
    self._user_tracker = user_tracker
    self._user_prefs = user_prefs


  def Join(self, channel: hype_types.Channel):