commit 75dd7758ce2687e9fe583e1b1ae3933be71e5235 Author: ale Date: Tue Oct 6 13:23:47 2020 +0200 initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..25c8fdb --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +node_modules +package-lock.json \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..1e9eab8 --- /dev/null +++ b/README.md @@ -0,0 +1,17 @@ +# bot-recordatorio + +## Bot de salas XMPP de recordatorio de eventos, para [ElBinario](https://elbinario.net) + +## Install +``` +npm i +``` +## Config +``` +Edit config.js +``` +## Run +``` +npm start +``` +### License MIT \ No newline at end of file diff --git a/config.js b/config.js new file mode 100644 index 0000000..06f14fc --- /dev/null +++ b/config.js @@ -0,0 +1,9 @@ +module.exports = { + nick: 'bot-recordatorio', + service: 'xmpp://domain.com', + username: '', + password: '', + room: 'room@rooms.domain.com', + admins: ['ale'], + commands: ['.nuevoevento', '.recordarevento', '.listareventos', '.borrarevento', '.reiniciarbot'] +} \ No newline at end of file diff --git a/index.js b/index.js new file mode 100644 index 0000000..69836ed --- /dev/null +++ b/index.js @@ -0,0 +1,59 @@ +const { client, xml } = require('@xmpp/client'), + config = require('./config'), + xmpp = client({ + service: config.service, + username: config.username, + password: config.password + }), + sendMessage = async message => { + await xmpp.send(xml( + 'message', + { type: 'groupchat', to: room }, + xml('body', {}, message) + )) + }, + room = config.room, + nick = config.nick, + admins = config.admins, + commands = config.commands, + events = [] + +let eventInit = false + +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(/.*\//, '') + if (admins.some(admin => user === admin)) { + const message = stanza.getChildText('body') + if (eventInit) { + + } else if (message === '.reiniciarbot') { + sendMessage('Reiniciando bot por ' + user + '...') + await xmpp.stop() + } else if (message === '.help') { + sendMessage('\nAyuda ' + nick + ': \n' + commands.map((c, i) => (i + 1) + ': ' + c).join('\n')) + } + } + } +}) + +xmpp.on('online', async address => { + await xmpp.send(xml( + 'presence', + { to: room + '/' + nick }, + xml('x', + { xmlns: 'http://jabber.org/protocol/muc' } + ) + )) + console.log('Connected like: ' + address) +}) + +xmpp.start().catch(console.error) \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..7f9792d --- /dev/null +++ b/package.json @@ -0,0 +1,24 @@ +{ + "name": "bot-recordatorio", + "version": "1.0.0", + "description": "Bot Recordatorio Eventos XMPP", + "main": "index.js", + "private": true, + "scripts": { + "start": "node index.js" + }, + "repository": { + "type": "git", + "url": "https://gitea.hatthieves.es/manalejandro/bot-recordatorio" + }, + "keywords": [ + "bot", + "bot-recordatorio", + "xmpp" + ], + "author": "ale", + "license": "MIT", + "dependencies": { + "@xmpp/client": "*" + } +}