Files
2026-07-13 13:34:48 +08:00

82 lines
4.1 KiB
TypeScript

import { z, ActionDefinition } from '@botpress/sdk'
export const getComments = {
title: 'Get Comments',
description: 'Get a comments thread',
input: {
schema: z.object({
submissionId: z
.string()
.title('SubmissionId')
.describe('The id of the submission to get comments for.')
.optional(),
changelogId: z
.string()
.title('changelogId')
.describe(
'The id of the changelog to get comments for. Accepts both ObjectId and slug. Example: "65f5f3c037fc63b7d43d0f16" or "my-changelog-slug"'
)
.optional(),
privacy: z
.enum(['public', 'private', 'all'])
.title('Privacy')
.describe('Filter comments by privacy setting. Allowed values: "public", "private", "all"')
.optional(),
inReview: z
.boolean()
.title('In Review')
.describe('Filter comments by whether they are in review. Set to true to get only comments that are in review.')
.optional(),
commentThreadId: z
.string()
.title('Comment Thread Id')
.describe(
'Given a specific comment id, this will return all comments in the thread with the root comment being the comment with the given id.'
)
.optional(),
limit: z.number().title('Limit').describe('Number of results per page. Default is 10.').optional(),
page: z.number().title('Page').describe('Page number. Default is 1.').optional(),
sortBy: z.enum(['best', 'top', 'new', 'old']).title('SortBy').describe('Sort order of the results.').optional(),
nextToken: z.string().title('Next Token').optional().describe('Page number. Starts at 1'),
}),
},
output: {
schema: z.object({
results: z
.array(
z
.object({
id: z.string().title('ID').describe('Comment ID'),
upvoted: z.boolean().optional().title('Upvoted').describe('Whether the comment is upvoted'),
downvoted: z.boolean().optional().title('Downvoted').describe('Whether the comment is downvoted'),
inReview: z.boolean().optional().title('In Review').describe('Whether the comment is in review'),
isSpam: z.boolean().optional().title('Is Spam').describe('Whether the comment is marked as spam'),
pinned: z.boolean().optional().title('Pinned').describe('Whether the comment is pinned'),
emailSent: z.boolean().optional().title('Email Sent').describe('Whether an email notification was sent'),
sendNotification: z
.boolean()
.optional()
.title('Send Notification')
.describe('Whether to send notifications'),
organization: z.string().optional().title('Organization').describe('Organization ID'),
submission: z.string().optional().title('Submission').describe('Submission ID'),
author: z.string().optional().title('Author').describe('Author name'),
authorId: z.string().optional().title('Author ID').describe('Author ID'),
authorPicture: z.string().optional().title('Author Picture').describe('Author profile picture URL'),
isPrivate: z.boolean().optional().title('Is Private').describe('Whether the comment is private'),
isDeleted: z.boolean().optional().title('Is Deleted').describe('Whether the comment is deleted'),
content: z.string().optional().title('Content').describe('Comment content'),
upvotes: z.number().optional().title('Upvotes').describe('Number of upvotes'),
downvotes: z.number().optional().title('Downvotes').describe('Number of downvotes'),
parentComment: z.string().nullable().optional().title('Parent Comment').describe('Parent comment ID'),
path: z.string().optional().title('Path').describe('Comment path'),
})
.title('Comment')
.describe('Represent a single comment.')
)
.title('Comments')
.describe('A list of comments.'),
}),
},
} satisfies ActionDefinition