first commit
This commit is contained in:
commit
aa7869eb33
386 files changed
+69375
No files matched your search
@@ -0,0 +1,197 @@
|
||||
const log = require('../core/log');
|
||||
const moment = require('moment');
|
||||
const _ = require('lodash');
|
||||
const config = require('../core/util').getConfig();
|
||||
const telegrambot = config.telegrambot;
|
||||
const emitTrades = telegrambot.emitTrades;
|
||||
const utc = moment.utc;
|
||||
const telegram = require("node-telegram-bot-api");
|
||||
|
||||
const Actor = function() {
|
||||
_.bindAll(this);
|
||||
|
||||
this.advice = null;
|
||||
this.adviceTime = utc();
|
||||
|
||||
this.price = 'Dont know yet :(';
|
||||
this.priceTime = utc();
|
||||
|
||||
this.commands = {
|
||||
'/start': 'emitStart',
|
||||
'/advice': 'emitAdvice',
|
||||
'/subscribe': 'emitSubscribe',
|
||||
'/unsubscribe': 'emitUnSubscribe',
|
||||
'/price': 'emitPrice',
|
||||
'/help': 'emitHelp'
|
||||
};
|
||||
if (telegrambot.donate) {
|
||||
this.commands['/donate'] = 'emitDonate';
|
||||
}
|
||||
this.rawCommands = _.keys(this.commands);
|
||||
this.chatId = null;
|
||||
this.subscribers = [];
|
||||
this.bot = new telegram(telegrambot.token, { polling: true });
|
||||
this.bot.onText(/(.+)/, this.verifyQuestion);
|
||||
};
|
||||
|
||||
Actor.prototype.processCandle = function(candle, done) {
|
||||
this.price = candle.close;
|
||||
this.priceTime = candle.start;
|
||||
|
||||
done();
|
||||
};
|
||||
|
||||
Actor.prototype.processAdvice = function(advice) {
|
||||
if (advice.recommendation === 'soft') return;
|
||||
this.advice = advice.recommendation;
|
||||
this.adviceTime = utc();
|
||||
this.advicePrice = this.price;
|
||||
this.subscribers.forEach(this.emitAdvice, this);
|
||||
};
|
||||
|
||||
if(emitTrades) {
|
||||
Actor.prototype.processTradeInitiated = function (tradeInitiated) {
|
||||
var message = 'Trade initiated. ID: ' + tradeInitiated.id +
|
||||
'\nAction: ' + tradeInitiated.action + '\nPortfolio: ' +
|
||||
tradeInitiated.portfolio + '\nBalance: ' + tradeInitiated.balance;
|
||||
this.bot.sendMessage(this.chatId, message);
|
||||
}
|
||||
|
||||
Actor.prototype.processTradeCancelled = function (tradeCancelled) {
|
||||
var message = 'Trade cancelled. ID: ' + tradeCancelled.id;
|
||||
this.bot.sendMessage(this.chatId, message);
|
||||
}
|
||||
|
||||
Actor.prototype.processTradeAborted = function (tradeAborted) {
|
||||
var message = 'Trade aborted. ID: ' + tradeAborted.id +
|
||||
'\nNot creating order! Reason: ' + tradeAborted.reason;
|
||||
this.bot.sendMessage(this.chatId, message);
|
||||
}
|
||||
|
||||
Actor.prototype.processTradeErrored = function (tradeErrored) {
|
||||
var message = 'Trade errored. ID: ' + tradeErrored.id +
|
||||
'\nReason: ' + tradeErrored.reason;
|
||||
this.bot.sendMessage(this.chatId, message);
|
||||
}
|
||||
|
||||
Actor.prototype.processTradeCompleted = function (tradeCompleted) {
|
||||
var message = 'Trade completed. ID: ' + tradeCompleted.id +
|
||||
'\nAction: ' + tradeCompleted.action +
|
||||
'\nPrice: ' + tradeCompleted.price +
|
||||
'\nAmount: ' + tradeCompleted.amount +
|
||||
'\nCost: ' + tradeCompleted.cost +
|
||||
'\nPortfolio: ' + tradeCompleted.portfolio +
|
||||
'\nBalance: ' + tradeCompleted.balance +
|
||||
'\nFee percent: ' + tradeCompleted.feePercent +
|
||||
'\nEffective price: ' + tradeCompleted.effectivePrice;
|
||||
this.bot.sendMessage(this.chatId, message);
|
||||
}
|
||||
}
|
||||
|
||||
Actor.prototype.verifyQuestion = function(msg, text) {
|
||||
this.chatId = msg.chat.id;
|
||||
if (text[1].toLowerCase() in this.commands) {
|
||||
this[this.commands[text[1].toLowerCase()]]();
|
||||
} else {
|
||||
this.emitHelp();
|
||||
}
|
||||
};
|
||||
|
||||
Actor.prototype.emitStart = function() {
|
||||
this.bot.sendMessage(this.chatId, 'Hello! How can I help you?');
|
||||
};
|
||||
|
||||
Actor.prototype.emitSubscribe = function() {
|
||||
if (this.subscribers.indexOf(this.chatId) === -1) {
|
||||
this.subscribers.push(this.chatId);
|
||||
this.bot.sendMessage(this.chatId, `Success! Got ${this.subscribers.length} subscribers.`);
|
||||
} else {
|
||||
this.bot.sendMessage(this.chatId, "You are already subscribed.");
|
||||
}
|
||||
};
|
||||
|
||||
Actor.prototype.emitUnSubscribe = function() {
|
||||
if (this.subscribers.indexOf(this.chatId) > -1) {
|
||||
this.subscribers.splice(this.subscribers.indexOf(this.chatId), 1);
|
||||
this.bot.sendMessage(this.chatId, "Success!");
|
||||
} else {
|
||||
this.bot.sendMessage(this.chatId, "You are not subscribed.");
|
||||
}
|
||||
};
|
||||
|
||||
Actor.prototype.emitAdvice = function(chatId) {
|
||||
let message = [
|
||||
'Advice for ',
|
||||
config.watch.exchange,
|
||||
' ',
|
||||
config.watch.currency,
|
||||
'/',
|
||||
config.watch.asset,
|
||||
' using ',
|
||||
config.tradingAdvisor.method,
|
||||
' at ',
|
||||
config.tradingAdvisor.candleSize,
|
||||
' minute candles, is:\n',
|
||||
].join('');
|
||||
if (this.advice) {
|
||||
message += this.advice +
|
||||
' ' +
|
||||
config.watch.asset +
|
||||
' ' +
|
||||
this.advicePrice +
|
||||
' (' +
|
||||
this.adviceTime.fromNow() +
|
||||
')';
|
||||
} else {
|
||||
message += 'None'
|
||||
}
|
||||
|
||||
if (chatId) {
|
||||
this.bot.sendMessage(chatId, message);
|
||||
} else {
|
||||
this.bot.sendMessage(this.chatId, message);
|
||||
}
|
||||
};
|
||||
|
||||
// sent price over to the last chat
|
||||
Actor.prototype.emitPrice = function() {
|
||||
const message = [
|
||||
'Current price at ',
|
||||
config.watch.exchange,
|
||||
' ',
|
||||
config.watch.currency,
|
||||
'/',
|
||||
config.watch.asset,
|
||||
' is ',
|
||||
this.price,
|
||||
' ',
|
||||
config.watch.currency,
|
||||
' (from ',
|
||||
this.priceTime.fromNow(),
|
||||
')'
|
||||
].join('');
|
||||
|
||||
this.bot.sendMessage(this.chatId, message);
|
||||
};
|
||||
|
||||
Actor.prototype.emitDonate = function() {
|
||||
this.bot.sendMessage(this.chatId, telegrambot.donate);
|
||||
};
|
||||
|
||||
Actor.prototype.emitHelp = function() {
|
||||
let message = _.reduce(
|
||||
this.rawCommands,
|
||||
function(message, command) {
|
||||
return message + ' ' + command + ',';
|
||||
},
|
||||
'Possible commands are:'
|
||||
);
|
||||
message = message.substr(0, _.size(message) - 1) + '.';
|
||||
this.bot.sendMessage(this.chatId, message);
|
||||
};
|
||||
|
||||
Actor.prototype.logError = function(message) {
|
||||
log.error('Telegram ERROR:', message);
|
||||
};
|
||||
|
||||
module.exports = Actor;
|
||||
Reference in new issue
Block a user