code: def wave(self, wave_first=True, thread_id=None, thread_type=None):
          
          thread_id, thread_type = self._getThread(thread_id, thread_type)
          data = self._getSendData(thread_id=thread_id, thread_type=thread_type)
          data["action_type"] = "ma-type:user-generated-message"
          data["lightweight_action_attachment[lwa_state]"] = (
              "INITIATED" if wave_first else "RECIPROCATED"
          )
          data["lightweight_action_attachment[lwa_type]"] = "WAVE"
          if thread_type == ThreadType.USER:
              data["specific_to_list[0]"] = "fbid:{}".format(thread_id)
          return self._doSendRequest(data)
docs: Says hello with a wave to a thread!
  
          :param wave_first: Whether to wave first or wave back
          :param thread_id: User/Group ID to send to. See :ref:`intro_threads`
          :param thread_type: See :ref:`intro_threads`
          :type thread_type: models.ThreadType
          :return: :ref:`Message ID <intro_message_ids>` of the sent message
          :raises: FBchatException if request failed