matrix-bot/index.js
2021-06-30 18:13:00 +02:00

59 lines
1.9 KiB
JavaScript

const { client, xml } = require('@xmpp/client'),
sdk = require('matrix-js-sdk'),
config = require('./config'),
xmpp = client({
service: config.xmppService,
username: config.xmppUsername,
password: config.xmppPassword
}),
sendMessage = async message => {
await xmpp.send(xml(
'message',
{ type: 'groupchat', to: xmppRoom },
xml('body', {}, message)
))
},
nick = config.nick,
token = config.matrixToken,
matrix = sdk.createClient({
baseUrl: 'https://' + config.matrixServer,
accessToken: token,
userId: '@' + nick + ':' + config.matrixServer
}),
xmppRoom = config.xmppRoom,
matrixRoom = config.matrixRoom
xmpp.on('error', err => {
console.error(err)
})
xmpp.on('offline', () => {
console.log('Go to offline')
})
xmpp.on('stanza', async stanza => {
if (stanza.is('message') && !stanza.getChild('delay')) {
const user = stanza.attrs.from.replace(/.*\//, ''),
message = stanza.getChildText('body')
if (user && user !== nick && message) {
await matrix.sendMessage(matrixRoom, { body: user + ': ' + message, msgtype: 'm.text' }).catch(console.error)
}
}
})
xmpp.on('online', async address => {
await xmpp.send(xml('presence', { to: xmppRoom + '/' + nick },
xml('x', { xmlns: 'http://jabber.org/protocol/muc' }
))).catch(console.error)
console.log('Connected like: ' + address)
matrix.on('Room.timeline', (event, room, toStartOfTimeline) => {
if (event.event.sender !== '@' + nick + ':' + config.matrixServer && event.getType() === 'm.room.message') {
sendMessage(event.event.sender.replace(/:.*$/, '') + ': ' + event.event.content.body)
}
})
await matrix.setDisplayName(nick)
await matrix.joinRoom(matrixRoom).catch(console.error)
matrix.startClient()
})
xmpp.start().catch(console.error)