def leave(self): """Leave this conversation. Raises: .NetworkError: If conversation cannot be left. """ is_group_conversation = ( self._conversation.type == hangouts_pb2.CONVERSATION_TYPE_GROUP) try: if is_group_conversation: yield from self._client.remove_user( hangouts_pb2.RemoveUserRequest( request_header=self._client.get_request_header(), event_request_header=self._get_event_request_header(), )) else: yield from self._client.delete_conversation( hangouts_pb2.DeleteConversationRequest( request_header=self._client.get_request_header(), conversation_id=hangouts_pb2.ConversationId( id=self.id_), delete_upper_bound_timestamp=parsers.to_timestamp( datetime.datetime.now(tz=datetime.timezone.utc)))) except exceptions.NetworkError as e: logger.warning('Failed to leave conversation: {}'.format(e)) raise
async def kick(self, bot, event): user, conv = getUserConv(bot, event) arg1 = event.text.lower().split()[1] users = conv.users ids = [] kick_users = [] try: for user in users: if arg1 in user.full_name.lower(): kick_users.append(user) if not kick_users: await conv.send_message( toSeg("Nobody in this conversation goes by that name")) return # only reason i figured this out was because of hangupsbot, so thank you so much https://github.com/xmikos/hangupsbot/blob/master/hangupsbot/commands/conversations.py ids = [ ParticipantId(gaia_id=user.id_.gaia_id, chat_id=conv.id_) for user in kick_users ] for kick_id in ids: request = hangouts_pb2.RemoveUserRequest( request_header=bot.client.get_request_header(), participant_id=kick_id, event_request_header=conv._get_event_request_header()) res = await bot.client.remove_user(request) conv.add_event(res.created_event) except: await conv.send_message(toSeg("Yeah don't use this command lol"))
async def remove_user(self, user_id): """Remove a user from this conversation. Args: user_id: ID of the user to be removed; accepts :class:`.UserID`, ``ParticipantId`` or just :class:`str` IDs. Raises: .ConversationTypeError: If conversation is not a group. .NetworkError: If conversation cannot be removed from. Returns: :class:`.ConversationEvent` representing the change. """ if not self._conversation.type == hangouts_pb2.CONVERSATION_TYPE_GROUP: raise exceptions.ConversationTypeError( 'Can only remove users to group conversations') try: response = await self._client.remove_user( hangouts_pb2.RemoveUserRequest( request_header=self._client.get_request_header(), event_request_header=self._get_event_request_header(), participant_id=self._wrap_participant_id(user_id), )) return self._wrap_event(response.created_event) except exceptions.NetworkError as e: logger.warning('Failed to remove user: {}'.format(e)) raise
async def channel_remove(self, channel, user): try: conv = self._convs.get(channel.source) except KeyError: return request = hangouts_pb2.RemoveUserRequest( request_header=self._client.get_request_header(), event_request_header=conv._get_event_request_header(), participant_id=hangouts_pb2.ParticipantId(gaia_id=user.id)) await self._client.remove_user(request)
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