Development adapter
Adapter Basics
All adapters inherit from the Adapter class in the src/adapter.coffee
file. There are certain methods that you will want to override. Here is a basic stub of what an extended Adapter class would look like:
class Sample extends Adapter
constructor: ->
super
@robot.logger.info "Constructor"
send: (envelope, strings...) ->
@robot.logger.info "Send"
reply: (envelope, strings...) ->
@robot.logger.info "Reply"
run: ->
@robot.logger.info "Run"
@emit "connected"
user = new User 1001, name: 'Sample User'
message = new TextMessage user, 'Some Sample Message', 'MSG-001'
@robot.receive message
exports.use = (robot) ->
new Sample robot
Setting Up Your Development Environment
- Create a new folder for your adapter
hubot-sample
mkdir hubot-sample
- Change your working directory to
hubot-sample
cd hubot-sample
- Run
npm init
to create your package.json- make sure the entry point is
src/sample.coffee
- make sure the entry point is
- Add your
.gitignore
to includenode_modules
- Edit the
src/sample.coffee
file to include the above stub for your adapter - Edit the
package.json
to add a peer dependency onhubot
"dependencies": {
},
"peerDependencies": {
"hubot": ">=2.0"
},
"devDependencies": {
"coffee-script": ">=1.2.0"
}
- Generate your Hubot using the
yo hubot
command - Change working directories to the
hubot
you created in step 7. - Now perform an
npm link
to add your adapter tohubot
npm link ../hubot-sample
- Run
hubot -a sample
Gotchas
There is a an open issue in the node community around npm linked peer dependencies not working. To get this working for our project you will need to do some minor changes to your code.
- For the import in your
hubot-sample
adapter, add the following code
try
{Robot,Adapter,TextMessage,User} = require 'hubot'
catch
prequire = require('parent-require')
{Robot,Adapter,TextMessage,User} = prequire 'hubot'
- In your
hubot-sample
folder, modify thepackage.json
to include the following dependency so this custom import mechanism will work
"dependencies": {
"parent-require": "^1.0.0"
}
- Now try running
hubot -a sample
again and see that the imports are properly loaded. - Once this is working properly, you can build out the functionality of your adapter as you see fit. Take a look at some of the other adapters to get some ideas for your implementation.
- Once packaged and deployed via
npm
, you won’t need the dependency inhubot
anymore since the peer dependency should work as an official module.
- Once packaged and deployed via