Посты — itd.posts
Лента, публикация, реакции, репосты, опросы и комментарии к постам. Публикующие методы принимают объект, билдер или функцию-настройщик.
Лента
list(params?: FeedParams): Promise<Page<Post>>
iterate(params?: FeedParams): Paginator<Post>Страница ленты / перебор ленты. Курсорная пагинация. См. Post, FeedTab.
Публикация
create(input: PostInput): Promise<Post>Публикует пост. Файлы из поля files загружаются автоматически, порядок вложений сохраняется.
get(postId: string): Promise<Post>Один пост вместе с топовыми комментариями (заполнено поле comments).
update(postId: string, input: PostUpdateInput): Promise<Post>Редактирует текст и разметку. Поля создания (вложения, опрос, стена) отвергаются до запроса. content обязателен.
remove(postId: string): Promise<void>
restore(postId: string): Promise<Post>Удаляет / восстанавливает пост.
Реакции, репосты, закрепление
like(postId: string): Promise<LikeResult>
unlike(postId: string): Promise<LikeResult>Ставит / убирает реакцию. См. LikeResult.
repost(postId: string, content?: string): Promise<Post>
unrepost(postId: string): Promise<void>Репост с необязательным комментарием / отмена репоста. Вложения к репосту не поддерживаются.
pin(postId: string): Promise<PinPostResult>
unpin(postId: string): Promise<PinPostResult>Закрепляет / открепляет пост в профиле. См. PinPostResult.
Опросы
vote(postId: string, optionIds: string[]): Promise<Poll>Голосует в опросе. Несколько вариантов допустимы только при multipleChoice. См. Poll.
Счётчики
stats(ids: string[]): Promise<PostStats[]>Счётчики сразу для нескольких постов. См. PostStats.
Стена и лайки пользователя
byUser(user: UserRef, params?: UserPostsParams): Promise<Page<Post>>
iterateByUser(user: UserRef, params?: UserPostsParams): Paginator<Post>Стена пользователя.
⚠️ Это не только его собственные посты: сюда попадают и записи, которые другие оставили на его стене (у них
authorчужой,wallRecipient— владелец стены). Поэтому записей обычно больше, чемpostsCountв профиле. Нужны только авторские — отфильтруйте поpost.author.id.
likedByUser(user: UserRef, params?: UserPostsParams): Promise<Page<Post>>
iterateLikedByUser(user: UserRef, params?: UserPostsParams): Paginator<Post>Посты, которые пользователь отметил реакцией.
Комментарии к посту
Комментарии к посту живут здесь; ответы на комментарии — в itd.comments.
comments(postId: string, params?: CommentsParams): Promise<Page<Comment>>
iterateComments(postId: string, params?: CommentsParams): Paginator<Comment>Комментарии к посту. Курсорная пагинация. См. Comment, CommentSort.
comment(postId: string, input: CommentInput | string): Promise<Comment>Комментирует пост. Строка — это просто текст.
voiceComment(postId: string, audio: FileInput): Promise<Comment>Голосовой комментарий: без текста, одно аудиовложение audio/ogg.
Типы
type PostInput = CreatePostInput | PostBuilder | ((b: PostBuilder) => PostBuilder | CreatePostInput);
type PostUpdateInput = UpdatePostInput | PostBuilder | ((b: PostBuilder) => PostBuilder | UpdatePostInput);
type CommentInput = CreateCommentInput | CommentBuilder | ((b: CommentBuilder) => CommentBuilder | CreateCommentInput);
interface CreatePostInput {
content?: string;
spans?: Span[]; // проверяются относительно content
wallRecipientId?: UserId | null; // строго UUID
attachmentIds?: string[]; // заранее загруженные вложения
files?: FileInput[]; // загрузятся перед публикацией, порядок сохраняется
poll?: PollInput;
}
interface UpdatePostInput {
content: string; // обязателен
spans?: Span[];
}
interface FeedParams extends RequestOptions {
tab?: FeedTab; // по умолчанию популярное
limit?: number;
cursor?: string; // непрозрачный, из nextCursor
maxPages?: number;
}
interface UserPostsParams extends RequestOptions {
limit?: number;
cursor?: string;
sort?: string;
pinnedPostId?: string; // поднять закреплённый пост наверх
maxPages?: number;
}
interface CommentsParams extends RequestOptions {
limit?: number;
cursor?: string; // id последнего полученного комментария
sort?: CommentSort;
maxPages?: number;
}См. также Билдеры (post(), comment(), poll(), разметка текста).