-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathcoin.js
More file actions
129 lines (97 loc) · 4.13 KB
/
coin.js
File metadata and controls
129 lines (97 loc) · 4.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
// TODO: Fazer um serviço de http para capturarmos o callback
// das tranações de bitocoin e mostrar no canal
var e = require(__dirname + '/../lib/event');
var config = require(__dirname + '/../lib/config');
var helper = require(__dirname + '/../lib/helper');
var request = require('request');
var address = require('bitcoin-address');
var db = require(__dirname + '/../lib/db');
var Puid = require('puid');
var puid = new Puid();
e.on('command.probe.coin', function(callback){
var info = {
name : 'coin',
version : '0.0.1',
description : 'Envie bitcoins para pessoas que ajudaram você.'
};
callback(null, info);
});
e.on('command.exec.coin', function(args, nick){
if(args._ && args._[0] && args._[1] && args._[0].toLowerCase() === 'pedir'){
return helper.say(args._[1] + ', você pode doar bitcoins para o ' +
'usuário ' + nick + ' se este foi prestativo, utilize o comando ' +
'!coin ' + nick + ' para gerar um endereço de doação.');
}
// Quando alguem quiser configurar a sua wallet
if(args._ && args._[0] && args._[0].toLowerCase() === 'carteira'){
if(!address.validate(args._[1]))
return helper.say(nick + ', a carteira enviada é inválida.');
db.put('wallet::' + nick, args._[1], function(err){
if(err)
throw err;
helper.say(nick + ', sua carteira foi configurada com sucesso.');
});
return;
}
// Quando quiserem enviar uma doação
if(args._ && args._[0]){
db.get('wallet::' + args._[0], function(err, wallet){
if(err && !err.notFound)
throw err;
if(!wallet){
var text = 'Você não pode fazer doações para ' + args._[0] +
' ' + 'pois ele ainda não configurou uma carteira.';
return helper.say(text);
}
var donationId = puid.generate();
var callback = encodeURIComponent(config.http.url +
'/api/v1/blockchain?secret=' + config.blockchain.secret + '&' +
'donation=' + donationId);
var url = '/api/receive?method=create&cors=true&format=plain&' +
'address=' + wallet + '&shared=false&' +
'callback=' + callback;
request('https://blockchain.info/' + url, function(err, res, body){
if(err)
console.error(err.stack);
if(err || res.statusCode !== 200)
return helper.say('Não foi possível criar a carteira ' +
'para enviar a doação, tente mais tarde.');
var json = JSON.parse(body);
var donation = {
from : nick,
to : args._[0],
date : new Date()
};
db.put('donation::' + donationId, donation,
function(err){
if(err)
throw err;
helper.say('Para enviar uma doação para o usuário ' +
args._[0] + ' envie os bitcoins para o endereço ' +
json.input_address);
});
});
});
return;
}
helper.say(nick + ', configure sua carteira para receber doações usando' +
' o comando !coin carteira sua_carteira ou envie uma doação usando o ' +
'comando !coin usuario. Peça doações usando !coin pedir usuario.');
});
// Escutamos pelos pagamentos do blockchain
e.on('http.v1.get.blockchain', function(req, res){
if(req.query.secret !== config.blockchain.secret)
return res.send(401, 'Wront secret.');
if(Number(req.query.confirmations) > 0)
return res.send(200);
db.get('donation::' + req.query.donation, function(err, donation){
if(err && !err.notFound)
throw err;
if(err && err.notFound)
return res.send(200);
var btc = Number(req.query.value) / 100000000;
helper.say('[Doação] O usuário ' + donation.from + ' acabou de doar ' +
btc + 'BTC para ' + donation.to);
res.send(200);
});
});