miscord
Version:
Facebook Messenger to Discord bridge
57 lines (53 loc) • 2.23 kB
JavaScript
const Messenger = require('facebook-chat-api')
const log = require('npmlog')
const fs = require('fs')
const path = require('path')
const sendError = require('../error')
const { getChannel } = require('../discord')
var loggedin = false
module.exports = config => {
return new Promise((resolve, reject) => {
var obj
try {
obj = {appState: require(path.join(config.path, 'appstate.json'))}
} catch (err) {
obj = {email: config.messenger.username, password: config.messenger.password}
}
var options = {forceLogin: config.messenger.forceLogin, logLevel: 'warn', listenEvents: config.discord.showEvents}
log.info('login', 'Logging in to Facebook...')
Messenger(obj, options, (err, api) => {
if (err) {
if (err.error !== 'login-approval') return reject(err)
log.info('login', 'Login approval pending...')
getChannel({
name: 'login-approval',
config: config,
topic: 'channel made for codes from login approval'
}).then(channel => channel.send('Enter code:')).catch(sendError)
config.discord.client.on('message', message => {
if (loggedin || message.channel.name !== 'login-approval' || message.author.username === config.discord.client.user.username || message.channel.parent.name !== config.discord.category.name) return
log.verbose('login', 'Got FB approval code: %s', message.content)
err.continue(message.content)
message.channel.send('Code accepted.')
loggedin = true
})
return
}
api.getThreadList(0, 9, (err, threads) => {
if (err) return reject(err)
config.messenger.senders = new Map()
config.messenger.threads = new Map()
threads.forEach(thread => {
config.messenger.threads.set(thread.threadID, {
threadID: thread.threadID,
threadName: thread.name,
isGroup: !thread.isCanonical,
nicknames: thread.nicknames
})
})
log.silly('login: messenger threads', config.messenger.threads)
fs.writeFile(path.join(config.path, 'appstate.json'), JSON.stringify(api.getAppState()), e => resolve(api))
})
})
})
}