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(), )
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(), )
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
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(), )
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(), )
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))
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
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
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
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)