diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 000000000..3cd0513b8 --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,3 @@ +- [x] Finish my changes +- [ ] Push my commits to GitHub +- [ ] Open a pull request diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 000000000..3fb729deb --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1 @@ +@github/support What do you think about these updates? diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..3c3629e64 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 000000000..38072dcae --- /dev/null +++ b/.travis.yml @@ -0,0 +1,9 @@ +language: node_js +node_js: + - "4.1" + - "4.0" + - "0.12" + - "0.11" + - "0.10" + - "iojs" + diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md new file mode 100644 index 000000000..84c8153a8 --- /dev/null +++ b/ISSUE_TEMPLATE.md @@ -0,0 +1,5 @@ +- [ ] a task list item +- [ ] list syntax required +- [ ] normal **formatting**, @mentions, #1234 refs +- [ ] incomplete +- [x] completed diff --git a/Procfile b/Procfile new file mode 100644 index 000000000..44899d931 --- /dev/null +++ b/Procfile @@ -0,0 +1 @@ +worker: node bot.js diff --git a/bot.js b/bot.js index 00eb7b9bd..aa58083e0 100755 --- a/bot.js +++ b/bot.js @@ -26,7 +26,7 @@ This bot demonstrates many of the core features of Botkit: Run your bot from the command line: set token= - + node bot.js # USE THE BOT: @@ -106,6 +106,28 @@ controller.hears(['hello','hi'],'direct_message,direct_mention,mention',function }); }); +controller.hears(['hei','moi'],'direct_message,direct_mention,mention',function(bot, message) { + + bot.api.reactions.add({ + timestamp: message.ts, + channel: message.channel, + name: 'robot_face', + },function(err, res) { + if (err) { + bot.botkit.log('Failed to add emoji reaction :(',err); + } + }); + + + controller.storage.users.get(message.user,function(err, user) { + if (user && user.name) { + bot.reply(message,'Hei ' + user.name + '.' + 'Hauska tavata!!'); + } else { + bot.reply(message,'Hei. Hauska tutustua!'); + } + }); +}); + controller.hears(['call me (.*)'],'direct_message,direct_mention,mention',function(bot, message) { var matches = message.text.match(/call me (.*)/i); var name = matches[1]; @@ -133,6 +155,21 @@ controller.hears(['what is my name','who am i'],'direct_message,direct_mention,m }); }); +function isPrime(number) { + var start = 2; + while (start <= Math.sqrt(number)) { + if (number % start++ < 1) return false; + } + return number > 1; +} + +controller.hears(['who make you','who made you'],'direct_message,direct_mention,mention',function(bot, message) { + + controller.storage.users.get(message.user,function(err, user) { + bot.reply(message,'Metro group made me. Hihi'); + }); +}); + controller.hears(['shutdown'],'direct_message,direct_mention,mention',function(bot, message) { @@ -171,30 +208,31 @@ controller.hears(['uptime','identify yourself','who are you','what is your name' controller.hears(['fibonacci'], 'direct_message,direct_mention,mention', function(bot, message) { if (message.text === 'fibonacci') { - bot.reply(message, '1, 1, 2, 3, 5, 8, 13, 21, 34, 55'); + bot.reply(message, '1, 1, 2, 3, 5'); } }); controller.hears(['fibonacci ([0-9]+)'], 'direct_message,direct_mention,mention', function(bot, message) { var parameter = parseInt(message.match[1]); - + var fibonacci = calculateFibonacciUpto(parameter); - if (fibonacci[fibonacci.length-1] !== parameter) { bot.reply(message, 'That is not a Fibonacci number!'); } else { - bot.reply(message, fibonacci.slice(fibonacci.length-10,fibonacci.length).join(', ')); + for (var i = 0; i < 5; i++){ + fibonacci.push(fibonacci[fibonacci.length-2] + fibonacci[fibonacci.length-1]) + } + bot.reply(message, fibonacci.slice(fibonacci.length - 5,fibonacci.length).join(', ')); } }); function calculateFibonacciUpto(goal) { var fibonacci = [1, 1]; - while (fibonacci[fibonacci.length-1] < goal) { fibonacci.push(fibonacci[fibonacci.length-2] + fibonacci[fibonacci.length-1]); } - + return fibonacci; } @@ -227,16 +265,17 @@ controller.hears('prime (.*)',['direct_message', 'direct_mention', 'mention'],fu var parameter = parseInt(message.match[1]); if (MathHelper.isPrime(parameter)) { + bot.reply(message, "your parameter: " + parameter + " is a Prime number"); var primes = new Array(); - var number = parameter + 1; + var number = parameter - 1; - while (primes.length < 10) { + while (primes.length < 10 && number >=0) { if (MathHelper.isPrime(number)) { primes.push(number); } - number++; + number--; } var reply = ""; @@ -247,7 +286,58 @@ controller.hears('prime (.*)',['direct_message', 'direct_mention', 'mention'],fu return bot.reply(message, reply); } else { - return bot.reply(message, "your parameter: " + parameter + " is not Prime number"); + bot.reply(message, "your parameter: " + parameter + " is not Prime number"); + var primes = new Array(); + var number = parameter - 1; + + while (primes.length < 10 && number >=0) { + + if (MathHelper.isPrime(number)) { + primes.push(number); + } + + number--; + } + + var reply = ""; + for (var i = 0; i < primes.length; i++) { + reply += primes[i] + " "; + } + + return bot.reply(message, reply); } }); +controller.hears('give (.*)',['direct_message', 'direct_mention', 'mention'],function(bot,message) { + var gameName = message.match[1]; + var request = require('request'); + request('http://www.speedrun.com/api_records.php?series=' + gameName, function (error, response, body) { + if (!error && response.statusCode == 200) { + var parse = JSON.parse(body); + console.log(parse); + bot.reply(message, parse[Object.keys(parse)[0]][Object.keys(parse[Object.keys(parse)[0]])[0]]['time']); + } + }) +}); + +controller.hears(['google (.*)','google this(.*)','google haku (.*)'],['direct_message', 'direct_mention', 'mention'],function(bot,message) { + var keyWord = message.match[1]; + var google = require('google'); + + google.resultsPerPage = 4; + var nextCounter = 0; + + google(keyWord, function (err, next, links){ + if (err) console.error(err) + + for (var i = 0; i < links.length; ++i) { + bot.reply(message, links[i].title + ' - ' + links[i].link); + //bot.reply(message, links[i].description + "\n"); + } + + if (nextCounter < 2) { + nextCounter += 1 + if (next) next() + } + }) +}); diff --git a/node-inspector b/node-inspector new file mode 160000 index 000000000..bd7337056 --- /dev/null +++ b/node-inspector @@ -0,0 +1 @@ +Subproject commit bd733705673b158e3dcb022f67f7cf386e7fa61e diff --git a/package.json b/package.json index 69a5959a8..a3ff40c2c 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,8 @@ "jfs": "^0.2.6", "mustache": "^2.2.1", "request": "^2.67.0", - "ws": "^1.0.0" + "ws": "^1.0.0", + "google": "~1.5.0" }, "devDependencies": { "jscs": "^2.7.0", diff --git a/tests/botmathTest.js b/tests/botmathTest.js new file mode 100644 index 000000000..6efe52606 --- /dev/null +++ b/tests/botmathTest.js @@ -0,0 +1,17 @@ +var assert = require('assert'); +var bothmath = require('../botmath.js'); + +describe('botmath', function() { + describe('sum', function () { + it('should return sum of 2 values', function () { + assert.equal(-10, bothmath.sum(1, 2)); + assert.equal(-2, bothmath.sum(-2, 0)); + assert.equal(1, bothmath.sum(-1, 2)); + assert.equal(6.5, bothmath.sum(3.5, 3)); + assert.equal(1337, bothmath.sum(1338.2, -1.2)); + }) + it('should return NaN if both values are not numeric', function () { + assert.ok(isNaN(bothmath.sum(1335, 'a'))); + }); + }); +}); diff --git a/weather b/weather new file mode 160000 index 000000000..cc33373de --- /dev/null +++ b/weather @@ -0,0 +1 @@ +Subproject commit cc33373de4fc850b050efe844c6e5d6089aa44c0