This repository has been archived on 2025-10-29. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
gekko/plugins/mailer.js
2021-06-06 20:25:14 +02:00

139 lines
3.4 KiB
JavaScript

var email = require("emailjs");
var _ = require('lodash');
var log = require('../core/log.js');
var util = require('../core/util.js');
var config = util.getConfig();
var mailConfig = config.mailer;
var Mailer = function(done) {
_.bindAll(this);
this.server;
this.price = 'N/A';
this.done = done;
this.setup();
};
Mailer.prototype.setup = function(done) {
var setupMail = function(err, result) {
if(result) {
console.log('Got it.');
mailConfig.password = result.password;
}
if(_.isEmpty(mailConfig.to))
mailConfig.to = mailConfig.email;
if(_.isEmpty(mailConfig.from))
mailConfig.from = mailConfig.email;
if(_.isEmpty(mailConfig.user) && mailConfig.smtpauth)
mailConfig.user = mailConfig.email;
this.server = email.server.connect({
user: mailConfig.user,
password: mailConfig.password,
host: mailConfig.server,
ssl: mailConfig.ssl,
port: mailConfig.port,
tls: mailConfig.tls
});
if(mailConfig.sendMailOnStart) {
this.mail(
"Gekko has started",
[
"I've just started watching ",
config.watch.exchange,
' ',
config.watch.currency,
'/',
config.watch.asset,
". I'll let you know when I got some advice"
].join(''),
_.bind(function(err) {
this.checkResults(err);
this.done();
}, this)
);
} else
this.done();
log.debug('Setup email adviser.');
};
if(!mailConfig.password) {
// ask for the mail password
var prompt = require('prompt-lite');
prompt.start();
var warning = [
'\n\n\tYou configured Gekko to mail you advice, Gekko needs your email',
'password to send emails (to you). Gekko is an opensource project',
'[ http://github.com/askmike/gekko ], you can take my word but always',
'check the code yourself.',
'\n\n\tWARNING: If you have not downloaded Gekko from the github page above we',
'CANNOT guarantuee that your email address & password are safe!\n'
].join('\n\t');
log.warn(warning);
prompt.get({name: 'password', hidden: true}, _.bind(setupMail, this));
} else {
setupMail.call(this);
}
};
Mailer.prototype.mail = function(subject, content, done) {
this.server.send({
text: content,
from: mailConfig.from,
to: mailConfig.to,
subject: mailConfig.tag + subject
}, done || this.checkResults);
};
Mailer.prototype.processCandle = function(candle, done) {
this.price = candle.close;
done();
};
Mailer.prototype.processAdvice = function(advice) {
if (advice.recommendation == "soft" && mailConfig.muteSoft) return;
var text = [
'Gekko is watching ',
config.watch.exchange,
' and has detected a new trend, advice is to go ',
advice.recommendation,
'.\n\nThe current ',
config.watch.asset,
' price is ',
config.watch.currency,
' ',
this.price
].join('');
var subject = 'New advice: go ' + advice.recommendation;
this.mail(subject, text);
};
Mailer.prototype.processStratNotification = function({ content }) {
const subject = `New notification from ${config.tradingAdvisor.method}`;
const text = [
'Gekko received new notification :\n\n',
content
].join('');
this.mail(subject, text);
}
Mailer.prototype.checkResults = function(err) {
if(err)
log.warn('error sending email', err);
else
log.info('Send advice via email.');
};
module.exports = Mailer;