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,
|
|
secondsInterval = 30,
|
|
events = []
|
|
|
|
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 (commands.some(command => message.match(new RegExp('^' + command)))) {
|
|
if (message.match(/^.nuevoevento/) && message.split(' ').length > 3 &&
|
|
message.split(' ')[1].match(/^[0-9]{1,2}[\/]{1}[0-9]{1,2}[\/]{1}[0-9]{4}$/g) &&
|
|
message.split(' ')[2].match(/^[0-9]{1,2}[:]{1}[0-9]{1,2}$/g)) {
|
|
const msg = message.split(' ')
|
|
msg.shift()
|
|
const fecha = msg.shift(),
|
|
hora = msg.shift(),
|
|
date = new Date(fecha.split('/')[2] + '-' + fecha.split('/')[1] + '-' + fecha.split('/')[0] + 'T' + hora)
|
|
if (date.getTime() > Date.now()) {
|
|
events.push({
|
|
message: msg.join(' '),
|
|
fecha: date,
|
|
reported: false
|
|
})
|
|
sendMessage('Nuevo evento añadido el ' + fecha + ' a las ' + hora + ' horas: ' + msg.join(' '))
|
|
} else {
|
|
sendMessage('Lo siento pero el evento es anterior a la fecha y hora actual, intentelo de nuevo...')
|
|
}
|
|
} else {
|
|
sendMessage('Comando incorrecto, inténtelo otra vez.')
|
|
}
|
|
} 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)
|
|
|
|
setInterval(() => {
|
|
events.map(event => {
|
|
if (!event.reported && event.fecha.getTime() < Date.now()) {
|
|
sendMessage('Atención el evento: ' + event.message + ' comienza Ya!!')
|
|
event.reported = true
|
|
}
|
|
})
|
|
}, secondsInterval * 1000)
|