Example #1
0
 def _get_event_request_header(self, conversation_id: str) -> hangouts.EventRequestHeader:
     return hangouts.EventRequestHeader(
         conversation_id=hangouts.ConversationId(
             id=conversation_id,
         ),
         client_generated_id=self.client.get_client_generated_id(),
     )
Example #2
0
 def _get_event_request_header(self, conversation_id: str) -> hangouts.EventRequestHeader:
     delivery_medium = self.chats.get(conversation_id)._get_default_delivery_medium()
     return hangouts.EventRequestHeader(
         conversation_id=hangouts.ConversationId(
             id=conversation_id,
         ),
         delivery_medium=delivery_medium,
         client_generated_id=self.client.get_client_generated_id(),
     )
Example #3
0
    def sendchatmessage(
            self, conversation_id, segments, image_id=None,
            otr_status=hangouts_pb2.OFF_THE_RECORD_STATUS_ON_THE_RECORD,
            delivery_medium=None):
        """Send a chat message to a conversation.

        conversation_id must be a valid conversation ID. segments must be a
        list of message segments to send, in pblite format.

        otr_status determines whether the message will be saved in the server's
        chat history. Note that the OTR status of the conversation is
        irrelevant, clients may send messages with whatever OTR status they
        like.

        image_id is an option ID of an image retrieved from
        Client.upload_image. If provided, the image will be attached to the
        message.

        Raises hangups.NetworkError if the request fails.
        """
        segments_pb = []
        for segment_pblite in segments:
            segment_pb = hangouts_pb2.Segment()
            pblite.decode(segment_pb, segment_pblite)
            segments_pb.append(segment_pb)
        if delivery_medium is None:
            delivery_medium = hangouts_pb2.DeliveryMedium(
                medium_type=hangouts_pb2.DELIVERY_MEDIUM_BABEL,
            )

        request = hangouts_pb2.SendChatMessageRequest(
            request_header=self._get_request_header_pb(),
            message_content=hangouts_pb2.MessageContent(
                segment=segments_pb,
            ),
            event_request_header=hangouts_pb2.EventRequestHeader(
                conversation_id=hangouts_pb2.ConversationId(
                    id=conversation_id,
                ),
                client_generated_id=self.get_client_generated_id(),
                expected_otr=otr_status,
                delivery_medium=delivery_medium,
                event_type=hangouts_pb2.EVENT_TYPE_REGULAR_CHAT_MESSAGE,
            ),
        )

        if image_id is not None:
            request.existing_media = hangouts_pb2.ExistingMedia(
                photo=hangouts_pb2.Photo(photo_id=image_id)
            )

        response = hangouts_pb2.SendChatMessageResponse()
        yield from self._pb_request('conversations/sendchatmessage', request,
                                    response)
        return response
Example #4
0
 def _get_event_request_header(self):
     """Return EventRequestHeader for conversation."""
     otr_status = (hangouts_pb2.OFF_THE_RECORD_STATUS_OFF_THE_RECORD
                   if self.is_off_the_record else
                   hangouts_pb2.OFF_THE_RECORD_STATUS_ON_THE_RECORD)
     return hangouts_pb2.EventRequestHeader(
         conversation_id=hangouts_pb2.ConversationId(id=self.id_),
         client_generated_id=self._client.get_client_generated_id(),
         expected_otr=otr_status,
         delivery_medium=self._get_default_delivery_medium(),
     )
Example #5
0
 async def _get_event_request_header(self, conversation_id: str) -> hangouts.EventRequestHeader:
     if not self.chats:
         self.log.debug("Tried to send message before receiving chat list, waiting")
         await self.chats_future
     delivery_medium = self.chats.get(conversation_id)._get_default_delivery_medium()
     return hangouts.EventRequestHeader(
         conversation_id=hangouts.ConversationId(
             id=conversation_id,
         ),
         delivery_medium=delivery_medium,
         client_generated_id=self.client.get_client_generated_id(),
     )
