12 Commits

Author SHA1 Message Date
8596483721 1.4.5 2017-05-13 15:49:38 +02:00
f54e124dba Fix diverging webhook object structure
No idea why, but on the server, all data is contained within a single
'payload' property, while I've never seen any such property on my
machine. Could be different node or express versions, but in any case,
this should fix it so that it just works no matter what.
2017-05-13 15:47:35 +02:00
fb8fc88101 1.4.4 2017-05-13 15:15:30 +02:00
6ca1254c9a Fix GitHub POST handler
1. robot.logger.debug didn't show any output
2. Send response for all requests
2017-05-13 15:14:22 +02:00
38483cbbeb 1.4.3 2017-05-12 14:02:54 +02:00
0203cb1a62 Fix typo 2017-05-12 14:02:46 +02:00
797fddfafb 1.4.2 2017-05-12 13:58:16 +02:00
82fe54b90a Fix string interpolation 2017-05-12 13:58:05 +02:00
4a8ea160a8 1.4.1 2017-05-12 01:39:55 +02:00
17543cb67b Return ether instead of wei 2017-05-12 01:39:27 +02:00
9bd875acba 1.4.0 2017-05-12 01:28:35 +02:00
cae2bd84b2 Ask for balance 2017-05-12 01:28:14 +02:00
2 changed files with 45 additions and 13 deletions

View File

@@ -47,23 +47,35 @@ const Web3 = require('web3');
robot.logger.info('[hubot-kredits] Wallet address: ' + hubotWalletAddress); robot.logger.info('[hubot-kredits] Wallet address: ' + hubotWalletAddress);
web3.eth.getBalance(hubotWalletAddress, function (err, balance) { getBalance().then(balance => {
if (err) { robot.logger.error('[hubot-kredits] Error checking balance'); return; }
if (balance <= 0) { if (balance <= 0) {
robot.logger.info('[hubot-kredits] Hubot is broke. Please send some ETH to ' + hubotWalletAddress); messageRoom(`Yo gang, I\'m broke! Please drop me some ETH to ${hubotWalletAddress}. kthxbai.`);
} }
}); });
let getValueFromContract = function(contractMethod, ...args) { function getBalance() {
return new Promise((resolve, reject) => {
web3.eth.getBalance(hubotWalletAddress, function (err, balance) {
if (err) {
robot.logger.error('[hubot-kredits] Error checking balance');
reject(err);
return;
}
resolve(balance);
});
});
}
function getValueFromContract(contractMethod, ...args) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
kredits[contractMethod](...args, (err, data) => { kredits[contractMethod](...args, (err, data) => {
if (err) { reject(err); } if (err) { reject(err); }
resolve(data); resolve(data);
}); });
}); });
}; }
let getContributorData = function(i) { function getContributorData(i) {
let promise = new Promise((resolve, reject) => { let promise = new Promise((resolve, reject) => {
getValueFromContract('contributorAddresses', i).then(address => { getValueFromContract('contributorAddresses', i).then(address => {
robot.logger.debug('address', address); robot.logger.debug('address', address);
@@ -81,9 +93,9 @@ const Web3 = require('web3');
}).catch(err => reject(err)); }).catch(err => reject(err));
}); });
return promise; return promise;
}; }
let getContributors = function() { function getContributors() {
return getValueFromContract('contributorsCount').then(contributorsCount => { return getValueFromContract('contributorsCount').then(contributorsCount => {
let contributors = []; let contributors = [];
@@ -93,9 +105,9 @@ const Web3 = require('web3');
return Promise.all(contributors); return Promise.all(contributors);
}); });
}; }
let getContributorByGithubUser = function(username) { function getContributorByGithubUser(username) {
let promise = new Promise((resolve, reject) => { let promise = new Promise((resolve, reject) => {
getContributors().then(contributors => { getContributors().then(contributors => {
let contrib = contributors.find(c => { let contrib = contributors.find(c => {
@@ -109,7 +121,7 @@ const Web3 = require('web3');
}); });
}); });
return promise; return promise;
}; }
function messageRoom(message) { function messageRoom(message) {
robot.messageRoom(process.env.KREDITS_ROOM, message); robot.messageRoom(process.env.KREDITS_ROOM, message);
@@ -217,16 +229,36 @@ const Web3 = require('web3');
}); });
} }
robot.respond(/(got ETH)|(got gas)\?/i, res => {
getBalance().then(balance => {
if (balance <= 0) {
res.send(`HALP, I\'m totally broke! Not a single wei in my pocket.`);
}
else if (balance >= 1e+17) {
res.send(`my wallet contains ${web3.fromWei(balance, 'ether')} ETH`);
}
else {
res.send(`I\'m almost broke! Only have ${web3.fromWei(balance, 'ether')} ETH left in my pocket. :(`);
}
});
});
robot.router.post('/incoming/kredits/github/'+process.env.KREDITS_WEBHOOK_TOKEN, (req, res) => { robot.router.post('/incoming/kredits/github/'+process.env.KREDITS_WEBHOOK_TOKEN, (req, res) => {
let evt = req.header('X-GitHub-Event'); let evt = req.header('X-GitHub-Event');
let data = req.body; let data = req.body;
robot.logger.debug(`Received GitHub hook. Event: ${evt}, action: ${data.action}`); // For some reason data is contained in a payload property on one
// machine, but directly in the root of the object on others
if (data.payload) { data = data.payload; }
robot.logger.info(`Received GitHub hook. Event: ${evt}, action: ${data.action}`);
if (evt === 'pull_request' && data.action === 'closed') { if (evt === 'pull_request' && data.action === 'closed') {
handleGitHubPullRequestClosed(data).then(() => res.send(200)); handleGitHubPullRequestClosed(data).then(() => res.send(200));
} }
else if (evt === 'issues' && data.action === 'closed') { else if (evt === 'issues' && data.action === 'closed') {
handleGitHubIssueClosed(data).then(() => res.send(200)); handleGitHubIssueClosed(data).then(() => res.send(200));
} else {
res.send(200);
} }
}); });

View File

@@ -1,6 +1,6 @@
{ {
"name": "hubot-kredits", "name": "hubot-kredits",
"version": "1.3.0", "version": "1.4.5",
"description": "Kosmos Kredits functionality for chat bots", "description": "Kosmos Kredits functionality for chat bots",
"main": "index.js", "main": "index.js",
"scripts": { "scripts": {