Skip to content

Instantly share code, notes, and snippets.

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,
});
// 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 (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);
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,
});
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 {
...
});
function privateConvo(bot, message) {
return (err, convo) => {};
}
...
bot.startPrivateConversation(message, privateConvo(bot, message));
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) {
const { user, channel } = message;
return (err, convo) => {
if (err) throw err;
convo.ask(...);
// on end, update game data and broadcast info
convo.on('end', callback);
convo.on('end', (convo) => {
if (convo.status === 'completed') {
// conversation completed correctly
const prc = convo.extractResponse('rockPaperScissors');
} else {
// this happens if the conversation ended prematurely for some reason
bot.reply(message, 'OK, nevermind!');
}
});
if (convo.status === 'completed') {
const prc = convo.extractResponse('rockPaperScissors');
channels.get(channel, (err, data) => {
if (err) throw err;
const updateData = data;
updateData.players[user].played = prc;
const { players } = updateData;