Example #6
0
    def add_users(self, users):
        global client

        request = hangouts_pb2.AddUserRequest(
            request_header=client.get_request_header(),
            invitee_id=[hangouts_pb2.InviteeID(gaia_id=chat_id)
                        for chat_id in users],
            event_request_header=hangouts_pb2.EventRequestHeader(
                conversation_id=hangouts_pb2.ConversationId(
                    id=self.conv.id_,
                ),
                client_generated_id=client.get_client_generated_id(),
                expected_otr=hangouts_pb2.OFF_THE_RECORD_STATUS_ON_THE_RECORD,
            ),
        )

        asyncio.async(client.add_user(request))
Example #7
0
    def renameconversation(
            self, conversation_id, name,
            otr_status=hangouts_pb2.OFF_THE_RECORD_STATUS_ON_THE_RECORD):
        """Rename a conversation.

        Raises hangups.NetworkError if the request fails.
        """
        request = hangouts_pb2.RenameConversationRequest(
            request_header=self._get_request_header_pb(),
            new_name=name,
            event_request_header=hangouts_pb2.EventRequestHeader(
                conversation_id=hangouts_pb2.ConversationId(
                    id=conversation_id,
                ),
                client_generated_id=self.get_client_generated_id(),
                expected_otr=otr_status,
            ),
        )
        response = hangouts_pb2.RenameConversationResponse()
        yield from self._pb_request('conversations/renameconversation',
                                    request, response)
        return response
Example #8
0
    def removeuser(
            self, conversation_id,
            otr_status=hangouts_pb2.OFF_THE_RECORD_STATUS_ON_THE_RECORD):
        """Leave group conversation.

        conversation_id must be a valid conversation ID.

        Raises hangups.NetworkError if the request fails.
        """
        request = hangouts_pb2.RemoveUserRequest(
            request_header=self._get_request_header_pb(),
            event_request_header=hangouts_pb2.EventRequestHeader(
                conversation_id=hangouts_pb2.ConversationId(
                    id=conversation_id,
                ),
                client_generated_id=self.get_client_generated_id(),
                expected_otr=otr_status,
            ),
        )
        response = hangouts_pb2.RemoveUserResponse()
        yield from self._pb_request('conversations/removeuser', request,
                                    response)
        return response
Example #9
0
    def adduser(self, conversation_id, chat_id_list,
                otr_status=hangouts_pb2.OFF_THE_RECORD_STATUS_ON_THE_RECORD):
        """Add users to an existing group conversation.

        conversation_id must be a valid conversation ID.
        chat_id_list is list of users which should be invited to conversation.

        Raises hangups.NetworkError if the request fails.
        """
        request = hangouts_pb2.AddUserRequest(
            request_header=self._get_request_header_pb(),
            invitee_id=[hangouts_pb2.InviteeID(gaia_id=chat_id)
                        for chat_id in chat_id_list],
            event_request_header=hangouts_pb2.EventRequestHeader(
                conversation_id=hangouts_pb2.ConversationId(
                    id=conversation_id,
                ),
                client_generated_id=self.get_client_generated_id(),
                expected_otr=otr_status,
            ),
        )
        response = hangouts_pb2.AddUserResponse()
        yield from self._pb_request('conversations/adduser', request, response)
        return response
Example #10
0
def _send_new_conversation_welcome_message(conv_id, text):
    global last_newly_created_conv_id
    global client
    last_newly_created_conv_id = conv_id
    segments = hangups.ChatMessageSegment.from_str(text)

    request = hangouts_pb2.SendChatMessageRequest(
        request_header=client.get_request_header(),
        message_content=hangouts_pb2.MessageContent(
            segment=[seg.serialize() for seg in segments],
        ),
        event_request_header=hangouts_pb2.EventRequestHeader(
            conversation_id=hangouts_pb2.ConversationId(
                id=conv_id,
            ),
            client_generated_id=client.get_client_generated_id(),
            expected_otr=hangouts_pb2.OFF_THE_RECORD_STATUS_ON_THE_RECORD,
            delivery_medium=hangouts_pb2.DeliveryMedium(medium_type=hangouts_pb2.DELIVERY_MEDIUM_BABEL),
            event_type=hangouts_pb2.EVENT_TYPE_REGULAR_CHAT_MESSAGE,
        ),
    )
    asyncio.async(
        client.send_chat_message(request)
    ).add_done_callback(on_new_conversation_welcome_message_sent)