var Botkit = require('botkit'); var controller = Botkit.slackbot({ json_file_store: process.argv[3] }); var bot = controller.spawn({ token: process.argv[2] }) var problems = [ {"title": "Travelling salesman problem", "wiki_title": "Travelling_salesman_problem"}, {"title": "Knapsack problem", "wiki_title": "Knapsack_problem"}, {"title": "Bin packing problem", "wiki_title": "Bin_packing_problem"}, {"title": "Partition problem", "wiki_title": "Parition_problem"}, {"title": "Longest path problem", "wiki_title": "Longest_path_problem"}, {"title": "Longest common subsequence problem"}, {"title": "Art gallery problem"}, {"title": "Route inspection problem"}, {"title": "Calculated minimum spanning tree"} ] var last_index = -1; var test_channel_id = "C0NEYDD16"; bot.startRTM(function(err,bot,payload) { if (err) { throw new Error('Could not connect to Slack'); } }); function createData(id) { return {id: id, bot_calls: 0}; }; function incrementKey(id, key, amount, scope) { controller.storage[scope].get(id, function(err,data) { if (!data) { console.log("Initializing " + scope + " data"); data = createData(id); } console.log("Current " + scope + " data:",data); console.log("Incrementing mentions to " + (data[key] + amount)); data[key] = data[key] + amount controller.storage[scope].save(data); }); } controller.hears(["np"],["direct_message","direct_mention","mention","ambient"],function(bot,message) { console.log(message.user + " mentioned \"np\""); // Increment the logged amount of mentions if (message.channel != test_channel_id) { incrementKey(message.channel, "bot_calls", 1, "channels"); incrementKey(message.team, "bot_calls", 1, "teams"); incrementKey(message.user, "bot_calls", 1, "users"); } else { console.log("Message was from test channel! Mention counters will not be increased."); } // Decide what to do if (Math.random() < 0.9) { var index = Math.floor(Math.random() * problems.length); var base_url = "https://en.wikipedia.org/wiki/"; var problem, title, wiki_title; // Ensure that the same problem won't get posted twice while (index == last_index && problems.length > 1) { index = Math.floor(Math.random() * problems.length); } // Find the problem metadata problem = problems[index]; title = problem.title; wiki_title = title.replace(/ /g,"_"); // Reply with the chosen problem bot.reply(message,"Have you heard about the _" + title + "_? That is an NP-complete problem!\nSee " + base_url + wiki_title + " for more info!"); last_index = index; } else { bot.say( { text: '<@U0NEAMJS3|jonbot>, what do you think about NP-complete problems?', channel: message.channel } ); } // React with appropriate emoji bot.api.reactions.add({ timestamp: message.ts, channel: message.channel, name: "mount_fuji", },function(err, res) { if (err) { bot.botkit.log('Failed to add reaction emoji'); } }); });