From 23c1b17e2de26f86bc66f8e2217e7a1cc4192a86 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sun, 10 Oct 2021 11:02:52 +0200 Subject: [PATCH] Create TwitterBot.js --- .../Social-Bots/TS/Bot-Modules/TwitterBot.js | 97 +++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 Projects/Social-Bots/TS/Bot-Modules/TwitterBot.js diff --git a/Projects/Social-Bots/TS/Bot-Modules/TwitterBot.js b/Projects/Social-Bots/TS/Bot-Modules/TwitterBot.js new file mode 100644 index 000000000..15e248865 --- /dev/null +++ b/Projects/Social-Bots/TS/Bot-Modules/TwitterBot.js @@ -0,0 +1,97 @@ +exports.newSocialBotsBotModulesTwitterBot = function (processIndex) { + + const MODULE_NAME = 'Twitter Bot' + + let thisObject = { + taskParameters: undefined, + format: undefined, + twitterclient: undefined, + sendMessage: sendMessage, + initialize: initialize, + finalize: finalize + } + + return thisObject + + function initialize(config) { + /* Twitter Bot Initialization */ + var Twitter = SA.nodeModules.twitter + + let consumer_key = config.consumer_key + let consumer_secret = config.consumer_secret + let access_token_key = config.access_token_key + let access_token_secret = config.access_token_secret + + if (process.env.TWITTER_CONSUMER_KEY) { + consumer_key = process.env.TWITTER_CONSUMER_KEY + } + if (process.env.TWITTER_CONSUMER_SECRET) { + consumer_secret = process.env.TWITTER_CONSUMER_SECRET + } + if (process.env.TWITTER_ACCESS_TOKEN_KEY) { + access_token_key = process.env.TWITTER_ACCESS_TOKEN_KEY + } + if (process.env.TWITTER_ACCESS_TOKEN_SECRET) { + access_token_secret = process.env.TWITTER_ACCESS_TOKEN_SECRET + } + + var twitterclient = new Twitter({ + consumer_key: consumer_key, + consumer_secret: consumer_secret, + access_token_key: access_token_key, + access_token_secret: access_token_secret + }); + thisObject.twitterclient = twitterclient + + try { + thisObject.taskParameters = { + exchange: TS.projects.foundations.globals.taskConstants.TASK_NODE.parentNode.parentNode.parentNode.referenceParent.parentNode.parentNode.name, + market: TS.projects.foundations.globals.taskConstants.TASK_NODE.parentNode.parentNode.parentNode.referenceParent.baseAsset.referenceParent.config.codeName + + '/' + + TS.projects.foundations.globals.taskConstants.TASK_NODE.parentNode.parentNode.parentNode.referenceParent.quotedAsset.referenceParent.config.codeName + } + if (config.format === undefined) { + thisObject.format = "%{MESSAGE}" + } else { + thisObject.format = config.format + } + } catch (err) { + logError("initialize -> err = " + err.stack); + } + + } + + function finalize() {} + + function sendMessage(message) { + try { + message = formatMessage(message) + message = JSON.stringify({status: message}) + } catch (err) { + logError("announce -> Twitter JSON message error -> err = " + err) + } + + thisObject.twitterclient.post('statuses/update', message, function(error, tweet, response) { + if(error) throw error; + console.log(tweet); // Tweet body. + console.log(response); // Raw response object. + }); + + } + + function formatMessage(message) { + formattedMessage = thisObject.format + formattedMessage = formattedMessage.replace('%{EXCHANGE}', thisObject.taskParameters.exchange) + formattedMessage = formattedMessage.replace('%{MARKET}', thisObject.taskParameters.market) + formattedMessage = formattedMessage.replace('%{MESSAGE}', message) + return formattedMessage + } + + function logWarn(message) { + TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, '[WARN] ' + message) + } + + function logError(message) { + TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, '[ERROR] ' + message) + } +} \ No newline at end of file