Skip to content

Instantly share code, notes, and snippets.

return (err, convo) => {
convo.ask('Do you want to play `paper`, `rock`, or `scissors`?', [
{
pattern: 'paper|rock|scissors',
callback(response, convo) {
// since no further messages are queued after this,
// the conversation will end naturally with status === ‘completed’
convo.next();
},
}, {
function privateConvo(bot, message) {
return (err, convo) => {};
}
...
bot.startPrivateConversation(message, privateConvo(bot, message));
hears(['accept'], 'ambient', (bot, message) => {
...
if (user in players && !players[user].accepted) {
bot.reply(message, 'GREAT, LET THE BATTLE BEGIN!!!');
bot.startPrivateConversation(message, callback);
} else {
...
});
hears([‘play’], ‘direct_message,direct_mention,mention’, (bot, message) => {
...
channels.save(gameData, (err) => {
if (err) throw err;
bot.say({
text: `<@${playerTwo}> you've been challenged to a game of ROCK PAPER SCISSORS by <@${user}>, say \`accept\` unless you're too scared.`,
channel,
});
...
if (data && 'players' in data) {
const { user } = message;
const { players } = data;
if (user in players && !players[user].accepted) {
// player two accepted
bot.reply(message, 'GREAT, LET THE BATTLE BEGIN!!!');
} else {
const player = Object.keys(players).find((p) => !players[p].accepted);
// a bot can listen for text it's not mentioned in
// by passing 'ambient' as the second parameter
hears(['accept'], 'ambient', (bot, message) => {
const { channel } = message;
channels.get(channel, (err, data) => {
if (err) throw err;
if (data && 'players' in data) {
// game has started !
if (userData) {
...
channels.save(gameData, (err) => {
if (err) throw err;
bot.say({
text: `<@${playerTwo}> you've been challenged to a game of ROCK PAPER SCISSORS by <@${user}>, say \`accept\` unless you're too scared.`,
channel,
});
...
if (userData) {
const playerTwo = userData[1]; // player two's id is at the first index of match results
const gameData = {
id: channel,
players: {
[user]: {
accepted: true,
played: '',
},
hears(['play'], 'direct_message,direct_mention,mention', (bot, message) => {
const { user, channel, text } = message; // destructure message variable
const userData = text.match(/<@([A-Z0–9]{9})>/); // parse the text for user's 9 character id
if (userData) {
// if there is a user challenged, start the game
} else {
bot.reply(message, 'You didn\'t challenge anyone…');
}
});
@captDaylight
captDaylight / botStarter.js
Last active October 1, 2016 20:29
Script to get you started making your
if (!process.env.token) {
process.exit(1);
}
const Botkit = require('botkit');
const controller = Botkit.slackbot({
debug: true,
});