code: async def on_raw_353(self, message):
          
          target, visibility, channel, names = message.params
          if not self.in_channel(channel):
              return
  
          # Set channel visibility.
          if visibility == protocol.PUBLIC_CHANNEL_SIGIL:
              self.channels[channel]['public'] = True
          elif visibility in (protocol.PRIVATE_CHANNEL_SIGIL, protocol.SECRET_CHANNEL_SIGIL):
              self.channels[channel]['public'] = False
  
          # Update channel user list.
          for entry in names.split():
              statuses = []
              # Make entry safe for _parse_user().
              safe_entry = entry.lstrip(''.join(self._nickname_prefixes.keys()))
              # Parse entry and update database.
              nick, metadata = self._parse_user(safe_entry)
              self._sync_user(nick, metadata)
  
              # Get prefixes.
              prefixes = set(entry.replace(safe_entry, ''))
  
              # Check, record and strip status prefixes.
              for prefix, status in self._nickname_prefixes.items():
                  # Add to list of statuses by user.
                  if prefix in prefixes:
                      statuses.append(status)
  
              # Add user to user list.
              self.channels[channel]['users'].add(nick)
              # And to channel modes..
              for status in statuses:
                  if status not in self.channels[channel]['modes']:
                      self.channels[channel]['modes'][status] = []
                  self.channels[channel]['modes'][status].append(nick)
docs: Response to /NAMES.