Skip to content

Commit b3d47f7

Browse files
authored
Merge pull request #30 from shahriaarrr/shahriaarrr
Add Dynamic Telegram Channel Member Count Display
2 parents b8164b1 + dfbd096 commit b3d47f7

4 files changed

Lines changed: 59 additions & 4 deletions

File tree

package-lock.json

Lines changed: 18 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@
3131
"astro": "^4.15.1",
3232
"astro-embed": "^0.7.2",
3333
"astro-icon": "^1.1.1",
34+
"axios": "^1.7.9",
35+
"dotenv": "^16.4.7",
3436
"gsap": "^3.12.5",
3537
"i18next": "^24.2.0",
3638
"limax": "4.1.0",

src/components/widgets/hero/Hero.astro

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ import telegramAvatar5 from '~/assets/images/telegram/telegram-avatar-5.jpg';
1818
import telegramIcon from '~/assets/images/telegram-icon.png';
1919
import telegramSky from '~/assets/images/telegram-sky.jpg';
2020
21+
// telegram channels members
22+
import { telegramChannelMembers, formatMemberCount } from '~/utils/telegram';
23+
2124
import youtubeIcon from '~/assets/images/youtube-icon.jpg';
2225
2326
//portrait images
@@ -96,6 +99,12 @@ const portraitImages = [
9699
{ image: { src: portraitImage16, alt: 'portraitImage16' } },
97100
{ image: { src: portraitImage17, alt: 'portraitImage17' } },
98101
];
102+
103+
// get the members count's of telegram channel
104+
const channelName = 'persian_flutter';
105+
const membersCount = await telegramChannelMembers(channelName);
106+
107+
const formattedMembers = formatMemberCount(membersCount);
99108
---
100109

101110
<WidgetWrapper
@@ -163,7 +172,7 @@ const portraitImages = [
163172
class="social-card__id flex flex-col justify-start align-top max-xl:justify-center max-xl:items-center"
164173
>
165174
<span class="rtl:text-end text-slate-800 text-sm font-medium h-5 ltr:text-start" dir="ltr"
166-
>+1.7K</span
175+
>{formattedMembers}</span
167176
>
168177
<span class="text-start text-slate-800 text-sm font-medium h-5"
169178
>{translations.socials.telegram.members?.text || 'Default Members'}</span

src/utils/telegram.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import dotenv from 'dotenv';
2+
import axios from 'axios';
3+
4+
dotenv.config();
5+
6+
const botToken = process.env.TELEGRAM_BOT_TOKEN;
7+
8+
export async function telegramChannelMembers(channelName: string): Promise<number> {
9+
try {
10+
const response = await axios.get(
11+
`https://api.telegram.org/bot${botToken}/getChatMembersCount?chat_id=@${channelName}`
12+
);
13+
return response.data.result;
14+
} catch (error) {
15+
console.error('Error fetching Telegram members count:', error);
16+
return 0;
17+
}
18+
}
19+
20+
export function formatMemberCount(num: number): string {
21+
if (num < 1000) {
22+
return num.toString();
23+
} else if (num < 10000) {
24+
const truncated = Math.floor((num / 1000) * 10) / 10;
25+
return truncated + 'k';
26+
} else {
27+
return Math.floor(num / 1000) + 'k';
28+
}
29+
}

0 commit comments

Comments
 (0)