You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

87 lines
3.1 KiB

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)