예제 #1
0
    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
예제 #2
0
    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"))
예제 #3
0
    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
예제 #4
0
파일: hangouts.py 프로젝트: raveinid/IMMP
 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)
예제 #5
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