From 67f0a9adf1c6e289f8fc11ea27964bce253f4c43 Mon Sep 17 00:00:00 2001 From: Dennis Reimann Date: Wed, 4 May 2022 12:10:38 +0200 Subject: [PATCH] Add Telegram group members count to meetups --- .github/workflows/build.yml | 2 ++ src/css/sections/meetups.css | 4 ++++ src/index.pug | 2 +- src/meetups.pug | 15 ++++++++++++--- tasks/generate_pages.js | 3 +-- tasks/generate_site_data.js | 35 +++++++++++++++++++++++++++++++---- 6 files changed, 51 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9e3e29176d5..461d4e52e1b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -33,6 +33,8 @@ jobs: run: npm ci - name: Build run: npm run prod + env: + TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }} # Deploy, limited to the master branch - name: Deploy if: success() && github.ref == 'refs/heads/master' diff --git a/src/css/sections/meetups.css b/src/css/sections/meetups.css index b7a5f69ebc3..1f6e71162e4 100644 --- a/src/css/sections/meetups.css +++ b/src/css/sections/meetups.css @@ -73,6 +73,10 @@ transform: scale(.75); animation-name: pulse; } + + & .members { + display: none; + } } } } diff --git a/src/index.pug b/src/index.pug index db4e9a87892..245bafd38c4 100644 --- a/src/index.pug +++ b/src/index.pug @@ -34,7 +34,7 @@ block main :markdown-it(html linkify typographer) ## 💬 Komm in die Gruppe! - Mit unserer Telegram-Gruppe bieten wir dir ein Shitcoin-freies Refugium: Mit über 1.000 Gleichgesinnten + Mit unserer Telegram-Gruppe bieten wir dir ein Shitcoin-freies Refugium: Mit über 2.000 Gleichgesinnten sprechen wir dort nicht über den Preis, Altcoins oder sonstige unwichtigen Dinge. In unserer Gruppe findest du News, Informationen und bekommst praktische Ratschläge zu technischen Themen. diff --git a/src/meetups.pug b/src/meetups.pug index ddab6213f55..e5065b75d38 100644 --- a/src/meetups.pug +++ b/src/meetups.pug @@ -28,18 +28,24 @@ block main ul.meetups each m in filterOfficial(meetups, true) li.official(class=clss(m) style=style(m)) - a(href=m.url target="_blank" rel="nofollow noopener") + a(href=m.url target="_blank" rel="nofollow noopener" title=m.members ? `${m.members} Mitglieder` : null) .dot(style=`animation-delay:${((j*2000) + random(3000))}ms;animation-duration:${meetups.length*2}s;`) = m.name.replace('Einundzwanzig ', '') + if m.members + = ' ' + span.members= `(${m.members} Mitglieder)` - j++ h2 Weitere Meetups ul.meetups each m in filterOfficial(meetups, false) li(class=clss(m) style=style(m)) - a(href=m.url target="_blank" rel="nofollow noopener") + a(href=m.url target="_blank" rel="nofollow noopener" title=m.members ? `${m.members} Mitglieder` : null) .dot(style=`animation-delay:${((j*2000) + random(3000))}ms;animation-duration:${meetups.length*2}s;`) = m.name.replace('Bitcoin ', '') + if m.members + = ' ' + span.members= `(${m.members} Mitglieder)` - j++ img#dach(src=assetPath('/img/dach.svg') alt="DE, AT, CH") @@ -49,8 +55,11 @@ block main ul.meetups each m in filterUnmapped(meetups) li(class=clss(m) style=style(m)) - a(href=m.url target="_blank" rel="nofollow noopener") + a(href=m.url target="_blank" rel="nofollow noopener" title=m.members ? `${m.members} Mitglieder` : null) = m.name + if m.members + = ' ' + span.members= `(${m.members} Mitglieder)` script. document.getElementById('dach').onclick = e => { diff --git a/tasks/generate_pages.js b/tasks/generate_pages.js index 45682d43e38..4fa3a0c50fc 100644 --- a/tasks/generate_pages.js +++ b/tasks/generate_pages.js @@ -8,7 +8,6 @@ const episodes = require('../generated/episodes.json') const spendenregister = require('../generated/spendenregister.json') const spendenuebersicht = require('../content/spendenuebersicht.json') const team = require('../content/team.json') -const meetups = require('../content/meetups.json') const telegram = require('../content/telegram.json') const shops = require('../content/shops.json') const soundboard = require('../content/soundboard.json') @@ -27,7 +26,7 @@ const renderPage = (template, out, data = {}) => { } const sortId = m => `${m.country === 'DE' ? '0' : m.country}-${m.name}` -const meetupsSorted = meetups.sort((a, b) => { +const meetupsSorted = site.meetups.sort((a, b) => { return sortId(a) > sortId(b) ? 1 : -1 }) diff --git a/tasks/generate_site_data.js b/tasks/generate_site_data.js index 9c3b9524feb..5abdb875729 100644 --- a/tasks/generate_site_data.js +++ b/tasks/generate_site_data.js @@ -6,6 +6,8 @@ const meta = require('../content/meta.json') const meetups = require('../content/meetups.json') const soundboard = require('../content/soundboard.json') +const { TELEGRAM_BOT_TOKEN } = process.env + const dir = (...path) => resolve(__dirname, '..', ...path) const writeJSON = (file, data) => writeFileSync(file, JSON.stringify(data, null, 2)) @@ -20,18 +22,43 @@ try { const block = recentBlocks.length && recentBlocks[0].height const date = (new Date()).toJSON().split('T')[0] -writeJSON(dir('generated', 'site-data.json'), { date, block, meta }) - // Meetups const meetup = meetups.map(m => { const copy = Object.assign({}, m) - delete copy.top - delete copy.left + + if (TELEGRAM_BOT_TOKEN) { + let { telegramId } = m + if (!telegramId && m.url.startsWith('https://t.me/')) { + [,, telegramId] = m.url.match(/:\/\/t\.me\/(?!(\+|joinchat))(.*)/) || [] + if (telegramId) { + try { + const jsonBody = request( + 'GET', + `https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/getChatMemberCount?chat_id=@${telegramId}` + ).getBody('utf8') + const { ok, result } = JSON.parse(jsonBody) + if (ok) { + copy.telegramId = telegramId + copy.members = result + } + } catch (err) { + } + } + } + } + return copy }) writeJSON(dir('dist', 'meetups.json'), meetup) +writeJSON(dir('generated', 'site-data.json'), { + date, + block, + meta, + meetups: meetup, +}) + // Soundboard const sounds = soundboard.map(group => { group.sounds = group.sounds.map(sound => {