From 1afa7d0c17bc5805d48abab3426a4ff77fe49062 Mon Sep 17 00:00:00 2001 From: Ichitux Date: Tue, 7 Apr 2026 20:12:28 +0200 Subject: [PATCH] Multi-channel feed --- .env | 4 ++-- data/messages.db | Bin 94208 -> 122880 bytes src/index.js | 37 ++++++++++++++++++++++++++++++++----- 3 files changed, 34 insertions(+), 7 deletions(-) diff --git a/.env b/.env index dc3925a..e289375 100644 --- a/.env +++ b/.env @@ -2,9 +2,9 @@ # Get this from https://discord.com/developers/applications DISCORD_TOKEN=MTQ5MTAxODYzOTc0MTI5MjY0NA.GxBqVk.dB3cWx8t8-kWLrMLGFL-g2ePkrs7l_XEIedHdk -# Discord Channel ID to monitor +# Discord Channel IDs to monitor (comma-separated) # Right-click a channel and select "Copy Channel ID" (enable Developer Mode first) -DISCORD_CHANNEL_ID=600347996080701506 +DISCORD_CHANNEL_IDS=600347996080701506,720537868996444230,1480636166150816007 # Server port (optional, defaults to 3000) PORT=8000 diff --git a/data/messages.db b/data/messages.db index 07c15d0e10dc6d15c573e921d3b7979987a6a17b..7453dd7715bb44649d57ceeb019e98cdfa77becf 100644 GIT binary patch delta 38747 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 H((nBr{pENw delta 7541 zcmcJTd2|$2zQ?<|J4q+Gp~D&l83=+bl2H4S1co3GHy|hjDg**95kVcFBcg94=`3s! zNK%mQ3n8*EVGRW~i$DNDKvq%KpaBt?chq52&OB!v=l$;eRV(kjzh6Ao_jBu8b?bMx zZ=XX+Q$k5gTveyU9v+V;4gOE8?w&35Xe?Y6>=g_ygBzZ9!JWZ1!DYekg8vBK3jP>8 zA3PJ>7yK}IJ$O90F}N-GV|8emb0W2&Rq^w${0W{9gbISYJbp%{BEP;BT<(c4eG@pL zbQ-%;4wv?{Jwr<1+J-&@*S2&bToWjJHAo+UYYKe~uC3`vxF*qDxF%BzuJMuaa80Gd z;F?Bz!?gpw&(p@^X+_x=3GJ2y@?5-SCv**WPiz&q6KD<`3N!?&1JeT&0z(5Cfp!W1 zOt_wKEMaRxIR1%*8BQSmh|pM7?z3-aq!oKw;v=4*B&oV?>Y60V_xKdA#4o?ylMGW) zRZAzO+)zzZ(_~9kWL48F)eu$EjE1g@l4{9{VM(f}$+Ag~a6>T^%Tgp=m2^W@bxpU( zR&LlU9%$2vlyR0+&CnFhuyjc=HOWv-60%P}kk*OZz}`(u(JVz4MNJe{(UN8Ir7iSK zdx2cP%a<$zKA~8qVi@Gw-G*$LhAu0rqKl*@X2|d?d`Yu(RTC|XeDRy1n2IRFFhxl> zW%9W_qbHPd)%Dp7n5wMH@Q@}+7P(??Wu;tpeO;3^73K^^Ye|YIl1q0RvaA`pqDrEu zkc)R2ifBPCnkgzU_zN*Zu|&y|bwe}^MK&#R-p=R+rF<6iMJUo>Won8Db4xz8Coun< z>r0koLJy{_nTiI_l27dFUQp`UyL=hOE^DHu>XJ^*#0>U9_6GdvvL%z#zZ#lp8Ioj( zu&{<@kW*+FmMJSDRBtJwq$!F)PTH+{Ln$X*-&9qYX-S7aSPe@dAKL?aLn+7a@=eiz zEu_IZNh&$!8ZzuB+0a!HwkeELCr5uZ6kUbAW?CBTUrQw)p}}^dB*R9vWXXgD*2!Ue zFDvCk^fgg6B-zqbS<)ofDi%3p|CRX%(N|$`x@akitm`lbup9^M^gd8(6Z){9*$IH9 zQZ-l<(Iop_!!$)%HQ6#MlB~kn*oTI!z@AV<16Cd^=#=br4N20V6Wx#$T{1MwBp=xI zeV~**=)>SN$j{cATM*)vh6nFd9~$WWb(* zoLpsJWu>e{A6CtP1vGV0ggp4&lL%!$6WvI}d=z#l1UlPOaHimN=%gAAs9%NM z2BFW+l_(md$~6=V4ifwhNbtN4r<^RXzhxhv&wUAgaCBKz*&)|W!+;2$XLsob{=2RZ zyTgEhhy2%J&2*hq+9UhHtj|RsrW58A&OgjDgpr|8n zAWelIPuOy^(14*q7QpX`Zn7Uoh~Sy_seWnqlM2^|LkPYCr{6Fk>2y+#zv@eUc8++o zF|;Pm&L7aBwdafYpFGL1jbKWwG@s;UcfF((?t5H^=tVCIXvK(a@%6lmFC`(c5P?n%9MxiJXCUGPTM;UL_ zqAWsLh+?DEpj4w&p)5d|k1`MCU6e|cxhQi`W~0nPnTb-tB+1?5$@v~egr#;PWv zIN2BH73P=B`{k;qIeD8WAk6DLlivgVDpfF&-}m@=doErd?RV=ZQp$Phi00k{$aUnN zwN3Tp66d;`op-M!XOPEsYEC2{ab6rMTCsra;~Z%_=AU1Y9m&P)^NT*%dT;{S$c=^5 zk3Ii7S;=|s*_KaMk_zNSp5}Z~j$D4L^c_-$ob&Cst4N456l5pKyt+8)Ga&6Va`i>_U|B)4_(fx7(@?bh2?g*^b;u`n^dUarpLUVe$P0_RES^eMVPn)T?^?0~x##-kAINgf_SLI& z4q1l0x_V4Lc@KHki1DXLJ#zP&`e|e-a{FEF!=#RL&57pfT(Sgt*MuKmBa4wY|9kXp zLX&;PaQtfiyr=y>5<%n7#SIn-bFTLNtEq_8a;|#)#aBNii#YSNAPbR4ZhQMAv5_;! zj_yZlIL|vj=A%=j8hKszolB$&dHRE=N0J4|uU@z{2&p~qNrLk}54k8!c)h8`LiddL`h z$QXKzRX6mIG4zlz^pG+1kY}clTONPHJWuk2Np>Phn1}xfW$Zt{XNYG=b?$xs@{EXN z4=l{^MyA@Y7CsqHmxKfU@|4Ki&I6I5g1@3mWQKEgQk^%!cQW7O@pg9VO78XgOaGJl zqrWr@(}e_xsxlw-Mc?^cC=ueJ6>3NAEuE_aP_$HLQ6c(YO~U(v58}$cHMP(O{Wy=k zyv^GQAO-#vHQ-(9NqRhSVZyoiF8*cyG~Xca((2G~`-R)Gf9BN4JMcll>kp+b^xsxr3z#0q7upOI_DmHYfI1@DcEs9=+36& zF_@)s(Qmv$5^t4Gjf{={%P&k8m{;~}T8 zP{+uaaH|v{%)1*E86Dl2B8>FHE05Nu3PpBN)o&lBx%gqoqVg0v(ETv9N~hA_yB~&D z*|T&2ei$Ysr)(1K9~~7CzF_N=Q;|<|+>b*m)RAW6$DvU^ie|YVhb*c&Q|FC5?$n>@ zBY3Ih96x)Ty`Npyo0`snb8C2`bUZbjS3VnyjzM+j%=zuuc!p|D<;4rUQJzRuXY%EE zFY6#Qo+|dV<|~}vptAkc)$e)7{ix)O{Cp$ZCE2xw!ajT7)|=kQknoy`!hd*aw`j*n z!cNwmRW_ZbM=w1q+~KYAw`kYsXU_}MSnt*>KkX8I;zc3kW3BQh>F=VKrwIAnD;q&O zN2OPU6YLXKttb?EBZ=Y3U4??ci~qI;SEfV)Z2L!H`(KAKKNgKsgb)1C&%i2^J{mo0 z2wDK%98j~Y&Pzq7e%W@m#j?xtsNJ;nx}CN1OL#WBRHK;!Q^49bZ&Xt+1*m4XBji#gQ+q2Ixt{g+3bdJyYG!9-EJdQqLuUhale0y+B zRR=E*Dc{7JVY~!7(W$GN%w{fcmO=|1vT&;pUdk(^6YPUw_LV$1wBsRDle~Dpz}6S@ z`=M5JoV|E4TZ6ngqv%+t?~=3rPEa`uM_ zc_WfDuxY38|B{lM{e|?ofc?$Xaje1$i9YL$czH9MtGtRXbQ1q@=nM^3ZldR!hjdB$ zA<38cXu_@dOa3;#HlAzMp~rm_7q;gGhuialX?rNR59`DT{h7A2Upx2{62XetfblaBobHn&#Vi?(8$JH1ST z&HcB`w$3ZZ6WQz9tOAX}QPi`){o3Ev)J-`@roCf2f$=XMf-FGrVDy zOSF@7=UOH!#Vkvw9i2Wm>RDfAS!;T)bNZ|Kyb*eV-eW)aH9P%grB2hF;kTSP{?v5Z z!3lhKhvkh?vvpr})eV1HN7~z2(->xNW>sX+Ud~{rfqfvWtPSny+}W{!JLOsQ0jDx* waHqT@?cp5TmBt!YSr+Z?e7z?sz-X=VvGjgE+SzF^+G~B=ItTXVu;Xg|58S5}XaE2J diff --git a/src/index.js b/src/index.js index fa2391f..6612067 100644 --- a/src/index.js +++ b/src/index.js @@ -35,6 +35,13 @@ app.get('/health', (req, res) => { res.json({ status: 'ok' }); }); +// Parse channel IDs from environment variable +function getChannelIds() { + const channelIdsStr = process.env.DISCORD_CHANNEL_IDS || process.env.DISCORD_CHANNEL_ID; + if (!channelIdsStr) return []; + return channelIdsStr.split(',').map(id => id.trim()).filter(id => id.length > 0); +} + // Fetch endpoint - trigger message fetch for a channel app.post('/fetch/:channelId', async (req, res) => { try { @@ -56,9 +63,29 @@ app.post('/fetch/:channelId', async (req, res) => { } }); +// Fetch all configured channels +async function fetchAllChannels() { + const channelIds = getChannelIds(); + const results = await Promise.allSettled( + channelIds.map(id => fetchChannelMessages(id, 100)) + ); + + let totalFetched = 0; + results.forEach((result, index) => { + if (result.status === 'fulfilled') { + totalFetched += result.value.length; + console.log(` Channel ${channelIds[index]}: ${result.value.length} messages`); + } else { + console.error(` Channel ${channelIds[index]}: failed - ${result.reason}`); + } + }); + + console.log(`Total messages fetched: ${totalFetched}`); +} + async function start() { // Validate required environment variables - const requiredEnv = ['DISCORD_TOKEN', 'DISCORD_CHANNEL_ID']; + const requiredEnv = ['DISCORD_TOKEN', 'DISCORD_CHANNEL_IDS']; const missing = requiredEnv.filter(env => !process.env[env]); if (missing.length > 0) { @@ -71,9 +98,9 @@ async function start() { console.log('Logging in to Discord...'); await login(process.env.DISCORD_TOKEN); - // Initial fetch - console.log('Fetching initial messages...'); - await fetchChannelMessages(process.env.DISCORD_CHANNEL_ID, 100); + // Initial fetch from all configured channels + console.log('Fetching initial messages from all channels...'); + await fetchAllChannels(); // Start HTTP server app.listen(PORT, '0.0.0.0', () => { @@ -85,7 +112,7 @@ async function start() { const FETCH_INTERVAL = parseInt(process.env.FETCH_INTERVAL_MS, 10) || 5 * 60 * 1000; setInterval(async () => { try { - await fetchChannelMessages(process.env.DISCORD_CHANNEL_ID, 100); + await fetchAllChannels(); } catch (error) { console.error('Periodic fetch failed:', error); }