initial commit
This commit is contained in:
commit
1048f38e20
13
README.md
Normal file
13
README.md
Normal file
@ -0,0 +1,13 @@
|
||||
# Matrix Gateway Bot written in NodeJS
|
||||
|
||||
## Install
|
||||
|
||||
npm i or yarn
|
||||
|
||||
## Configure
|
||||
|
||||
Edit config.js
|
||||
|
||||
## Run
|
||||
|
||||
node index
|
9
config.js
Normal file
9
config.js
Normal file
@ -0,0 +1,9 @@
|
||||
module.exports = {
|
||||
nick: 'MatrixBot',
|
||||
xmppService: 'xmpp://',
|
||||
xmppUsername: '',
|
||||
xmppPassword: '',
|
||||
xmppRoom: '',
|
||||
matrixServer: '',
|
||||
matrixRoom: ''
|
||||
}
|
59
index.js
Normal file
59
index.js
Normal file
@ -0,0 +1,59 @@
|
||||
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)
|
14
package.json
Normal file
14
package.json
Normal file
@ -0,0 +1,14 @@
|
||||
{
|
||||
"name": "matrix-bot",
|
||||
"version": "1.0.0",
|
||||
"description": "Matrix Gateway Bot",
|
||||
"main": "index.js",
|
||||
"repository": "https://git.manalejandro.com/ale/matrix-bot",
|
||||
"author": "ale",
|
||||
"license": "MIT",
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"@xmpp/client": "*",
|
||||
"matrix-js-sdk": "*"
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user