Commit 33d6f11d authored by Guillaume Vagner's avatar Guillaume Vagner
Browse files

change groups to compo in telegram.js

parent b6e78626
......@@ -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
......@@ -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
......@@ -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
......
......@@ -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);
})
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment