diff --git a/packages/backend/src/apps/twitter/index.ts b/packages/backend/src/apps/twitter/index.ts index d658bd29..00267773 100644 --- a/packages/backend/src/apps/twitter/index.ts +++ b/packages/backend/src/apps/twitter/index.ts @@ -19,7 +19,7 @@ export default class Twitter implements IService { parameters: IJSONObject ) { this.authenticationClient = new Authentication(appData, connectionData); - this.triggers = new Triggers(connectionData); + this.triggers = new Triggers(connectionData, parameters); this.actions = new Actions(connectionData, parameters); } } diff --git a/packages/backend/src/apps/twitter/info.json b/packages/backend/src/apps/twitter/info.json index d1b47355..74a46ae3 100644 --- a/packages/backend/src/apps/twitter/info.json +++ b/packages/backend/src/apps/twitter/info.json @@ -258,6 +258,33 @@ "name": "Test trigger" } ] + }, + { + "name": "Search Tweet", + "key": "searchTweet", + "description": "Will be triggered when any user tweet something containing a specific keyword, phrase, username or hashtag.", + "subSteps": [ + { + "key": "chooseAccount", + "name": "Choose account" + }, + { + "key": "chooseTrigger", + "name": "Set up a trigger", + "arguments": [ + { + "label": "Search Term", + "key": "searchTerm", + "type": "string", + "required": true + } + ] + }, + { + "key": "testStep", + "name": "Test trigger" + } + ] } ], "actions": [ diff --git a/packages/backend/src/apps/twitter/triggers.ts b/packages/backend/src/apps/twitter/triggers.ts index be608a24..9f3cf4c2 100644 --- a/packages/backend/src/apps/twitter/triggers.ts +++ b/packages/backend/src/apps/twitter/triggers.ts @@ -1,10 +1,13 @@ -import MyTweet from './triggers/my-tweet'; import { IJSONObject } from '@automatisch/types'; +import MyTweet from './triggers/my-tweet'; +import SearchTweet from './triggers/search-tweet'; export default class Triggers { myTweet: MyTweet; + searchTweet: SearchTweet; - constructor(connectionData: IJSONObject) { + constructor(connectionData: IJSONObject, parameters: IJSONObject) { this.myTweet = new MyTweet(connectionData); + this.searchTweet = new SearchTweet(connectionData, parameters); } } diff --git a/packages/backend/src/apps/twitter/triggers/search-tweet.ts b/packages/backend/src/apps/twitter/triggers/search-tweet.ts new file mode 100644 index 00000000..68196cc5 --- /dev/null +++ b/packages/backend/src/apps/twitter/triggers/search-tweet.ts @@ -0,0 +1,27 @@ +import TwitterApi, { TwitterApiTokens } from 'twitter-api-v2'; +import { IJSONObject } from '@automatisch/types'; + +export default class SearchTweet { + client: TwitterApi; + parameters: IJSONObject; + + constructor(connectionData: IJSONObject, parameters: IJSONObject) { + this.client = new TwitterApi({ + appKey: connectionData.consumerKey, + appSecret: connectionData.consumerSecret, + accessToken: connectionData.accessToken, + accessSecret: connectionData.accessSecret, + } as TwitterApiTokens); + + this.parameters = parameters; + } + + async run() { + const response = await this.client.v2.get('tweets/search/recent', { + query: this.parameters.searchTerm as string, + max_results: 100, + }); + + return response.data; + } +}