import app from "../../app/twitter.app.mjs";
import { ACTION_ERROR_MESSAGE } from "../../common/errorMessage.mjs";
import { defineAction } from "@pipedream/types";
const DOCS_LINK = "https://developer.twitter.com/en/docs/twitter-api/tweets/manage-tweets/api-reference/post-tweets";
export default defineAction({
key: "twitter-create-tweet",
name: "Create Tweet",
description: `Create a new tweet. [See the documentation](${DOCS_LINK})`,
version: "2.1.6",
type: "action",
props: {
app,
text: {
type: "string",
label: "Text",
description: "Text of the Tweet being created. Required if `Media IDs` is not set.",
optional: true,
},
inReplyToTweetId: {
type: "string",
label: "In Reply To Tweet (ID)",
description: "Tweet ID of the Tweet being replied to. Please note that this prop needs to be set if `Exclude Reply User IDs` is also set.",
optional: true,
},
excludeReplyUserIds: {
type: "string[]",
label: "Exclude Reply User IDs",
description: "A list of User IDs to be excluded from the reply Tweet thus removing a user from a thread.",
optional: true,
},
mediaIds: {
type: "string[]",
label: "Media IDs",
description: "A list of Media IDs being attached to the Tweet. This is only required if `Tagged User IDs` is set.",
optional: true,
},
taggedUserIds: {
type: "string[]",
label: "Tagged User IDs",
description: "A list of User IDs being tagged in the Tweet with Media. If the user you're tagging doesn't have photo-tagging enabled, their names won't show up in the list of tagged users even though the Tweet is successfully created.",
optional: true,
},
placeId: {
type: "string",
label: "Place ID",
description: "Place ID being attached to the Tweet for geo location.",
optional: true,
},
},
async run({ $ }) {
const { text, inReplyToTweetId, excludeReplyUserIds, mediaIds, placeId, taggedUserIds, } = this;
const params = {
$,
data: {
text,
...((inReplyToTweetId || excludeReplyUserIds) && {
reply: {
exclude_reply_user_ids: excludeReplyUserIds,
in_reply_to_tweet_id: inReplyToTweetId,
},
}),
...((mediaIds || taggedUserIds) && {
media: {
media_ids: mediaIds,
tagged_user_ids: taggedUserIds,
},
}),
...(placeId && {
geo: {
place_id: placeId,
},
}),
},
fallbackError: ACTION_ERROR_MESSAGE,
};
const response = await this.app.createTweet(params);
$.export("$summary", `Successfully posted tweet (ID ${response.data?.id})`);
return response;
},
});