From 9497da3b22f7e3bd6dde0fc7e708c9a077ccb605 Mon Sep 17 00:00:00 2001 From: Ben Brown Date: Thu, 20 Dec 2018 13:48:43 -0600 Subject: [PATCH] remove studio features --- app.json | 6 +- bot.js | 24 +- .../register_with_studio.js | 58 ----- components/express_webserver.js | 6 - components/onboarding.js | 30 +-- components/plugin_glitch.js | 5 - docs/glitch_directory.md | 17 +- glitch_readme.md | 8 +- package-lock.json | 240 +++++++++--------- package.json | 4 +- readme.md | 10 +- skills/channel_join.js | 4 +- skills/help.js | 21 -- views/installation.hbs | 24 -- 14 files changed, 153 insertions(+), 304 deletions(-) delete mode 100644 components/express_middleware/register_with_studio.js delete mode 100644 skills/help.js diff --git a/app.json b/app.json index 9200a79..86fd9ed 100644 --- a/app.json +++ b/app.json @@ -3,7 +3,7 @@ "description": "A starting point for building custom Slack applications", "repository": "https://github.com/howdyai/botkit-starter-slack", "keywords": ["node", "bots", "slack","botkit"], - "website": "https://studio.botkit.ai/", + "website": "https://botkit.ai/", "success_url":"/", "addons":[ { @@ -17,10 +17,6 @@ }, "clientSecret": { "description": "Client Secret provided by Slack" - }, - "studio_token": { - "description": "Token associated with your bot in Botkit Studio", - "required":false } } } diff --git a/bot.js b/bot.js index 79a12a5..0448079 100644 --- a/bot.js +++ b/bot.js @@ -23,13 +23,9 @@ This bot demonstrates many of the core features of Botkit: -> http://api.slack.com - Get a Botkit Studio token from Botkit.ai: - - -> https://studio.botkit.ai/ - Run your bot from the command line: - clientId= clientSecret= PORT=<3000> studio_token= node bot.js + clientId= clientSecret= PORT=<3000> node bot.js # USE THE BOT: @@ -97,7 +93,6 @@ if (!process.env.clientId || !process.env.clientSecret) { webserver.get('/', function(req, res){ res.render('installation', { - studio_enabled: controller.config.studio_token ? true : false, domain: req.get('host'), protocol: req.protocol, glitch_domain: process.env.PROJECT_DOMAIN, @@ -105,7 +100,7 @@ if (!process.env.clientId || !process.env.clientSecret) { }); }) - var where_its_at = 'https://' + process.env.PROJECT_DOMAIN + '.glitch.me/'; + var where_its_at = 'http://' + (process.env.PROJECT_DOMAIN ? process.env.PROJECT_DOMAIN+ '.glitch.me/' : 'localhost:' + process.env.PORT || 3000); console.log('WARNING: This application is not fully configured to work with Slack. Please see instructions at ' + where_its_at); }else { @@ -134,7 +129,7 @@ if (!process.env.clientId || !process.env.clientSecret) { // This captures and evaluates any message sent to the bot as a DM // or sent to the bot in the form "@bot message" and passes it to - // Botkit Studio to evaluate for trigger words and patterns. + // Botkit CMS to evaluate for trigger words and patterns. // If a trigger is matched, the conversation will automatically fire! // You can tie into the execution of the script using the functions // controller.studio.before, controller.studio.after and controller.studio.validate @@ -144,7 +139,7 @@ if (!process.env.clientId || !process.env.clientSecret) { if (!convo) { // no trigger was matched // If you want your bot to respond to every message, - // define a 'fallback' script in Botkit Studio + // define a 'fallback' script in Botkit CMS // and uncomment the line below. // controller.studio.run(bot, 'fallback', message.user, message.channel); } else { @@ -153,14 +148,14 @@ if (!process.env.clientId || !process.env.clientSecret) { convo.setVar('current_time', new Date()); } }).catch(function(err) { - bot.reply(message, 'I experienced an error with a request to Botkit Studio: ' + err); - debug('Botkit Studio: ', err); + bot.reply(message, 'I experienced an error with a request to Botkit CMS: ' + err); + debug('Botkit CMS: ', err); }); }); } else { console.log('~~~~~~~~~~'); - console.log('NOTE: Botkit Studio functionality has not been enabled'); - console.log('To enable, pass in a studio_token parameter with a token from https://studio.botkit.ai/'); + console.log('NOTE: Botkit CMS functionality has not been enabled'); + console.log('Learn mode https://github.com/howdyai/botkit-cms'); } } @@ -172,8 +167,7 @@ function usage_tip() { console.log('~~~~~~~~~~'); console.log('Botkit Starter Kit'); console.log('Execute your bot application like this:'); - console.log('clientId= clientSecret= PORT=3000 studio_token= node bot.js'); + console.log('clientId= clientSecret= PORT=3000 node bot.js'); console.log('Get Slack app credentials here: https://api.slack.com/apps') - console.log('Get a Botkit Studio token here: https://studio.botkit.ai/') console.log('~~~~~~~~~~'); } diff --git a/components/express_middleware/register_with_studio.js b/components/express_middleware/register_with_studio.js deleted file mode 100644 index a5e32f4..0000000 --- a/components/express_middleware/register_with_studio.js +++ /dev/null @@ -1,58 +0,0 @@ -var request = require('request'); -var debug = require('debug')('botkit:register_with_studio'); -module.exports = function(webserver, controller) { - - var registered_this_session = false; - - controller.registerDeployWithStudio = function(host) { - if (!registered_this_session && controller.config.studio_token) { - - // information about this instance of Botkit - // send to Botkit Studio in order to display in the hosting tab - var instance = { - url: host, - version: controller.version(), - ts: new Date(), - } - - request({ - method: 'post', - uri: (controller.config.studio_command_uri || 'https://studio.botkit.ai') + '/api/v1/bots/phonehome?access_token=' + controller.config.studio_token, - form: instance, - },function(err, res, body) { - - registered_this_session = true; - - if (err) { - debug('Error registering instance with Botkit Studio', err); - } else { - - var json =null; - try { - json = JSON.parse(body); - } catch(err) { - debug('Error registering instance with Botkit Studio', err); - } - - if (json) { - if (json.error) { - debug('Error registering instance with Botkit Studio', json.error); - } - } - } - - }); - - } - } - - - if (webserver && controller.config.studio_token) { - webserver.use(function(req, res, next) { - controller.registerDeployWithStudio(req.get('host')); - next(); - }); - - } - -} diff --git a/components/express_webserver.js b/components/express_webserver.js index 509359e..0c2f48f 100644 --- a/components/express_webserver.js +++ b/components/express_webserver.js @@ -27,12 +27,6 @@ module.exports = function(controller) { webserver.set('view engine', 'hbs'); webserver.set('views', __dirname + '/../views/'); - // import express middlewares that are present in /components/express_middleware - var normalizedPath = require("path").join(__dirname, "express_middleware"); - require("fs").readdirSync(normalizedPath).forEach(function(file) { - require("./express_middleware/" + file)(webserver, controller); - }); - webserver.use(express.static('public')); var server = http.createServer(webserver); diff --git a/components/onboarding.js b/components/onboarding.js index c294ee7..db3bf7a 100644 --- a/components/onboarding.js +++ b/components/onboarding.js @@ -3,29 +3,15 @@ var debug = require('debug')('botkit:onboarding'); module.exports = function(controller) { controller.on('onboard', function(bot) { - debug('Starting an onboarding experience!'); - - if (controller.config.studio_token) { - bot.api.im.open({user: bot.config.createdBy}, function(err, direct_message) { - if (err) { - debug('Error sending onboarding message:', err); - } else { - controller.studio.run(bot, 'onboarding', bot.config.createdBy, direct_message.channel.id, direct_message).catch(function(err) { - debug('Error: encountered an error loading onboarding script from Botkit Studio:', err); - }); - } - }); - } else { - bot.startPrivateConversation({user: bot.config.createdBy},function(err,convo) { - if (err) { - console.log(err); - } else { - convo.say('I am a bot that has just joined your team'); - convo.say('You must now /invite me to a channel so that I can be of use!'); - } - }); - } + bot.startPrivateConversation({user: bot.config.createdBy},function(err,convo) { + if (err) { + console.log(err); + } else { + convo.say('I am a bot that has just joined your team'); + convo.say('You must now /invite me to a channel so that I can be of use!'); + } + }); }); } diff --git a/components/plugin_glitch.js b/components/plugin_glitch.js index a027499..cefee4b 100644 --- a/components/plugin_glitch.js +++ b/components/plugin_glitch.js @@ -17,13 +17,8 @@ module.exports = function(controller) { // if this is running on Glitch if (process.env.PROJECT_DOMAIN) { - - // Register with studio using the provided domain name - controller.registerDeployWithStudio(process.env.PROJECT_DOMAIN + '.glitch.me'); - // make a web call to self every 55 seconds // in order to avoid the process being put to sleep. keepalive(); - } } diff --git a/docs/glitch_directory.md b/docs/glitch_directory.md index 81f875b..4e1b046 100644 --- a/docs/glitch_directory.md +++ b/docs/glitch_directory.md @@ -1,6 +1,6 @@ # Botkit Starter Kit for Slack Bots -This repo contains everything you need to get started building a Slack bot with [Botkit](https://botkit.ai) and [Botkit Studio](https://botkit.ai). +This repo contains everything you need to get started building a Slack bot with [Botkit](https://botkit.ai). Botkit is designed to ease the process of designing and running useful, creative bots that live inside messaging platforms. Bots are applications that can send and receive messages, and in many cases, appear alongside their human counterparts as users. @@ -12,23 +12,16 @@ If you are looking to create a bot on other platforms using Glitch, check out th ### What's Included * [Botkit core](https://github.com/howdyai/botkit/blob/master/docs/readme.md#developing-with-botkit) - a complete programming system for building conversational software -* [Botkit Studio API](https://github.com/howdyai/botkit/blob/master/docs/readme-studio.md#function-index) - additional APIs that extend Botkit with powerful tools and APIs * [Pre-configured Express.js webserver](https://expressjs.com/) including: * A customizable "Install my Bot" homepage * Login and oauth endpoints that allow teams to install your bot * Webhook endpoints for communicating with platforms * Sample skill modules that demonstrate various features of Botkit -* A customizable onboarding experience for new teams powered by Botkit Studio ### Getting Started There are a myriad of methods you can use to set up an application on Slack, but we feel this is the most flexible path you can use to setup your bot on the Slack Events API. -#### Use Botkit Studio - [Botkit Studio](https://studio.botkit.ai/signup?code=slackglitch) is a set of tools that adds capabilities to the open source Botkit library by offering hosted GUI interfaces for script management and action trigger definition. - - While Botkit Studio is *not required* to build a bot using Botkit, we highly recommend it as your bot will be easier to manage, customize and extend. - #### Set up your Slack Application Once you have remixed this project, the next thing you will want to do is set up a new Slack application via the [Slack developer portal](https://api.slack.com/). This is a multi-step process, but only takes a few minutes. @@ -36,19 +29,15 @@ If you are looking to create a bot on other platforms using Glitch, check out th * [Read this step-by-step guide](https://github.com/howdyai/botkit/blob/master/docs/slack-events-api.md) to make sure everything is set up. * We also have this [handy video walkthrough](https://youtu.be/us2zdf0vRz0) for setting up this project with Glitch. -Next, get a Botkit Studio token [from your Botkit developer account](https://studio.botkit.ai/) if you have decided to use Studio. - - Update the `.env` file in the Glitch project with your newly acquired tokens. If you have created this project from Studio, all your tokens have been entered in your `.env` already for you! + Update the `.env` file in the Glitch project with your newly acquired tokens. Once all your tokens have been entered, your `Show Live` button should become green. Click this button and you will see an option to add this bot to your team. - Once successfully logged in, your bot will connect to Slack AND Botkit Studio and leap into action! - Now comes the fun part of [making your bot!](https://github.com/howdyai/botkit/blob/master/docs/readme.md#basic-usage) # Developer & Support Community -You can find full documentation for Botkit on our [GitHub page](https://github.com/howdyai/botkit/blob/master/readme.md). Botkit Studio users can access the [Botkit Studio Knowledge Base](https://botkit.groovehq.com/help_center) for help in managing their account. +You can find full documentation for Botkit on our [GitHub page](https://github.com/howdyai/botkit/blob/master/readme.md). ### Need more help? * Glitch allows users to ask the community for help directly from the editor! For more information on raising your hand, [read this blog post.](https://medium.com/glitch/just-raise-your-hand-how-glitch-helps-aa6564cb1685) diff --git a/glitch_readme.md b/glitch_readme.md index 3903d48..e49d727 100644 --- a/glitch_readme.md +++ b/glitch_readme.md @@ -1,12 +1,10 @@ # Howdy, bot builder! ## When you see "Show Live" in the upper left corner, your new bot app is live. -## Click the sunglasses to view your app, then go back to [Botkit Studio](https://studio.botkit.ai) to finish up. +## Click the sunglasses to view your app! ### Having trouble? -* You should check [that your .env file](?path=.env:1:0) has all the correct tokens as created in your [provisioning step](https://github.com/howdyai/botkit/blob/master/docs/provisioning/). - -* The [Botkit Studio knowledge base](https://botkit.groovehq.com/) contains in-depth information about using Botkit Studio, or you can [contact us](https://botkit.groovehq.com/knowledge_base/topics/contact-us-23) directly. +* You should check [that your .env file](?path=.env:1:0) has all the correct tokens. * *Raise your hand!* - Glitch allows users to ask the community for help directly from the editor! For more information on raising your hand, [read this blog post.](https://medium.com/glitch/just-raise-your-hand-how-glitch-helps-aa6564cb1685) -* Join our thriving community of Botkit developers and bot enthusiasts at large. Over 4500 members strong, [our open teams group](http://community.botkit.ai) is _the place_ for people interested in the art and science of making bots. +* Join our thriving community of Botkit developers and bot enthusiasts at large. Over 9000 members strong, [our open community group](http://community.botkit.ai) is _the place_ for people interested in the art and science of making bots. diff --git a/package-lock.json b/package-lock.json index acf2513..7e95180 100644 --- a/package-lock.json +++ b/package-lock.json @@ -395,19 +395,19 @@ "integrity": "sha512-A2TAGbTFdBw9azHbpVd+/FkdW2T6msN1uct1O9bH3vTerEHKZhTXJUQXy+hNq1B0RagfU8U+KBdqiZpxjhOUQA==" }, "@types/node": { - "version": "9.6.35", - "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.35.tgz", - "integrity": "sha512-h5zvHS8wXHGa+Gcqs9K8vqCgOtqjr0+NqG/DDJmQIX1wpR9HivAfgV8bjcD3mGM4bPfQw5Aneb2Pn8355L83jA==" + "version": "9.6.41", + "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.41.tgz", + "integrity": "sha512-sPZWEbFMz6qAy9SLY7jh5cgepmsiwqUUHjvEm8lpU6kug2hmmcyuTnwhoGw/GWpI5Npue4EqvsiQQI0eWjW/ZA==" }, "@types/range-parser": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.2.tgz", - "integrity": "sha512-HtKGu+qG1NPvYe1z7ezLsyIaXYyi8SoAVqWDZgDQ8dLrsZvSzUNCwZyfX33uhWxL/SU0ZDQZ3nwZ0nimt507Kw==" + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", + "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==" }, "@types/request": { - "version": "2.48.0", - "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.0.tgz", - "integrity": "sha512-KnfoOtqXKllSqfXSEvGTd8KDkNlpHs+PWr6I6XiEIWk/jckH3pNmWDXNFZyPkB9wApb8vzDq2wMByM/0GFSmXg==", + "version": "2.48.1", + "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.1.tgz", + "integrity": "sha512-ZgEZ1TiD+KGA9LiAAPPJL68Id2UWfeSO62ijSXZjFJArVV+2pKcsVHmrcu+1oiE3q6eDGiFiSolRc4JHoerBBg==", "requires": { "@types/caseless": "*", "@types/form-data": "*", @@ -430,9 +430,9 @@ "integrity": "sha512-h8jF5yPUoHH1QUIDfHgqFs7Y0UykKB5CJ1Z32PHGmHRLmW0pI+kYKAEnXVqeUZ3ygFmDkyvhD4vUZN+RZyTd1w==" }, "@types/tough-cookie": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-2.3.3.tgz", - "integrity": "sha512-MDQLxNFRLasqS4UlkWMSACMKeSm1x4Q3TxzUC7KQUsh6RK1ZrQ0VEyE3yzXcBu+K8ejVj4wuX32eUG02yNp+YQ==" + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-Set5ZdrAaKI/qHdFlVMgm/GsAv/wkXhSTuZFkJ+JI7HK+wIkIlOaUXSXieIvJ0+OvGIqtREFoE+NHJtEq0gtEw==" }, "@types/url-join": { "version": "0.8.2", @@ -713,7 +713,7 @@ }, "base64url": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base64url/-/base64url-2.0.0.tgz", + "resolved": "http://registry.npmjs.org/base64url/-/base64url-2.0.0.tgz", "integrity": "sha1-6sFuA+oUOO/5Qj1puqNiYu0fcLs=" }, "bcrypt-pbkdf": { @@ -778,9 +778,9 @@ } }, "botkit": { - "version": "0.6.19", - "resolved": "https://registry.npmjs.org/botkit/-/botkit-0.6.19.tgz", - "integrity": "sha512-6X2nFJD1kohTmAe/zRS9k5uba2JP8sVIEvRQr0O+gulkAD6hFQbpV9zxf05VGVigN3ZhnKA9f4eTSM2n8TILUw==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/botkit/-/botkit-0.7.0.tgz", + "integrity": "sha512-ay3yX/B6px9WVMyp52uLN5IUoEW0Auk8q3NwqxS+bnKzq6uuH7h4+2MXHEeyHyVARE4KkY+lCGVVxPhR1ydquQ==", "requires": { "async": "^2.6.1", "back": "^1.0.2", @@ -833,22 +833,23 @@ "monk": "^6.0.1" } }, - "botkit-studio-metrics": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/botkit-studio-metrics/-/botkit-studio-metrics-0.0.2.tgz", - "integrity": "sha1-gmZS+BHoLrPFz5rYGO0HWFDp0ZU=", - "requires": { - "md5": "^2.2.1", - "request": "^2.83.0" - } - }, "botkit-studio-sdk": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/botkit-studio-sdk/-/botkit-studio-sdk-1.0.8.tgz", - "integrity": "sha1-focHv7hGKBPAgVXTqIpaSQhFzPU=", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/botkit-studio-sdk/-/botkit-studio-sdk-1.0.9.tgz", + "integrity": "sha512-B+WBPeAFJ8aAuXYbkS7sOx6YtV0m2IXwn0xMxKhjRtIES9q10PjABZX5aLao8wtwWJ2PXggMhJJqbmLejn8PWA==", "requires": { - "promise": "^7.1.1", - "request": "^2.67.0" + "promise": "^8.0.2", + "request": "^2.88.0" + }, + "dependencies": { + "promise": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.0.2.tgz", + "integrity": "sha512-EIyzM39FpVOMbqgzEHhxdrEhtOSDOtjMZQ0M6iVfCE+kWNgCkAyOdnuCWqfmflylftfadU6FkiMgHZA2kUzwRw==", + "requires": { + "asap": "~2.0.6" + } + } } }, "bowser": { @@ -1084,9 +1085,9 @@ "integrity": "sha1-YFiWYkBTr4wo775zXCWjAaYcZcU=" }, "core-js": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", - "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==" + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.1.tgz", + "integrity": "sha512-L72mmmEayPJBejKIWe2pYtGis5r0tQ5NaJekdhyXgeMQTpJoBsH0NL4ElY2LfSoV15xeQWKQ+XTTOZdyero5Xg==" }, "core-util-is": { "version": "1.0.2", @@ -1145,9 +1146,9 @@ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, "detectrtc": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/detectrtc/-/detectrtc-1.3.7.tgz", - "integrity": "sha512-eniu45rJNjF95QdU19wVjiwnQEZjY2fKLyeTNUVFfSiQplBIP0No8v75X25/wUnIfIQB/ymaVMAfrB3WIYta8Q==" + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/detectrtc/-/detectrtc-1.3.8.tgz", + "integrity": "sha512-Usv8Lz41k6WVXhDOAm+fhQ0LXCS9ZUdEToMYqMLN0S7edqBAuXQSC5Fxq4vbtFQApMDq/Ad+PmAGf7/HIQaNaw==" }, "dom-walk": { "version": "0.1.1", @@ -1199,9 +1200,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "email-addresses": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/email-addresses/-/email-addresses-3.0.2.tgz", - "integrity": "sha512-IMn9dnwLMsgZjdUHswB/UZ0S8LQ/u+2/qjnHJ9tCtp3QHZsIYwJCiJOo2FT0i3CwwK/dtSODYtxuvzV4D9MY5g==" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/email-addresses/-/email-addresses-3.0.3.tgz", + "integrity": "sha512-kUlSC06PVvvjlMRpNIl3kR1NRXLEe86VQ7N0bQeaCZb2g+InShCeHQp/JvyYNTugMnRN2NvJhHlc3q12MWbbpg==" }, "encodeurl": { "version": "1.0.2", @@ -1382,9 +1383,9 @@ } }, "follow-redirects": { - "version": "1.5.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.9.tgz", - "integrity": "sha512-Bh65EZI/RU8nx0wbYF9shkFZlqLP+6WT/5FnA3cE/djNSuKNHJEinGGZgu/cQEkeeb2GdFOgenAmn8qaqYke2w==", + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", "requires": { "debug": "=3.1.0" }, @@ -1465,27 +1466,33 @@ } }, "google-auth-library": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-2.0.1.tgz", - "integrity": "sha512-CWLKZxqYw4SE+fE3GWbVT9r/10h75w8lB3cdmmLpLtCfccFDcsI84qI5rx7npemlrHtKJh3C2HUz4s6SihCeIQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-2.0.2.tgz", + "integrity": "sha512-FURxmo1hBVmcfLauuMRKOPYAPKht3dGuI2wjeJFalDUThO0HoYVjr4yxt5cgYSFm1dgUpmN9G/poa7ceTFAIiA==", "requires": { "axios": "^0.18.0", "gcp-metadata": "^0.7.0", "gtoken": "^2.3.0", "https-proxy-agent": "^2.2.1", "jws": "^3.1.5", - "lodash.isstring": "^4.0.1", - "lru-cache": "^4.1.3", + "lru-cache": "^5.0.0", "semver": "^5.5.0" } }, "google-p12-pem": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-1.0.2.tgz", - "integrity": "sha512-+EuKr4CLlGsnXx4XIJIVkcKYrsa2xkAmCvxRhX2HsazJzUBAJ35wARGeApHUn4nNfPD03Vl057FskNr20VaCyg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-1.0.3.tgz", + "integrity": "sha512-KGnAiMMWaJp4j4tYVvAjfP3wCKZRLv9M1Nir2wRRNWUYO7j1aX8O9Qgz+a8/EQ5rAvuo4SIu79n6SIdkNl7Msg==", "requires": { - "node-forge": "^0.7.4", - "pify": "^3.0.0" + "node-forge": "^0.7.5", + "pify": "^4.0.0" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + } } }, "googleapis": { @@ -1517,7 +1524,7 @@ }, "gtoken": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-2.3.0.tgz", + "resolved": "http://registry.npmjs.org/gtoken/-/gtoken-2.3.0.tgz", "integrity": "sha512-Jc9/8mV630cZE9FC5tIlJCZNdUjwunvlwOtCz6IDlaiB4Sz68ki29a1+q97sWTnTYroiuF9B135rod9zrQdHLw==", "requires": { "axios": "^0.18.0", @@ -1528,9 +1535,9 @@ }, "dependencies": { "mime": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz", - "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==" + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", + "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==" } } }, @@ -1843,9 +1850,9 @@ } }, "kleur": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-2.0.2.tgz", - "integrity": "sha512-77XF9iTllATmG9lSlIv0qdQ2BQ/h9t0bJllHlbvsQ0zUWfU7Yi0S8L5JXzPZgkefIiajLmBJJ4BsMJmqcf7oxQ==" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.1.tgz", + "integrity": "sha512-P3kRv+B+Ra070ng2VKQqW4qW7gd/v3iD8sy/zOdcYRsfiD+QBokQNOps/AfP6Hr48cBhIIBFWckB9aO+IZhrWg==" }, "lazy-cache": { "version": "1.0.4", @@ -1971,18 +1978,17 @@ "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" }, "lru-cache": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", - "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "yallist": "^3.0.2" } }, "ltx": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/ltx/-/ltx-2.8.0.tgz", - "integrity": "sha512-SJJUrmDgXP0gkUzgErfkaeD+pugM8GYxerTALQa1gTUb5W1wrC4k07GZU+QNZd7MpFqJSYWXTQSUy8Ps03hx5Q==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/ltx/-/ltx-2.8.1.tgz", + "integrity": "sha512-l4H1FS9I6IVqwvIpUHsSgyxE6t2jP7qd/2MeVG1UhmVK6vlHsQpfm2KNUcbdImeE0ai04vl1qTCF4CPCJqhknQ==", "requires": { "inherits": "^2.0.1" } @@ -2070,9 +2076,9 @@ } }, "moment": { - "version": "2.22.2", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz", - "integrity": "sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y=" + "version": "2.23.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.23.0.tgz", + "integrity": "sha512-3IE39bHVqFbWWaPOMHZF98Q9c3LDKGTmypMiTM2QygGXXElkFWIH7GxfmlwmY2vwa+wmNsoYZmG2iusf1ZjJoA==" }, "mongodb": { "version": "2.2.36", @@ -2179,9 +2185,9 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "mustache": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mustache/-/mustache-3.0.0.tgz", - "integrity": "sha512-bhBDkK/PioIbtQzRIbGUGypvc3MC4c389QnJt8KDIEJ666OidRPoXAQAHPivikfS3JkMEaWoPvcDL7YrQxtSwg==" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-3.0.1.tgz", + "integrity": "sha512-jFI/4UVRsRYdUbuDTKT7KzfOp7FiD5WzYmmwNwXyUVypC0xjoTL78Fqc0jHUPIvvGD+6DQSPHIt1NE7D1ArsqA==" }, "negotiator": { "version": "0.6.1", @@ -2421,11 +2427,11 @@ } }, "prompts": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-1.2.0.tgz", - "integrity": "sha512-g+I6Cer6EefDTawQhGHpdX98nhD7KQrRqyRgKCb+Sc+GG4P64EWRe5DZE402ZNkwrItf97Asf0L1z0g3waOgAA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-1.2.1.tgz", + "integrity": "sha512-GE33SMMVO1ISfnq3i6cE+WYK/tLxRWtZiRkl5vdg0KR0owOCPFOsq8BuFajFbW7b2bMHb8krXaQHOpZyUEuvmA==", "requires": { - "kleur": "^2.0.1", + "kleur": "^3.0.0", "sisteransi": "^1.0.0" } }, @@ -2631,9 +2637,9 @@ } }, "requestretry": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/requestretry/-/requestretry-3.0.2.tgz", - "integrity": "sha512-3UXO4EOBwRFXm2AeAElyhM3bmMb57jZi5QC2httyXXSyT49O6o+AdzUZRA/vj5O2tE6xbdpDygRZb5Q19Q7lCA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/requestretry/-/requestretry-3.1.0.tgz", + "integrity": "sha512-DkvCPK6qvwxIuVA5TRCvi626WHC2rWjF/n7SCQvVHAr2JX9i1/cmIpSEZlmHAo+c1bj9rjaKoZ9IsKwCpTkoXA==", "requires": { "extend": "^3.0.2", "lodash": "^4.17.10", @@ -2689,9 +2695,9 @@ "integrity": "sha1-NipCxtMEBW1JOz8SvOq7LGV2ptQ=" }, "rtcpeerconnection-shim": { - "version": "1.2.14", - "resolved": "https://registry.npmjs.org/rtcpeerconnection-shim/-/rtcpeerconnection-shim-1.2.14.tgz", - "integrity": "sha512-/sl1vgarkFPU2rbXy+EMmytMQIzCKNbIm3fChjPnsdytKAROgoivB0KLE7PQRjKx/d/nr/Yx+6qu0/eCpoxn/A==", + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/rtcpeerconnection-shim/-/rtcpeerconnection-shim-1.2.15.tgz", + "integrity": "sha512-C6DxhXt7bssQ1nHb154lqeL0SXz5Dx4RczXZu2Aa/L1NJFnEVDxFwCBo3fqtuljhHIGceg5JKBV4XJ0gW5JKyw==", "requires": { "sdp": "^2.6.0" } @@ -2707,9 +2713,9 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "scmp": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/scmp/-/scmp-0.0.3.tgz", - "integrity": "sha1-NkjfLXKUZB5/eGc//CloHZutkHM=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/scmp/-/scmp-2.0.0.tgz", + "integrity": "sha1-JHEQ7yLM+JexOj8KvdtSeCOTzWo=" }, "sdp": { "version": "2.9.0", @@ -2717,9 +2723,9 @@ "integrity": "sha512-XAVZQO4qsfzVTHorF49zCpkdxiGmPNjA8ps8RcJGtGP3QJ/A8I9/SVg/QnkAFDMXIyGbHZBBFwYBw6WdnhT96w==" }, "sdp-transform": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/sdp-transform/-/sdp-transform-2.4.1.tgz", - "integrity": "sha512-dCReSJ6NtCW6goKkKBEHcIknBS1pKejnMw+S3p3jl0PALPFrbjbreCyQ+CABtFxl2GXD2/05+C2q2gZP23dUWQ==" + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/sdp-transform/-/sdp-transform-2.7.0.tgz", + "integrity": "sha512-v8/zfKeDKBEXKMf4UT91owHoXM6O+s8gEVtCVSvrAd2eEtuv5u4TKcTXX4a9qrQM3T2Ycr9rLyU+Ww3ZiCiaGQ==" }, "semver": { "version": "5.6.0", @@ -2807,9 +2813,9 @@ } }, "spdx-correct": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.2.tgz", - "integrity": "sha512-q9hedtzyXHr5S0A1vEPoK/7l8NpfkFYTq6iCY+Pno2ZbdZR6WexZFtqeVGkGxW3TEJMN914Z55EnAGMmenlIQQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", "requires": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -2830,14 +2836,14 @@ } }, "spdx-license-ids": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.2.tgz", - "integrity": "sha512-qky9CVt0lVIECkEsYbNILVnPvycuEBkXoMFLRWsREkomQLevYhtRKC+R91a5TOAQ3bCMjikRwhyaRqj1VYatYg==" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz", + "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==" }, "sprintf-js": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.1.tgz", - "integrity": "sha1-Nr54Mgr+WAH2zqPueLblqrlA6gw=" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" }, "sshpk": { "version": "1.15.2", @@ -2862,7 +2868,7 @@ }, "string-width": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "resolved": "http://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "requires": { "code-point-at": "^1.0.0", @@ -2872,7 +2878,7 @@ }, "string_decoder": { "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" }, "strip-ansi": { @@ -2927,7 +2933,7 @@ }, "through2": { "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "resolved": "http://registry.npmjs.org/through2/-/through2-0.6.5.tgz", "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", "requires": { "readable-stream": ">=1.0.33-1 <1.1.0-0", @@ -2975,9 +2981,9 @@ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" }, "twilio": { - "version": "3.23.2", - "resolved": "https://registry.npmjs.org/twilio/-/twilio-3.23.2.tgz", - "integrity": "sha512-qYnGIvtgM5BQeQlnSRisR43bCr/3LRy1crT58v9g5Yu/aPiB1jWdTjPCUJmdY7wjwoGitOnTE7xUU8TvBdT0xg==", + "version": "3.26.0", + "resolved": "https://registry.npmjs.org/twilio/-/twilio-3.26.0.tgz", + "integrity": "sha512-ovXotcYLY49fcjXHuou5nGVU664ucfIy7yXVAswtdBQwdENPT+ZtFg4F294ihuJWxfIFAjwyPfcrQGDKD3IfKQ==", "requires": { "@types/express": "^4.11.1", "deprecate": "1.0.0", @@ -2987,14 +2993,14 @@ "q": "2.0.x", "request": "^2.87.0", "rootpath": "0.1.2", - "scmp": "0.0.3", + "scmp": "2.0.0", "xmlbuilder": "9.0.1" }, "dependencies": { "jsonwebtoken": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.3.0.tgz", - "integrity": "sha512-oge/hvlmeJCH+iIz1DwcO7vKPkNGJHhgkspk8OH3VKlw+mbi42WtD4ig1+VXRln765vxptAv+xT26Fd3cteqag==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.4.0.tgz", + "integrity": "sha512-coyXjRTCy0pw5WYBpMvWOMN+Kjaik2MwTUIq9cna/W7NpO9E+iYbumZONAz3hcr+tXFJECoQVrtmIoC3Oz0gvg==", "requires": { "jws": "^3.1.5", "lodash.includes": "^4.3.0", @@ -3171,9 +3177,9 @@ "integrity": "sha1-eWkVhNmGB/UHC9O3CkDmuyLkAes=" }, "webrtc-adapter": { - "version": "6.4.4", - "resolved": "https://registry.npmjs.org/webrtc-adapter/-/webrtc-adapter-6.4.4.tgz", - "integrity": "sha512-VNXpC9UTbNovaiPqEtUmMuBolo4K6V4qgYnoMl3i0q9LnXTGaFeyIQiFiLp5qoKJJGW3EJSLFX6qYDlgU6k4pg==", + "version": "6.4.8", + "resolved": "https://registry.npmjs.org/webrtc-adapter/-/webrtc-adapter-6.4.8.tgz", + "integrity": "sha512-YM8yl545c/JhYcjGHgaCoA7jRK/KZuMwEDFeP2AcP0Auv5awEd+gZE0hXy9z7Ed3p9HvAXp8jdbe+4ESb1zxAw==", "requires": { "rtcpeerconnection-shim": "^1.2.14", "sdp": "^2.9.0" @@ -3239,9 +3245,9 @@ } }, "ws": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.0.tgz", - "integrity": "sha512-H3dGVdGvW2H8bnYpIDc3u3LH8Wue3Qh+Zto6aXXFzvESkTVT6rAfKR6tR/+coaUvxs8yHtmNV0uioBF62ZGSTg==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.2.tgz", + "integrity": "sha512-rfUqzvz0WxmSXtJpPMX2EeASXabOrSMk1ruMOV3JBTBjo4ac2lDjGGsbQSyxj8Odhw5fBib8ZKEjDNvgouNKYw==", "requires": { "async-limiter": "~1.0.0" } @@ -3262,9 +3268,9 @@ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" }, "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" }, "yargs": { "version": "6.6.0", diff --git a/package.json b/package.json index 827a2d4..9360e0d 100644 --- a/package.json +++ b/package.json @@ -1,14 +1,14 @@ { "name": "botkit-starter-slack", "version": "0.0.2", - "description": "A starter kit for building a custom Slack bot with Botkit Studio", + "description": "A starter kit for building a custom Slack bot with Botkit", "main": "bot.js", "scripts": { "start": "node bot.js" }, "dependencies": { "body-parser": "^1.15.2", - "botkit": "^0.6.19", + "botkit": "^0.7.0", "botkit-storage-mongo": "^1.0.6", "cookie-parser": "^1.4.3", "debug": "^2.3.3", diff --git a/readme.md b/readme.md index f01aa67..6e239a5 100644 --- a/readme.md +++ b/readme.md @@ -1,6 +1,6 @@ # Botkit Starter Kit for Slack Bots -This repo contains everything you need to get started building a Slack bot with [Botkit](https://botkit.ai) and [Botkit Studio](https://botkit.ai). +This repo contains everything you need to get started building a Slack bot with [Botkit](https://botkit.ai). Botkit is designed to ease the process of designing and running useful, creative bots that live inside messaging platforms. Bots are applications that can send and receive messages, and in many cases, appear alongside their human counterparts as users. @@ -17,7 +17,6 @@ If you are looking to create a bot on other platforms using Glitch, check out th * Login and oauth endpoints that allow teams to install your bot * Webhook endpoints for communicating with platforms * Sample skill modules that demonstrate various features of Botkit -* A customizable onboarding experience for new teams powered by Botkit Studio ### Getting Started @@ -72,14 +71,11 @@ module.exports = function(controller) { // add event handlers to controller // such as hears handlers that match triggers defined in code // or controller.studio.before, validate, and after which tie into triggers - // defined in the Botkit Studio UI. + // defined in the Botkit CMS UI. } ``` -Continue your journey to becoming a champion botmaster by [reading the Botkit Studio SDK documentation here.](https://github.com/howdyai/botkit/blob/master/docs/readme-studio.md) - - ### Customize Storage By default, the starter kit uses a simple file-system based storage mechanism to record information about the teams and users that interact with the bot. While this is fine for development, or use by a single team, most developers will want to customize the code to use a real database system. @@ -90,7 +86,7 @@ We have enabled our [Mongo middleware]() for starters in this project. To use yo # Developer & Support Community -You can find full documentation for Botkit on our [GitHub page](https://github.com/howdyai/botkit/blob/master/readme.md). Botkit Studio users can access the [Botkit Studio Knowledge Base](https://botkit.groovehq.com/help_center) for help in managing their account. +You can find full documentation for Botkit on [our website](https://botkit.ai/docs). ### Need more help? * Glitch allows users to ask the community for help directly from the editor! For more information on raising your hand, [read this blog post.](https://medium.com/glitch/just-raise-your-hand-how-glitch-helps-aa6564cb1685) diff --git a/skills/channel_join.js b/skills/channel_join.js index 5ed1ec4..384e7d8 100644 --- a/skills/channel_join.js +++ b/skills/channel_join.js @@ -4,9 +4,7 @@ module.exports = function(controller) { controller.on('bot_channel_join', function(bot, message) { - controller.studio.run(bot, 'channel_join', message.user, message.channel, message).catch(function(err) { - debug('Error: encountered an error loading onboarding script from Botkit Studio:', err); - }); + bot.reply(message,'I have arrived! I am a friendly helper bot.'); }); diff --git a/skills/help.js b/skills/help.js deleted file mode 100644 index a52d771..0000000 --- a/skills/help.js +++ /dev/null @@ -1,21 +0,0 @@ -module.exports = function(controller) { - - - // This before middleware allows the help command to accept sub-thread names as a parameter - // so users can say help to get the default thread, but help will automatically - // jump to that subthread (if it exists) - controller.studio.before('help', function(convo, next) { - - // is there a parameter on the help command? - // if so, change topic. - if (matches = convo.source_message.text.match(/^help (.*)/i)) { - if (convo.hasThread(matches[1])) { - convo.gotoThread(matches[1]); - } - } - - next(); - - }); - -} diff --git a/views/installation.hbs b/views/installation.hbs index d1316c8..1e46f3b 100644 --- a/views/installation.hbs +++ b/views/installation.hbs @@ -11,30 +11,6 @@ -{{^studio_enabled}} -
-

Enable Botkit Studio

- -

- It looks like you have not yet enabled Botkit Studio. - You should! -

-

- Botkit Studio provides an extra layer of tools and features on top of Botkit, - including content management, analytics, a message console, user database, and more. -

- -

- To enable Botkit Studio, create an account, - and add your bot's studio_token value to the .env file along side - the other tokens. -

- - Launch Botkit Studio - -
-{{/studio_enabled}} -

Create a Slack Application