Last active
May 23, 2018 11:32
-
-
Save hugomd/a01b116694bded3a4666fc29ee17cdda to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const util = require("util"); | |
const readline = require("readline"); | |
const { JSDOM } = require("jsdom"); | |
const { ChatManager, TokenProvider } = require("@pusher/chatkit"); | |
const axios = require("axios"); | |
const prompt = require("prompt"); | |
+const ora = require('ora'); | |
const main = async () => { | |
+ const spinner = ora(); | |
try { | |
// Initialise prompt with an empty message | |
prompt.start(); | |
prompt.message = ''; | |
// Turn prompt.get() into a promise | |
const get = util.promisify(prompt.get); | |
// Create a schema to validate user input | |
const usernameSchema = [ | |
{ | |
description: 'Enter your username', | |
name: 'username', | |
required: true, | |
}, | |
]; | |
// Ask the user for their username and assign it to a variable | |
const {username} = await get(usernameSchema); | |
+ spinner.start('Authenticating..'); | |
await createUser(username); | |
+ spinner.succeed(`Authenticated as ${username}`); | |
const chatManager = new ChatManager({ | |
instanceLocator: 'YOUR_INSTANCE_LOCATOR', | |
userId: username, | |
tokenProvider: new TokenProvider({url: 'http://localhost:3001/authenticate'}), | |
}); | |
+ spinner.start('Connecting to Pusher..'); | |
const currentUser = await chatManager.connect(); | |
+ spinner.succeed('Connected'); | |
+ spinner.start('Fetching rooms..'); | |
const joinableRooms = await currentUser.getJoinableRooms(); | |
+ spinner.succeed('Fetched rooms'); | |
const availableRooms = [...currentUser.rooms, ...joinableRooms]; | |
console.log('Available rooms:'); | |
availableRooms.forEach((room, index) => { | |
console.log(`${index} - ${room.name}`); | |
}); | |
const roomSchema = [ | |
{ | |
description: 'Select a room', | |
name: 'room', | |
conform: v => { | |
if (v >= availableRooms.length) { | |
return false; | |
} | |
return true; | |
}, | |
required: true, | |
}, | |
]; | |
const {room: chosenRoom} = await get(roomSchema); | |
const room = availableRooms[chosenRoom]; | |
+ spinner.start(`Joining room ${chosenRoom}..`); | |
await currentUser.subscribeToRoom({ | |
roomId: room.id, | |
hooks: { | |
onNewMessage: message => { | |
const {senderId, text} = message; | |
if (senderId === username) return; | |
console.log(`${senderId}: ${text}`); | |
}, | |
}, | |
messageLimit: 0, | |
}); | |
+ spinner.succeed(`Joined ${room.name}`); | |
const input = readline.createInterface({input: process.stdin}); | |
input.on('line', async text => { | |
await currentUser.sendMessage({roomId: room.id, text}); | |
}); | |
} catch (err) { | |
+ spinner.fail(); | |
console.log(`Failed with ${err}`); | |
process.exit(1); | |
} | |
} | |
main(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment