Giter Site home page Giter Site logo

retrobot's Introduction

๐Ÿค– Retrobot

A retrospective bot for Slack (inspired by @PebbleKat's retrobot ๐Ÿ’™).

The bot will record retrospective feedback (via DMs) and then display in a group channel in a random order, allowing everyone to vote on "needs work" with a ๐Ÿ‘, after which a summary of the top 3 can be reported. All inside of Slack.

Prerequisites

Before creating the retrobot, you need to create a new Slack bot and record your API token. I'd recommend using one of the ๐Ÿค– emojis, or you can, if you like, also use the retrobot image as your avatar for your bot.

The quick way

You can use the Heroku button below, and add the API token for the bot you created earlier:

Deploy

Manual install and deploy

Using node 6, you can manually run the retrobot using the following commands:

$ git clone https://github.com/remy/retrobot.git
$ cd retrobot
$ npm install
$ SLACK_TOKEN=XXXXXXXXX npm start

The bot should then join your Slack group.

How to

In your retrospective channel (call it what you will), invite the retrobot and start the session:

> /invite @retrobot
> @retrobot: start
< ๐Ÿ”” Retrospective is now recording

Each participant in the channel the retrospective was start in, will receive a DM asking them for their retrospective feedback.

Items that "worked well" are prefixed with a +. Items that "need work" are prefixed with a -. For example, in a private DM session with the retrobot:

> + regular cake Friday
> - morning laps around the office when we arrive late

Items that don't start with the +/- prefix will be echoed back as ignored.

Once the retro is over, in the group channel stop the retrospective:

> @retrobot: stop

The retrobot will then print out a shuffled list of all the worked well, and needs work items. Each item can be voted on using then ๐Ÿ‘ emoji, and the group can use this to decide how to create action items out of the retrospective.

If you want a quick summary of the "needs work" items with the most ๐Ÿ‘ counts, run:

> @retrobot: summary

The retrobot will echo out the top 3 most ๐Ÿ‘'d items from the "needs work" list.

Auto ending the retrospective

You can set an auto-end for the retrospective using an argument to the start command. The supported shorthand is a number, then s for seconds, m for minutes. For example, the following will auto end the retrospective after 10 minutes:

> @retrobot start 10m
< ๐Ÿ”” Retrospective is now recording, and will auto end in 10m

Custom responses

If you want a little fun with the retrobot, you can set some simple responses to specific queries. The retrobot will read the environment for keys starting with SAY_ and use the use the value as an alias.

For example, if there is an environment value of SAY_HEY='Hey there yourself :wave:', then the retrobot can respond as such:

> @retrobot hey
< Hey there yourself ๐Ÿ‘‹

Everything after SAY_ is set to lowercase and only the first word relpied to the retrobot is used in the lookup.

If you're using Heroku CLI, then to add a new value, use the following:

$ heroku config:set SAY_HEY='Hey there yourself :wave:'

Notes

  • Retrobot will not invite users who are away or have an active do not disturb mode enabled

retrobot's People

Contributors

remy avatar seangates avatar spotts9 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

retrobot's Issues

Cannot read property 'channel' of undefined

Hello,

After starting retrobot, inviting the bot to a channel and issuing @retrobot: start, the agent exists with the following error:

retrobot/lib/index.js:244
let members = data.channel.members || [];
^

TypeError: Cannot read property 'channel' of undefined
at slack.channels.info (/Users/aolchik/src/retrobot/lib/index.js:244:25)
at Request._callback (/Users/aolchik/src/retrobot/node_modules/slack/methods/_exec.js:40:7)
at Request.self.callback (/Users/aolchik/src/retrobot/node_modules/request/request.js:187:22)
at emitTwo (events.js:106:13)
at Request.emit (events.js:191:7)
at Request. (/Users/aolchik/src/retrobot/node_modules/request/request.js:1044:10)
at emitOne (events.js:96:13)
at Request.emit (events.js:188:7)
at IncomingMessage. (/Users/aolchik/src/retrobot/node_modules/request/request.js:965:12)
at emitNone (events.js:91:20)

TypeError: Cannot read property 'toLowerCase' of undefined

I just deployed a new bot in a private channel, started a retro and never received any DM from the bot:

capture d ecran 2017-03-03 a 14 51 59

I inspected the logs and found this:

2017-03-03T13:48:51.444971+00:00 app[worker.1]: TypeError: Cannot read property 'toLowerCase' of undefined
2017-03-03T13:48:51.444972+00:00 app[worker.1]:     at Object.handleMessage (/app/lib/index.js:160:12)
2017-03-03T13:48:51.444973+00:00 app[worker.1]:     at Array.forEach (native)
2017-03-03T13:48:51.444973+00:00 app[worker.1]:     at /app/node_modules/slack/methods/rtm.client.js:60:22
2017-03-03T13:48:51.444971+00:00 app[worker.1]:     at command (/app/lib/index.js:217:12)
2017-03-03T13:48:51.444974+00:00 app[worker.1]:     at WebSocket.message (/app/node_modules/slack/methods/rtm.client.js:59:20)
2017-03-03T13:48:51.444975+00:00 app[worker.1]:     at emitTwo (events.js:106:13)
2017-03-03T13:48:51.444975+00:00 app[worker.1]:     at WebSocket.emit (events.js:191:7)
2017-03-03T13:48:51.444977+00:00 app[worker.1]:     at /app/node_modules/ws/lib/Receiver.js:536:18
2017-03-03T13:48:51.444976+00:00 app[worker.1]:     at Receiver.ontext (/app/node_modules/ws/lib/WebSocket.js:841:10)
2017-03-03T13:48:51.444977+00:00 app[worker.1]:     at Receiver.applyExtensions (/app/node_modules/ws/lib/Receiver.js:371:5)

Feature idea/request: Deduplication of issues

In a real-life retrospective with post-it notes, it's easy to group together issues by moving them around in meatspace.

But on Slack it's hard! You gotta copy + paste and all this crazy keyboard stuff. What if we could use emoji reactions to say which things are the same, then say @retrobot dedupe and it gives a new, depued list for voting.

Support for multiple teams

Hi there,

I really like this idea (and the amount of time that can be saved this way).
However, we have a couple of teams, each of whom usually hold their own retrospectives.
I understand from the blog post, that currently the bot holds a single state and you'd need to run a new bot for each additional team that wants to use it.

It would be great if the bot could keep track of which channel it is holding a retro in (e.g. #retro-team1 vs. #retro-team2 etc.) and conduct separate retros based on that.

Just an idea.

Many thanks!

Retrobot not sending me a DM?

Each participant in the channel the retrospective was start in, will receive a DM asking them for their retrospective feedback.

I'm starting a retrospective to test it, and it's not sending me a DM. I don't see anything in the heroku logs either. Any ideas why this is the case? My other colleague in the channel gets a DM, but not me.

Items are displaying twice after stopping retrobot

Hi! This is a great idea but I ran into a couple issues when hosting a retrospective with this bot. Issues display twice in slack after I do retrobot stop. Also is there anyway to make submissions anonymous?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.