diff --git a/mysql.js b/mysql.js index 13f8f840a70a778912e0e5d2621554fe85965800..e1b3dd3574d2702e6652439f8ebd84dedad94590 100644 --- a/mysql.js +++ b/mysql.js @@ -109,7 +109,7 @@ function removeAllGroups(chatId) { DELETE FROM groups WHERE chatId = ${chatId}`) } -function getGroups(chatId) { +function getCompos(chatId) { return query(` SELECT grp FROM groups @@ -128,4 +128,4 @@ function getSchedules() { } -module.exports = { query, getChanByChatId, createChan, deleteChanByChatId, modifyChan, getChanByState, addGroup, removeGroup, removeAllGroups, getGroups, getSchedules }; \ No newline at end of file +module.exports = { query, getChanByChatId, createChan, deleteChanByChatId, modifyChan, getChanByState, addGroup, removeGroup, removeAllGroups, getCompos, getSchedules }; \ No newline at end of file diff --git a/requests.js b/requests.js index 2f7c09988a40129fa320a5249e7d3cb47b216426..1c21c9465518a0e8ef3217dda06be5215dc1bdb8 100644 --- a/requests.js +++ b/requests.js @@ -21,8 +21,8 @@ async function sendRequest(req, chan) { json: true } const url = 'https://gateway.linkcs.fr/v1/graphql'; - - return rp(`${url}?query=${req}`, options) + + return rp(`${url}?query=${req}`, options) }) } @@ -46,7 +46,7 @@ function getBirthdays(chan) { // Récupération de la recherche de groupe function searchGroups(chan, term) { - const req = `query {searchAssociations(term: "${term}") {id name code}}` + const req = `query {searchAssociations(term: "${term}") {name code compositions { id label beginningDate}}}` return sendRequest(req, chan).then(body => { if (!body.data) return; return body.data.searchAssociations; @@ -62,6 +62,24 @@ function getGroupById(chan, id) { }).catch(err => { console.error(err) }) } +function getCompoGroupById(chan, id) { + const req = `query {composition(id: ${id}) {id label beginningDate association {id name}}}` + return sendRequest(req, chan).then(body => { + if (!body.data) return; + return { + compo: { + name: body.data.composition.label, + id: body.data.composition.id, + beginningDate: body.data.composition.beginningDate + }, + group: { + name: body.data.composition.association.name, + id: body.data.composition.association.id + } + }; + }).catch(err => { console.error(err) }) +} + function getMe(chan) { return getNewTokenIfNecessary(chan).then(chan => { @@ -69,8 +87,8 @@ function getMe(chan) { headers: { 'Authorization': `Bearer ${chan.token}` }, json: true } - - return rp('https://auth.viarezo.fr/api/user/show/me', options) + + return rp('https://auth.viarezo.fr/api/user/show/me', options) }) } @@ -133,11 +151,11 @@ function getNewToken(chan) { // Récupère un nouveau token que si besoin function getNewTokenIfNecessary(chan) { - if (chan.expiration*1000 < Date.now()) { + if (chan.expiration * 1000 < Date.now()) { return getNewToken(chan) } else { return Promise.resolve(chan) } } -module.exports = { getBirthdays, sendRequest, searchGroups, getGroupById, getMe, getFirstToken, getNewToken }; \ No newline at end of file +module.exports = { getBirthdays, sendRequest, searchGroups, getGroupById, getCompoGroupById, getMe, getFirstToken, getNewToken }; \ No newline at end of file diff --git a/schedule.js b/schedule.js index 378607fd51338134ba0cf7757f642c7c88806a55..2dff4ca43b9e03fec32cc60290092d8b1e887d4d 100644 --- a/schedule.js +++ b/schedule.js @@ -4,7 +4,7 @@ var schedule = require('node-schedule'); // Modules propres -var { modifyChan, getGroups } = require('./mysql'); +var { modifyChan, getCompos } = require('./mysql'); var { getBirthdays, getNewToken } = require('./requests'); // Création de variables @@ -20,7 +20,7 @@ function addSchedule(chan, time, bot) { return getNewToken(chan).then(chan => { return Promise.all([ getBirthdays(chan), - getGroups(chan.chatId) + getCompos(chan.chatId) ]) }).then(([users, groups]) => { // récupère que les personnes du jour qui font partie des groupes ciblés diff --git a/telegram.js b/telegram.js index 568d96a5e0f64b51f83755e108df4b752c7ba787..39f9de160d030b93cc8b8af674b36e961c0ab3c5 100644 --- a/telegram.js +++ b/telegram.js @@ -6,8 +6,8 @@ process.env["NTBA_FIX_319"] = 1; var TelegramBot = require('node-telegram-bot-api'); // Modules propres -var { getChanByChatId, createChan, deleteChanByChatId, modifyChan, addGroup, removeGroup, removeAllGroups, getGroups } = require('./mysql'); -var { getBirthdays, searchGroups, getGroupById, getMe } = require('./requests'); +var { getChanByChatId, createChan, deleteChanByChatId, modifyChan, addGroup, removeGroup, removeAllGroups, getCompos } = require('./mysql'); +var { getBirthdays, searchGroups, getCompoGroupById, getMe } = require('./requests'); var { schedules, addSchedule, deleteSchedule } = require('./schedule'); // Configurations @@ -115,7 +115,7 @@ bot.onText(/\/birthdays/, msg => { getChanByChatId(chatId).then(chan => { return Promise.all([ getBirthdays(chan), - getGroups(chatId), + getCompos(chatId), ]) }).then(([users, groups]) => { // récupère que les personnes du jour qui font partie des groupes ciblés @@ -142,7 +142,15 @@ bot.onText(new RegExp(`/search (.+)|/search@${config.telegram.name} (.+)`), (msg if (groups.length == 20) resp += 'La recherche est limitée à 20 choix.' resp += '\n\n' groups.forEach(group => { - resp += `<a href="https://linkcs.fr/association/${group.code}">${group.name}</a> (id : ${group.id})\n` + resp += `<a href="https://linkcs.fr/association/${group.code}">${group.name}</a>\n`; + group.compositions.sort((compo1, compo2) => Date.parse(compo1.beginningDate) - Date.parse(compo2.beginningDate)); + group.compositions.forEach((compo, index, array) => { + if (index !== array.length - 1) { + resp += `├ ${compo.label} (id : ${compo.id})\n` + } else { + resp += `└ ${compo.label} (id : ${compo.id})\n` + } + }) }) bot.sendMessage(chatId, resp, { parse_mode: 'HTML' }); }); @@ -154,18 +162,18 @@ bot.onText(new RegExp(`/add (.+)|/add@${config.telegram.name} (.+)`), (msg, matc getChanByChatId(chatId).then(chan => { const id = parseInt(match[0].split(' ')[1]); return Promise.all([ - getGroupById(chan, id), - getGroups(chatId), + getCompoGroupById(chan, id), + getCompos(chatId), id ]); - }).then(([group, groups, id]) => { + }).then(([cg, groups, id]) => { // si pas de groupe trouvé - if (!group) return bot.sendMessage(chatId, 'Pas de groupe trouvé ayant cette ID'); + if (!cg) return bot.sendMessage(chatId, 'Pas de composition trouvé ayant cette ID'); // si le groupe y est déjà - if (groups.indexOf(id) !== -1) return bot.sendMessage(chatId, 'Ce groupe est déjà est dans votre liste d\'anniversaire.'); + if (groups.indexOf(id) !== -1) return bot.sendMessage(chatId, 'Cette composition est déjà est dans votre liste d\'anniversaire.'); // sinon on le rajoute return addGroup(chatId, id).then(_ => { - bot.sendMessage(chatId, `Ajout du groupe \`${group}\` à la liste des anniversaires.`, { parse_mode: 'Markdown' }); + bot.sendMessage(chatId, `Ajout de la composition \`${cg.compo.name}\` du groupe \`${cg.group.name}\` à la liste des anniversaires.`, { parse_mode: 'Markdown' }); }) }) }) @@ -175,18 +183,18 @@ bot.onText(new RegExp(`/del (.+)|/del@${config.telegram.name} (.+)`), (msg, matc getChanByChatId(chatId).then(chan => { const id = parseInt(match[0].split(' ')[1]); return Promise.all([ - getGroupById(chan, id), - getGroups(chatId), + getCompoGroupById(chan, id), + getCompos(chatId), id ]); - }).then(([group, groups, id]) => { + }).then(([cg, groups, id]) => { // si pas de groupe trouvé - if (!group) return bot.sendMessage(chatId, 'Pas de groupe trouvé ayant cette ID'); + if (!cg) return bot.sendMessage(chatId, 'Pas de composition trouvé ayant cette ID'); // si le groupe y est déjà - if (groups.indexOf(id) === -1) return bot.sendMessage(chatId, 'Ce groupe n\'est pas dans votre liste d\'anniversaire.'); + if (groups.indexOf(id) === -1) return bot.sendMessage(chatId, 'Cette composition n\'est pas dans votre liste d\'anniversaire.'); // sinon on le rajoute return removeGroup(chatId, id).then(_ => { - bot.sendMessage(chatId, `Retrait du groupe \`${group}\` de la liste des anniversaires.`, { parse_mode: 'Markdown' }); + bot.sendMessage(chatId, `Retrait de la composition \`${cg.compo.name}\` du groupe \`${cg.group.name}\` à la liste des anniversaires.`, { parse_mode: 'Markdown' }); }) }) }) @@ -230,11 +238,19 @@ bot.onText(/\/info/, msg => { if (chan.token.length === 0) return bot.sendMessage(chatId, `Une demande de connexion a été faite par @${chan.username} mais n'a toujours pas été acceptée.\n${config.website.protocol}://${config.website.hostname}/?state=${chan.state}`); return Promise.all([ getMe(chan), - getGroups(chan.chatId), - getGroups(chan.chatId).then(groups => { - return Promise.all(groups.map(group => getGroupById(chan, group))) + getCompos(chan.chatId), + getCompos(chan.chatId).then(groups => { + return Promise.all(groups.map(group => getCompoGroupById(chan, group))) + }) + ]).then(([me, groups, cgs]) => { + groups = {} + cgs.forEach(cg => { + if (!groups[cg.group.id]) { + groups[cg.group.id] = { name: cg.group.name, compo: [] }; + } + groups[cg.group.id].compo.push(cg.compo) }) - ]).then(([me, groups, names]) => { + // affiche qui s'est connecté var msg = `${me.firstName} ${me.lastName} (@${chan.username}) s'est connecté à l'OAuth.\n\n`; @@ -249,13 +265,22 @@ bot.onText(/\/info/, msg => { // affiche la liste des associations à souhait if (groups.length === 0) { - msg += 'La liste des associations / groupes est vide.\n'; + msg += 'La liste des compositions est vide.\n'; msg += 'Vous pouvez en chercher via /search sonNom, puis faire un /add sonID\n' } else { - msg += `Les personnes faisant parti de ces associations / groupes auront leur anniversaire rapellé :\n`; - for (i = 0; i < groups.length; i++) { - msg += ` • ${names[i]} (id : ${groups[i]})\n` - } + msg += `Les personnes faisant parti de ces compositions auront leur anniversaire rapellé :\n`; + Object.keys(groups).forEach(key => { + msg += `${groups[key].name}\n` + groups[key].compo.sort((compo1, compo2) => Date.parse(compo1.beginningDate) - Date.parse(compo2.beginningDate)); + groups[key].compo.forEach((compo, index, array) => { + if (index !== array.length - 1) { + msg += `├ ${compo.name} (id : ${compo.id})\n` + } else { + msg += `└ ${compo.name} (id : ${compo.id})\n` + } + }) + + }); } bot.sendMessage(chatId, msg); })