mirror of
https://github.com/System-End/site.git
synced 2026-04-19 16:28:21 +00:00
86 lines
2.7 KiB
JavaScript
86 lines
2.7 KiB
JavaScript
import AirtablePlus from 'airtable-plus'
|
|
|
|
const airtable = new AirtablePlus({
|
|
baseID: 'app79wD9AFys1NMUp',
|
|
apiKey: process.env.AIRTABLE_API_KEY,
|
|
tableName: 'Current',
|
|
})
|
|
|
|
const cache = {
|
|
refreshed_at: 0,
|
|
current: [],
|
|
acknowledged: []
|
|
};
|
|
|
|
export async function fetchTeam() {
|
|
if ((cache.refreshed_at + (5 * 60 * 1000)) >= Date.now()) {
|
|
return cache
|
|
}
|
|
|
|
const records = await airtable.read();
|
|
const current = [];
|
|
const acknowledged = [];
|
|
|
|
for (let record of records.sort((a, b) => a.fields['Order'] - b.fields['Order'])) {
|
|
const member = {
|
|
name: record.fields["Name"],
|
|
bio: record.fields["Bio"] || null,
|
|
department: record.fields["Department"],
|
|
role: record.fields["Role"],
|
|
bio_hackfoundation: null,
|
|
pronouns: null,
|
|
slack_id: record.fields["Slack ID"] || null,
|
|
slack_display_name: "",
|
|
avatar: record.fields["Override Avatar"] ? record.fields["Override Avatar"][0].thumbnails.large.url : null,
|
|
avatar_id: "",
|
|
email: record.fields["Email"] || null,
|
|
website: record.fields["Website"] || null,
|
|
}
|
|
|
|
if (process.env.SLACK_API_TOKEN) {
|
|
const slackData = await fetch(
|
|
'https://hackclub.slack.com/api/users.profile.get?user=' + record.fields["Slack ID"],
|
|
{
|
|
method: 'POST',
|
|
headers: {
|
|
'content-type': 'multipart/form-data; boundary=----orpheus',
|
|
cookie: process.env.SLACK_API_COOKIE
|
|
},
|
|
body: `------orpheus\r\nContent-Disposition: form-data; name=\"token\"\r\n\r\n${process.env.SLACK_API_TOKEN}\r\n------orpheus\r\nContent-Disposition: form-data; name=\"user\"\r\n\r\n${record.fields["Slack ID"]}\r\n------orpheus\r\n`
|
|
}
|
|
).then(r => r.json());
|
|
|
|
if (slackData.ok) {
|
|
if (!record.fields["Override Avatar"]) {
|
|
member.avatar = `https://ca.slack-edge.com/T0266FRGM-${record.fields["Slack ID"]}-${slackData.profile.avatar_hash}-128`
|
|
}
|
|
member.pronouns = slackData.profile.pronouns
|
|
}
|
|
}
|
|
|
|
if (record.fields["Acknowledged"]) {
|
|
acknowledged.push(member)
|
|
} else {
|
|
current.push(member)
|
|
}
|
|
}
|
|
|
|
cache.current = current;
|
|
cache.acknowledged = acknowledged;
|
|
|
|
cache.refreshed_at = Date.now();
|
|
|
|
return {
|
|
current,
|
|
acknowledged
|
|
}
|
|
}
|
|
|
|
export default async function handler(req, res) {
|
|
const team = await fetchTeam()
|
|
|
|
res.status(200).json({
|
|
refreshed_at: cache.refreshed_at,
|
|
...team
|
|
});
|
|
}
|