# 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
    """
    users = self._user_tracker.AllUsers()
    matches = []
    for user in users:
      if user.user_id == query:
        return user
      if user.display_name.lower() == query.lower():
        matches.append(user)
    if len(matches) == 1:
      return matches[0]
    return None

  @abc.abstractmethod
  def WhoAll(self):
    """Request that all users be added to the user tracker."""
    raise NotImplementedError()

  # TODO: Eliminate Optional from the message type.
  @abc.abstractmethod
  def SendMessage(self, channel: hype_types.Channel,
                  message: Optional[hype_types.Message]):
    """Send a message to the given channel.

    Args:
      channel: channel to receive message.
      message: message to send to the channel.
    """
    raise NotImplementedError()

  @abc.abstractmethod

# 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

    """
    users = self._user_tracker.AllUsers()
    matches = []
    for user in users:
      if user.user_id == query:
        return user
      if user.display_name.lower() == query.lower():
        matches.append(user)
    if len(matches) == 1:
      return matches[0]
    return None

  @abc.abstractmethod
  def WhoAll(self):
    """Request that all users be added to the user tracker."""
    raise NotImplementedError()

  # TODO: Eliminate Optional from the message type.
  @abc.abstractmethod
  def SendMessage(self, channel: hype_types.Channel,
                  message: Optional[hype_types.Message]):
    """Send a message to the given channel.

    Args:
      channel: channel to receive message.
      message: message to send to the channel.
    """
    raise NotImplementedError()

  @abc.abstractmethod

  def SendDirectMessage(self, user: user_pb2.User, message: hype_types.Message):