Files

107 lines
3.9 KiB
JavaScript

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
}
if (!consumer_key) {
logError("consumer_key must be set")
}
if (!consumer_secret) {
logError("consumer_secret must be set")
}
if (!access_token_key) {
logError("access_token_key must be set")
}
if (!access_token_secret) {
logError("access_token_secret must be set")
}
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 = {status: formatMessage(message)}
} catch (err) {
logError("announce -> Twitter JSON message error -> err = " + err)
}
thisObject.twitterClient.post('statuses/update', message, function(error) {
if(error) {
logError(error)
throw error
}
});
}
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)
}
}