telegram-badge 1.1.1 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +103 -55
- package/README.ru.md +160 -59
- package/README.zh.md +102 -54
- package/dist/api/telegram-badge.js +20 -14
- package/dist/tests/telegram-badge.test.js +1 -1
- package/dist/types/index.d.ts +1 -1
- package/package.json +1 -1
- package/types/index.ts +1 -1
package/README.md
CHANGED
|
@@ -4,16 +4,26 @@
|
|
|
4
4
|
|
|
5
5
|
[](https://github.com/chatman-media/telegram-badge/actions)
|
|
6
6
|
[](https://badge.fury.io/js/telegram-badge)
|
|
7
|
+
[](https://www.npmjs.com/package/telegram-badge)
|
|
8
|
+
[](https://bundlephobia.com/package/telegram-badge)
|
|
7
9
|
[](https://www.typescriptlang.org/)
|
|
8
10
|
[](https://opensource.org/licenses/MIT)
|
|
11
|
+
|
|
12
|
+
[](https://github.com/chatman-media/telegram-badge)
|
|
9
13
|
[](https://dev.to/chatman-media/show-your-telegram-group-member-count-in-github-readme-46pl)
|
|
10
|
-
[](https://x.com/
|
|
14
|
+
[](https://x.com/status/1947399700795244694)
|
|
11
15
|
|
|
12
16
|
This project generates SVG badges with the current member count of your Telegram group. Perfect for displaying community activity in GitHub README files or on websites.
|
|
13
17
|
|
|
14
|
-
## 🚀
|
|
18
|
+
## 🚀 Quick Start
|
|
19
|
+
|
|
20
|
+
Just use URL parameters to generate badges for any Telegram channel or group:
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
https://telegram-badge.vercel.app/api/telegram-badge?channelId=@your_channel
|
|
24
|
+
```
|
|
15
25
|
|
|
16
|
-

|
|
26
|
+

|
|
17
27
|
|
|
18
28
|
---
|
|
19
29
|
|
|
@@ -26,63 +36,56 @@ This project generates SVG badges with the current member count of your Telegram
|
|
|
26
36
|
|
|
27
37
|
---
|
|
28
38
|
|
|
29
|
-
##
|
|
39
|
+
## 🧩 Usage
|
|
30
40
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
```bash
|
|
34
|
-
git clone https://github.com/chatman-media/telegram-badge.git
|
|
35
|
-
cd telegram-badge
|
|
36
|
-
```
|
|
41
|
+
### Primary Method: URL Parameters (No Setup Required!)
|
|
37
42
|
|
|
38
|
-
|
|
43
|
+
Simply add your Telegram channel/group ID to the URL:
|
|
39
44
|
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
# or
|
|
43
|
-
bun install
|
|
45
|
+
```markdown
|
|
46
|
+

|
|
44
47
|
```
|
|
45
48
|
|
|
46
|
-
|
|
49
|
+
That's it! No deployment, no bot token needed.
|
|
47
50
|
|
|
48
|
-
|
|
49
|
-
BOT_TOKEN=your_telegram_bot_token
|
|
50
|
-
CHAT_ID=@your_group_username_or_chat_id
|
|
51
|
-
```
|
|
51
|
+
### Alternative Method: Self-Hosted Deployment
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
For advanced users who want to host their own instance:
|
|
54
54
|
|
|
55
|
-
|
|
55
|
+
#### 1. Prerequisites
|
|
56
|
+
- Telegram Bot Token (create via [@BotFather](https://t.me/botfather))
|
|
57
|
+
- Vercel account (or any Node.js hosting)
|
|
56
58
|
|
|
57
|
-
|
|
58
|
-
npm run dev
|
|
59
|
-
# or
|
|
60
|
-
bun dev
|
|
61
|
-
```
|
|
59
|
+
#### 2. Deploy to Vercel
|
|
62
60
|
|
|
63
|
-
|
|
61
|
+
[](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fchatman-media%2Ftelegram-badge)
|
|
64
62
|
|
|
65
|
-
|
|
63
|
+
Set environment variables:
|
|
64
|
+
- `BOT_TOKEN`: Your Telegram bot token
|
|
65
|
+
- `CHAT_ID`: Default chat ID (optional if using URL parameters)
|
|
66
66
|
|
|
67
|
-
|
|
68
|
-
2. Add environment variables in project settings:
|
|
69
|
-
- BOT_TOKEN
|
|
70
|
-
- CHAT_ID
|
|
67
|
+
#### 3. Local Development
|
|
71
68
|
|
|
72
|
-
|
|
69
|
+
```bash
|
|
70
|
+
git clone https://github.com/chatman-media/telegram-badge.git
|
|
71
|
+
cd telegram-badge
|
|
72
|
+
npm install
|
|
73
73
|
|
|
74
|
-
|
|
74
|
+
# Create .env file
|
|
75
|
+
echo "BOT_TOKEN=your_bot_token" > .env
|
|
76
|
+
echo "CHAT_ID=@your_channel" >> .env
|
|
75
77
|
|
|
76
|
-
|
|
77
|
-

|
|
78
|
+
npm run dev
|
|
78
79
|
```
|
|
79
80
|
|
|
81
|
+
|
|
80
82
|
### 🎨 Styling Parameters
|
|
81
83
|
|
|
82
84
|
You can customize the badge appearance using the following parameters:
|
|
83
85
|
|
|
84
86
|
| Parameter | Description | Default Value |
|
|
85
87
|
|-----------|-------------|---------------|
|
|
88
|
+
| `channelId` | Telegram chat ID or username (e.g., ``) | From environment |
|
|
86
89
|
| `style` | Badge style | `flat` |
|
|
87
90
|
| `label` | Label text | `Telegram` |
|
|
88
91
|
| `color` | Main badge color | `2AABEE` (Telegram color) |
|
|
@@ -101,60 +104,71 @@ You can customize the badge appearance using the following parameters:
|
|
|
101
104
|
|
|
102
105
|
Standard badge (flat style):
|
|
103
106
|
```
|
|
104
|
-
https://telegram-badge.vercel.app/api/telegram-badge
|
|
107
|
+
https://telegram-badge.vercel.app/api/telegram-badge?channelId=@your_channel
|
|
105
108
|
```
|
|
106
|
-

|
|
109
|
+

|
|
107
110
|
|
|
108
111
|
Badge with plastic style:
|
|
109
112
|
```
|
|
110
|
-
https://telegram-badge.vercel.app/api/telegram-badge?style=plastic
|
|
113
|
+
https://telegram-badge.vercel.app/api/telegram-badge?channelId=@your_channel&style=plastic
|
|
111
114
|
```
|
|
112
|
-

|
|
115
|
+

|
|
113
116
|
|
|
114
117
|
Badge with flat-square style:
|
|
115
118
|
```
|
|
116
|
-
https://telegram-badge.vercel.app/api/telegram-badge?style=flat-square
|
|
119
|
+
https://telegram-badge.vercel.app/api/telegram-badge?channelId=@your_channel&style=flat-square
|
|
117
120
|
```
|
|
118
|
-

|
|
121
|
+

|
|
119
122
|
|
|
120
123
|
Badge with for-the-badge style:
|
|
121
124
|
```
|
|
122
|
-
https://telegram-badge.vercel.app/api/telegram-badge?style=for-the-badge
|
|
125
|
+
https://telegram-badge.vercel.app/api/telegram-badge?channelId=@your_channel&style=for-the-badge
|
|
123
126
|
```
|
|
124
|
-

|
|
127
|
+

|
|
125
128
|
|
|
126
129
|
Badge with social style:
|
|
127
130
|
```
|
|
128
|
-
https://telegram-badge.vercel.app/api/telegram-badge?style=social
|
|
131
|
+
https://telegram-badge.vercel.app/api/telegram-badge?channelId=@your_channel&style=social
|
|
129
132
|
```
|
|
130
|
-

|
|
133
|
+

|
|
131
134
|
|
|
132
135
|
Badge with custom label and color:
|
|
133
136
|
```
|
|
134
|
-
https://telegram-badge.vercel.app/api/telegram-badge?label=Join%20Chat&color=00FF00
|
|
137
|
+
https://telegram-badge.vercel.app/api/telegram-badge?channelId=@your_channel&label=Join%20Chat&color=00FF00
|
|
135
138
|
```
|
|
136
|
-

|
|
139
|
+

|
|
137
140
|
|
|
138
141
|
Fully customized badge:
|
|
139
142
|
```
|
|
140
|
-
https://telegram-badge.vercel.app/api/telegram-badge?style=for-the-badge&label=Community&color=FF5733&labelColor=1A1A1A
|
|
143
|
+
https://telegram-badge.vercel.app/api/telegram-badge?channelId=@your_channel&style=for-the-badge&label=Community&color=FF5733&labelColor=1A1A1A
|
|
141
144
|
```
|
|
142
|
-

|
|
145
|
+

|
|
143
146
|
|
|
144
147
|
Badge without logo:
|
|
145
148
|
```
|
|
146
|
-
https://telegram-badge.vercel.app/api/telegram-badge?logo=false
|
|
149
|
+
https://telegram-badge.vercel.app/api/telegram-badge?channelId=@your_channel&logo=false
|
|
150
|
+
```
|
|
151
|
+

|
|
152
|
+
|
|
153
|
+
Badge for specific channel:
|
|
154
|
+
```
|
|
155
|
+
https://telegram-badge.vercel.app/api/telegram-badge?channelId=@your_channel
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
Badge with custom styling:
|
|
159
|
+
```
|
|
160
|
+
https://telegram-badge.vercel.app/api/telegram-badge?channelId=@your_channel&style=for-the-badge&color=FF5733
|
|
147
161
|
```
|
|
148
|
-

|
|
149
162
|
|
|
150
163
|
## ✨ Features
|
|
151
164
|
|
|
152
165
|
- 👥 Real-time member count display
|
|
166
|
+
- 🔗 Direct URL parameters - no setup required!
|
|
153
167
|
- 🎨 Full badge appearance customization
|
|
154
|
-
- 🔒
|
|
168
|
+
- 🔒 Optional self-hosting with secure token storage
|
|
155
169
|
- ⚡ Optimized caching for fast loading
|
|
156
170
|
- 🛡️ Error handling with informative messages
|
|
157
|
-
- 🆓 Free
|
|
171
|
+
- 🆓 Free to use
|
|
158
172
|
- 📡 Can be extended to show activity/message count
|
|
159
173
|
- 🧪 Comprehensive test suite with TypeScript
|
|
160
174
|
|
|
@@ -199,6 +213,16 @@ Build the project:
|
|
|
199
213
|
npm run build
|
|
200
214
|
```
|
|
201
215
|
|
|
216
|
+
## Star History
|
|
217
|
+
|
|
218
|
+
<a href="https://www.star-history.com/#chatman-media/telegram-badge&Date">
|
|
219
|
+
<picture>
|
|
220
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=chatman-media/telegram-badge&type=Date&theme=dark" />
|
|
221
|
+
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=chatman-media/telegram-badge&type=Date" />
|
|
222
|
+
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=chatman-media/telegram-badge&type=Date" />
|
|
223
|
+
</picture>
|
|
224
|
+
</a>
|
|
225
|
+
|
|
202
226
|
## 🤝 Contributing
|
|
203
227
|
|
|
204
228
|
1. Fork the repository
|
|
@@ -207,6 +231,30 @@ npm run build
|
|
|
207
231
|
4. Push to the branch (`git push origin feature/amazing-feature`)
|
|
208
232
|
5. Open a Pull Request
|
|
209
233
|
|
|
234
|
+
## Subscribe
|
|
235
|
+
|
|
236
|
+
[](https://www.tiktok.com/@chatman.media)
|
|
237
|
+
[](https://www.twitch.tv/chatman1984)
|
|
238
|
+
[](https://www.youtube.com/@chatman-media)
|
|
239
|
+
[](https://t.me/alexanderkireyev)
|
|
240
|
+
[](https://x.com)
|
|
241
|
+
|
|
242
|
+
## Support 💝🚀
|
|
243
|
+
|
|
244
|
+
- **BTC:** 14s9Y9Rb2CUWHSAatiQMhfkpx1MWXofUzw
|
|
245
|
+
- **TON:** UQD1M80nPyzph5ZW1vfp_r19XI5MaerNhDq4dWXbXCo96WFj
|
|
246
|
+
- **NOT:** UQD1M80nPyzph5ZW1vfp_r19XI5MaerNhDq4dWXbXCo96WFj
|
|
247
|
+
- **ETH:** 0x286D65151b622dCC16624cEd8463FDa45585fd60
|
|
248
|
+
|
|
249
|
+
<div align="center">
|
|
250
|
+
|
|
251
|
+
<img src="public/btc.png" alt="BTC" style="height: 185px" />
|
|
252
|
+
<img src="public/ton.png" alt="TON" style="height: 185px" />
|
|
253
|
+
<img src="public/not.png" alt="NOT" style="height: 185px" />
|
|
254
|
+
<img src="public/eth.png" alt="ETH" style="height: 185px" />
|
|
255
|
+
|
|
256
|
+
</div>
|
|
257
|
+
|
|
210
258
|
## 📜 License
|
|
211
259
|
|
|
212
260
|
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
package/README.ru.md
CHANGED
|
@@ -4,75 +4,78 @@
|
|
|
4
4
|
|
|
5
5
|
[](https://github.com/chatman-media/telegram-badge/actions)
|
|
6
6
|
[](https://badge.fury.io/js/telegram-badge)
|
|
7
|
+
[](https://www.npmjs.com/package/telegram-badge)
|
|
8
|
+
[](https://bundlephobia.com/package/telegram-badge)
|
|
7
9
|
[](https://www.typescriptlang.org/)
|
|
8
10
|
[](https://opensource.org/licenses/MIT)
|
|
11
|
+
|
|
12
|
+
[](https://github.com/chatman-media/telegram-badge)
|
|
9
13
|
[](https://dev.to/chatman-media/show-your-telegram-group-member-count-in-github-readme-46pl)
|
|
10
14
|
[](https://x.com/chatman_media/status/1947399700795244694)
|
|
11
15
|
|
|
12
16
|
Этот проект генерирует SVG-бейдж с текущим количеством участников вашей Telegram-группы. Идеально подходит для отображения активности сообщества в README на GitHub или на сайте.
|
|
13
17
|
|
|
14
|
-
## 🚀
|
|
18
|
+
## 🚀 Быстрый старт
|
|
19
|
+
|
|
20
|
+
Просто используйте параметры URL для генерации бейджей для любого Telegram-канала или группы:
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
https://telegram-badge.vercel.app/api/telegram-badge?channelId=@your_channel
|
|
24
|
+
```
|
|
15
25
|
|
|
16
|
-

|
|
26
|
+

|
|
17
27
|
|
|
18
28
|
---
|
|
19
29
|
|
|
20
30
|
## 📦 Стек
|
|
21
31
|
|
|
22
|
-
- Node.js /
|
|
32
|
+
- Node.js / TypeScript
|
|
23
33
|
- Telegram Bot API
|
|
24
34
|
- Vercel (Serverless API)
|
|
35
|
+
- Jest для тестирования
|
|
25
36
|
|
|
26
37
|
---
|
|
27
38
|
|
|
28
|
-
##
|
|
39
|
+
## 🧩 Использование
|
|
29
40
|
|
|
30
|
-
|
|
41
|
+
### Основной метод: параметры URL (настройка не требуется!)
|
|
31
42
|
|
|
32
|
-
|
|
33
|
-
git clone https://github.com/chatman-media/telegram-badge.git
|
|
34
|
-
cd telegram-badge
|
|
35
|
-
```
|
|
43
|
+
Просто добавьте ID вашего Telegram-канала/группы к URL:
|
|
36
44
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
```bash
|
|
40
|
-
npm install
|
|
41
|
-
# или
|
|
42
|
-
bun install
|
|
45
|
+
```markdown
|
|
46
|
+

|
|
43
47
|
```
|
|
44
48
|
|
|
45
|
-
|
|
49
|
+
Вот и всё! Не нужно разворачивать проект, не нужен токен бота.
|
|
46
50
|
|
|
47
|
-
|
|
48
|
-
BOT_TOKEN=your_telegram_bot_token
|
|
49
|
-
CHAT_ID=@your_group_username_or_chat_id
|
|
50
|
-
```
|
|
51
|
+
### Альтернативный метод: самостоятельный хостинг
|
|
51
52
|
|
|
52
|
-
|
|
53
|
+
Для продвинутых пользователей, которые хотят развернуть собственный экземпляр:
|
|
53
54
|
|
|
54
|
-
|
|
55
|
+
#### 1. Предварительные требования
|
|
56
|
+
- Токен Telegram-бота (создайте через [@BotFather](https://t.me/botfather))
|
|
57
|
+
- Аккаунт Vercel (или любой хостинг Node.js)
|
|
55
58
|
|
|
56
|
-
|
|
57
|
-
npm run dev
|
|
58
|
-
# или
|
|
59
|
-
bun dev
|
|
60
|
-
```
|
|
59
|
+
#### 2. Деплой на Vercel
|
|
61
60
|
|
|
62
|
-
|
|
61
|
+
[](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fchatman-media%2Ftelegram-badge)
|
|
63
62
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
• BOT_TOKEN
|
|
68
|
-
• CHAT_ID
|
|
63
|
+
Установите переменные окружения:
|
|
64
|
+
- `BOT_TOKEN`: Токен вашего Telegram-бота
|
|
65
|
+
- `CHAT_ID`: ID чата по умолчанию (необязательно при использовании параметров URL)
|
|
69
66
|
|
|
70
|
-
|
|
67
|
+
#### 3. Локальная разработка
|
|
71
68
|
|
|
72
|
-
|
|
69
|
+
```bash
|
|
70
|
+
git clone https://github.com/chatman-media/telegram-badge.git
|
|
71
|
+
cd telegram-badge
|
|
72
|
+
npm install
|
|
73
73
|
|
|
74
|
-
|
|
75
|
-
|
|
74
|
+
# Создайте .env файл
|
|
75
|
+
echo "BOT_TOKEN=your_bot_token" > .env
|
|
76
|
+
echo "CHAT_ID=@your_channel" >> .env
|
|
77
|
+
|
|
78
|
+
npm run dev
|
|
76
79
|
```
|
|
77
80
|
|
|
78
81
|
### 🎨 Параметры стилизации
|
|
@@ -81,6 +84,7 @@ bun dev
|
|
|
81
84
|
|
|
82
85
|
| Параметр | Описание | Значение по умолчанию |
|
|
83
86
|
|----------|----------|------------------------|
|
|
87
|
+
| `channelId` | ID или имя пользователя Telegram-чата (например, `@timelinestudiochat`) | Из окружения |
|
|
84
88
|
| `style` | Стиль бейджа | `flat` |
|
|
85
89
|
| `label` | Текст метки | `Telegram` |
|
|
86
90
|
| `color` | Цвет основной части бейджа | `2AABEE` (цвет Telegram) |
|
|
@@ -99,64 +103,161 @@ bun dev
|
|
|
99
103
|
|
|
100
104
|
Стандартный бейдж (стиль flat):
|
|
101
105
|
```
|
|
102
|
-
https://telegram-badge.vercel.app/api/telegram-badge
|
|
106
|
+
https://telegram-badge.vercel.app/api/telegram-badge?channelId=@your_channel
|
|
103
107
|
```
|
|
104
|
-

|
|
108
|
+

|
|
105
109
|
|
|
106
110
|
Бейдж со стилем plastic:
|
|
107
111
|
```
|
|
108
|
-
https://telegram-badge.vercel.app/api/telegram-badge?style=plastic
|
|
112
|
+
https://telegram-badge.vercel.app/api/telegram-badge?channelId=@your_channel&style=plastic
|
|
109
113
|
```
|
|
110
|
-

|
|
114
|
+

|
|
111
115
|
|
|
112
116
|
Бейдж со стилем flat-square:
|
|
113
117
|
```
|
|
114
|
-
https://telegram-badge.vercel.app/api/telegram-badge?style=flat-square
|
|
118
|
+
https://telegram-badge.vercel.app/api/telegram-badge?channelId=@your_channel&style=flat-square
|
|
115
119
|
```
|
|
116
|
-

|
|
120
|
+

|
|
117
121
|
|
|
118
122
|
Бейдж со стилем for-the-badge:
|
|
119
123
|
```
|
|
120
|
-
https://telegram-badge.vercel.app/api/telegram-badge?style=for-the-badge
|
|
124
|
+
https://telegram-badge.vercel.app/api/telegram-badge?channelId=@your_channel&style=for-the-badge
|
|
121
125
|
```
|
|
122
|
-

|
|
126
|
+

|
|
123
127
|
|
|
124
128
|
Бейдж со стилем social:
|
|
125
129
|
```
|
|
126
|
-
https://telegram-badge.vercel.app/api/telegram-badge?style=social
|
|
130
|
+
https://telegram-badge.vercel.app/api/telegram-badge?channelId=@your_channel&style=social
|
|
127
131
|
```
|
|
128
|
-

|
|
132
|
+

|
|
129
133
|
|
|
130
134
|
Бейдж с кастомной меткой и цветом:
|
|
131
135
|
```
|
|
132
|
-
https://telegram-badge.vercel.app/api/telegram-badge?label=Наш%20Чат&color=00FF00
|
|
136
|
+
https://telegram-badge.vercel.app/api/telegram-badge?channelId=@your_channel&label=Наш%20Чат&color=00FF00
|
|
133
137
|
```
|
|
134
|
-

|
|
138
|
+

|
|
135
139
|
|
|
136
140
|
Полностью кастомизированный бейдж:
|
|
137
141
|
```
|
|
138
|
-
https://telegram-badge.vercel.app/api/telegram-badge?style=for-the-badge&label=Сообщество&color=FF5733&labelColor=1A1A1A
|
|
142
|
+
https://telegram-badge.vercel.app/api/telegram-badge?channelId=@your_channel&style=for-the-badge&label=Сообщество&color=FF5733&labelColor=1A1A1A
|
|
139
143
|
```
|
|
140
|
-

|
|
144
|
+

|
|
141
145
|
|
|
142
146
|
Бейдж без логотипа:
|
|
143
147
|
```
|
|
144
|
-
https://telegram-badge.vercel.app/api/telegram-badge?logo=false
|
|
148
|
+
https://telegram-badge.vercel.app/api/telegram-badge?channelId=@your_channel&logo=false
|
|
145
149
|
```
|
|
146
|
-

|
|
150
|
+

|
|
147
151
|
|
|
148
|
-
|
|
152
|
+
Бейдж для конкретного канала:
|
|
153
|
+
```
|
|
154
|
+
https://telegram-badge.vercel.app/api/telegram-badge?channelId=@your_channel
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
Бейдж с пользовательским стилем:
|
|
158
|
+
```
|
|
159
|
+
https://telegram-badge.vercel.app/api/telegram-badge?channelId=@your_channel&style=for-the-badge&color=FF5733
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## ✨ Возможности
|
|
149
163
|
|
|
150
164
|
- 👥 Отображение количества участников в реальном времени
|
|
165
|
+
- 🔗 Прямые параметры URL - настройка не требуется!
|
|
151
166
|
- 🎨 Полная кастомизация внешнего вида бейджа
|
|
152
|
-
- 🔒
|
|
167
|
+
- 🔒 Опциональный самостоятельный хостинг с безопасным хранением токенов
|
|
153
168
|
- ⚡ Оптимизированное кэширование для быстрой загрузки
|
|
154
169
|
- 🛡️ Обработка ошибок с информативными сообщениями
|
|
155
|
-
- 🆓
|
|
170
|
+
- 🆓 Бесплатное использование
|
|
156
171
|
- 📡 Можно расширить до отображения активности / количества сообщений
|
|
172
|
+
- 🧪 Полный набор тестов с TypeScript
|
|
173
|
+
|
|
174
|
+
## 🔧 Использование API
|
|
175
|
+
|
|
176
|
+
### Как npm пакет:
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
npm install telegram-badge
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
```typescript
|
|
183
|
+
import badgeHandler from 'telegram-badge';
|
|
184
|
+
|
|
185
|
+
// Используйте в вашей serverless функции
|
|
186
|
+
export default badgeHandler;
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### Прямые вызовы API:
|
|
190
|
+
|
|
191
|
+
```typescript
|
|
192
|
+
GET /api/telegram-badge?style=flat&label=Участники&color=2AABEE&labelColor=555555
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
## 🧪 Тестирование
|
|
196
|
+
|
|
197
|
+
Запустить тесты:
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
npm test
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
Проверка типов:
|
|
204
|
+
|
|
205
|
+
```bash
|
|
206
|
+
npm run type-check
|
|
207
|
+
```
|
|
157
208
|
|
|
158
|
-
|
|
209
|
+
Сборка проекта:
|
|
159
210
|
|
|
160
|
-
|
|
211
|
+
```bash
|
|
212
|
+
npm run build
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
## История звёзд
|
|
216
|
+
|
|
217
|
+
<a href="https://www.star-history.com/#chatman-media/telegram-badge&Date">
|
|
218
|
+
<picture>
|
|
219
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=chatman-media/telegram-badge&type=Date&theme=dark" />
|
|
220
|
+
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=chatman-media/telegram-badge&type=Date" />
|
|
221
|
+
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=chatman-media/telegram-badge&type=Date" />
|
|
222
|
+
</picture>
|
|
223
|
+
</a>
|
|
224
|
+
|
|
225
|
+
## 🤝 Внести вклад
|
|
226
|
+
|
|
227
|
+
1. Форкните репозиторий
|
|
228
|
+
2. Создайте ветку для новой функции (`git checkout -b feature/amazing-feature`)
|
|
229
|
+
3. Зафиксируйте изменения (`git commit -m 'Add some amazing feature'`)
|
|
230
|
+
4. Отправьте ветку (`git push origin feature/amazing-feature`)
|
|
231
|
+
5. Откройте Pull Request
|
|
232
|
+
|
|
233
|
+
## Подписывайтесь
|
|
234
|
+
|
|
235
|
+
[](https://www.tiktok.com/@chatman.media)
|
|
236
|
+
[](https://www.twitch.tv/chatman1984)
|
|
237
|
+
[](https://www.youtube.com/@chatman-media)
|
|
238
|
+
[](https://t.me/alexanderkireyev)
|
|
239
|
+
[](https://x.com/timelinestudiochat)
|
|
240
|
+
|
|
241
|
+
## Поддержка 💝🚀
|
|
242
|
+
|
|
243
|
+
- **BTC:** 14s9Y9Rb2CUWHSAatiQMhfkpx1MWXofUzw
|
|
244
|
+
- **TON:** UQD1M80nPyzph5ZW1vfp_r19XI5MaerNhDq4dWXbXCo96WFj
|
|
245
|
+
- **NOT:** UQD1M80nPyzph5ZW1vfp_r19XI5MaerNhDq4dWXbXCo96WFj
|
|
246
|
+
- **ETH:** 0x286D65151b622dCC16624cEd8463FDa45585fd60
|
|
247
|
+
|
|
248
|
+
<div align="center">
|
|
249
|
+
|
|
250
|
+
<img src="public/btc.png" alt="BTC" style="height: 185px" />
|
|
251
|
+
<img src="public/ton.png" alt="TON" style="height: 185px" />
|
|
252
|
+
<img src="public/not.png" alt="NOT" style="height: 185px" />
|
|
253
|
+
<img src="public/eth.png" alt="ETH" style="height: 185px" />
|
|
254
|
+
|
|
255
|
+
</div>
|
|
256
|
+
|
|
257
|
+
## 📜 Лицензия
|
|
258
|
+
|
|
259
|
+
Этот проект лицензирован под лицензией MIT - подробности в файле [LICENSE](LICENSE).
|
|
260
|
+
|
|
261
|
+
---
|
|
161
262
|
|
|
162
|
-
|
|
263
|
+
Сделано с ❤️ от [Chatman Media](https://github.com/chatman-media)
|
package/README.zh.md
CHANGED
|
@@ -4,16 +4,26 @@
|
|
|
4
4
|
|
|
5
5
|
[](https://github.com/chatman-media/telegram-badge/actions)
|
|
6
6
|
[](https://badge.fury.io/js/telegram-badge)
|
|
7
|
+
[](https://www.npmjs.com/package/telegram-badge)
|
|
8
|
+
[](https://bundlephobia.com/package/telegram-badge)
|
|
7
9
|
[](https://www.typescriptlang.org/)
|
|
8
10
|
[](https://opensource.org/licenses/MIT)
|
|
11
|
+
|
|
12
|
+
[](https://github.com/chatman-media/telegram-badge)
|
|
9
13
|
[](https://dev.to/chatman-media/show-your-telegram-group-member-count-in-github-readme-46pl)
|
|
10
14
|
[](https://x.com/chatman_media/status/1947399700795244694)
|
|
11
15
|
|
|
12
16
|
本项目生成显示 Telegram 群组当前成员数量的 SVG 徽章。非常适合在 GitHub README 文件或网站上展示社区活跃度。
|
|
13
17
|
|
|
14
|
-
## 🚀
|
|
18
|
+
## 🚀 快速开始
|
|
19
|
+
|
|
20
|
+
只需使用 URL 参数即可为任何 Telegram 频道或群组生成徽章:
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
https://telegram-badge.vercel.app/api/telegram-badge?channelId=@your_channel
|
|
24
|
+
```
|
|
15
25
|
|
|
16
|
-

|
|
26
|
+

|
|
17
27
|
|
|
18
28
|
---
|
|
19
29
|
|
|
@@ -26,63 +36,56 @@
|
|
|
26
36
|
|
|
27
37
|
---
|
|
28
38
|
|
|
29
|
-
##
|
|
39
|
+
## 🧩 使用方法
|
|
30
40
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
```bash
|
|
34
|
-
git clone https://github.com/chatman-media/telegram-badge.git
|
|
35
|
-
cd telegram-badge
|
|
36
|
-
```
|
|
41
|
+
### 主要方法:URL 参数(无需任何设置!)
|
|
37
42
|
|
|
38
|
-
|
|
43
|
+
只需将您的 Telegram 频道/群组 ID 添加到 URL:
|
|
39
44
|
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
# 或
|
|
43
|
-
bun install
|
|
45
|
+
```markdown
|
|
46
|
+

|
|
44
47
|
```
|
|
45
48
|
|
|
46
|
-
|
|
49
|
+
就这样!无需部署,无需机器人令牌。
|
|
47
50
|
|
|
48
|
-
|
|
49
|
-
BOT_TOKEN=your_telegram_bot_token
|
|
50
|
-
CHAT_ID=@your_group_username_or_chat_id
|
|
51
|
-
```
|
|
51
|
+
### 替代方法:自托管部署
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
对于想要托管自己实例的高级用户:
|
|
54
54
|
|
|
55
|
-
|
|
55
|
+
#### 1. 先决条件
|
|
56
|
+
- Telegram 机器人令牌(通过 [@BotFather](https://t.me/botfather) 创建)
|
|
57
|
+
- Vercel 账户(或任何 Node.js 托管)
|
|
56
58
|
|
|
57
|
-
|
|
58
|
-
npm run dev
|
|
59
|
-
# 或
|
|
60
|
-
bun dev
|
|
61
|
-
```
|
|
59
|
+
#### 2. 部署到 Vercel
|
|
62
60
|
|
|
63
|
-
|
|
61
|
+
[](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fchatman-media%2Ftelegram-badge)
|
|
64
62
|
|
|
65
|
-
|
|
63
|
+
设置环境变量:
|
|
64
|
+
- `BOT_TOKEN`:您的 Telegram 机器人令牌
|
|
65
|
+
- `CHAT_ID`:默认聊天 ID(如果使用 URL 参数则可选)
|
|
66
66
|
|
|
67
|
-
|
|
68
|
-
2. 在项目设置中添加环境变量:
|
|
69
|
-
- BOT_TOKEN
|
|
70
|
-
- CHAT_ID
|
|
67
|
+
#### 3. 本地开发
|
|
71
68
|
|
|
72
|
-
|
|
69
|
+
```bash
|
|
70
|
+
git clone https://github.com/chatman-media/telegram-badge.git
|
|
71
|
+
cd telegram-badge
|
|
72
|
+
npm install
|
|
73
73
|
|
|
74
|
-
|
|
74
|
+
# 创建 .env 文件
|
|
75
|
+
echo "BOT_TOKEN=your_bot_token" > .env
|
|
76
|
+
echo "CHAT_ID=@your_channel" >> .env
|
|
75
77
|
|
|
76
|
-
|
|
77
|
-

|
|
78
|
+
npm run dev
|
|
78
79
|
```
|
|
79
80
|
|
|
81
|
+
|
|
80
82
|
### 🎨 样式参数
|
|
81
83
|
|
|
82
84
|
您可以使用以下参数自定义徽章外观:
|
|
83
85
|
|
|
84
86
|
| 参数 | 描述 | 默认值 |
|
|
85
87
|
|------|------|--------|
|
|
88
|
+
| `channelId` | Telegram 聊天 ID 或用户名(例如 `@timelinestudiochat`) | 从环境变量 |
|
|
86
89
|
| `style` | 徽章样式 | `flat` |
|
|
87
90
|
| `label` | 标签文本 | `Telegram` |
|
|
88
91
|
| `color` | 主徽章颜色 | `2AABEE`(Telegram 颜色) |
|
|
@@ -101,60 +104,71 @@ bun dev
|
|
|
101
104
|
|
|
102
105
|
标准徽章(扁平样式):
|
|
103
106
|
```
|
|
104
|
-
https://telegram-badge.vercel.app/api/telegram-badge
|
|
107
|
+
https://telegram-badge.vercel.app/api/telegram-badge?channelId=@your_channel
|
|
105
108
|
```
|
|
106
|
-

|
|
109
|
+

|
|
107
110
|
|
|
108
111
|
立体样式徽章:
|
|
109
112
|
```
|
|
110
|
-
https://telegram-badge.vercel.app/api/telegram-badge?style=plastic
|
|
113
|
+
https://telegram-badge.vercel.app/api/telegram-badge?channelId=@your_channel&style=plastic
|
|
111
114
|
```
|
|
112
|
-

|
|
115
|
+

|
|
113
116
|
|
|
114
117
|
方形扁平样式徽章:
|
|
115
118
|
```
|
|
116
|
-
https://telegram-badge.vercel.app/api/telegram-badge?style=flat-square
|
|
119
|
+
https://telegram-badge.vercel.app/api/telegram-badge?channelId=@your_channel&style=flat-square
|
|
117
120
|
```
|
|
118
|
-

|
|
121
|
+

|
|
119
122
|
|
|
120
123
|
for-the-badge 样式徽章:
|
|
121
124
|
```
|
|
122
|
-
https://telegram-badge.vercel.app/api/telegram-badge?style=for-the-badge
|
|
125
|
+
https://telegram-badge.vercel.app/api/telegram-badge?channelId=@your_channel&style=for-the-badge
|
|
123
126
|
```
|
|
124
|
-

|
|
127
|
+

|
|
125
128
|
|
|
126
129
|
社交样式徽章:
|
|
127
130
|
```
|
|
128
|
-
https://telegram-badge.vercel.app/api/telegram-badge?style=social
|
|
131
|
+
https://telegram-badge.vercel.app/api/telegram-badge?channelId=@your_channel&style=social
|
|
129
132
|
```
|
|
130
|
-

|
|
133
|
+

|
|
131
134
|
|
|
132
135
|
自定义标签和颜色的徽章:
|
|
133
136
|
```
|
|
134
|
-
https://telegram-badge.vercel.app/api/telegram-badge?label=加入聊天&color=00FF00
|
|
137
|
+
https://telegram-badge.vercel.app/api/telegram-badge?channelId=@your_channel&label=加入聊天&color=00FF00
|
|
135
138
|
```
|
|
136
|
-

|
|
139
|
+

|
|
137
140
|
|
|
138
141
|
完全自定义徽章:
|
|
139
142
|
```
|
|
140
|
-
https://telegram-badge.vercel.app/api/telegram-badge?style=for-the-badge&label=社区&color=FF5733&labelColor=1A1A1A
|
|
143
|
+
https://telegram-badge.vercel.app/api/telegram-badge?channelId=@your_channel&style=for-the-badge&label=社区&color=FF5733&labelColor=1A1A1A
|
|
141
144
|
```
|
|
142
|
-

|
|
145
|
+

|
|
143
146
|
|
|
144
147
|
无标志徽章:
|
|
145
148
|
```
|
|
146
|
-
https://telegram-badge.vercel.app/api/telegram-badge?logo=false
|
|
149
|
+
https://telegram-badge.vercel.app/api/telegram-badge?channelId=@your_channel&logo=false
|
|
150
|
+
```
|
|
151
|
+

|
|
152
|
+
|
|
153
|
+
特定频道的徽章:
|
|
154
|
+
```
|
|
155
|
+
https://telegram-badge.vercel.app/api/telegram-badge?channelId=@your_channel
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
带自定义样式的徽章:
|
|
159
|
+
```
|
|
160
|
+
https://telegram-badge.vercel.app/api/telegram-badge?channelId=@your_channel&style=for-the-badge&color=FF5733
|
|
147
161
|
```
|
|
148
|
-

|
|
149
162
|
|
|
150
163
|
## ✨ 功能特性
|
|
151
164
|
|
|
152
165
|
- 👥 实时显示成员数量
|
|
166
|
+
- 🔗 直接 URL 参数 - 无需任何设置!
|
|
153
167
|
- 🎨 完全自定义徽章外观
|
|
154
|
-
- 🔒
|
|
168
|
+
- 🔒 可选的自托管与安全令牌存储
|
|
155
169
|
- ⚡ 优化缓存以实现快速加载
|
|
156
170
|
- 🛡️ 错误处理和信息提示
|
|
157
|
-
- 🆓
|
|
171
|
+
- 🆓 免费使用
|
|
158
172
|
- 📡 可扩展显示活动/消息计数
|
|
159
173
|
- 🧪 使用 TypeScript 的完整测试套件
|
|
160
174
|
|
|
@@ -199,6 +213,16 @@ npm run type-check
|
|
|
199
213
|
npm run build
|
|
200
214
|
```
|
|
201
215
|
|
|
216
|
+
## 星标历史
|
|
217
|
+
|
|
218
|
+
<a href="https://www.star-history.com/#chatman-media/telegram-badge&Date">
|
|
219
|
+
<picture>
|
|
220
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=chatman-media/telegram-badge&type=Date&theme=dark" />
|
|
221
|
+
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=chatman-media/telegram-badge&type=Date" />
|
|
222
|
+
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=chatman-media/telegram-badge&type=Date" />
|
|
223
|
+
</picture>
|
|
224
|
+
</a>
|
|
225
|
+
|
|
202
226
|
## 🤝 贡献
|
|
203
227
|
|
|
204
228
|
1. Fork 本仓库
|
|
@@ -207,6 +231,30 @@ npm run build
|
|
|
207
231
|
4. 推送到分支(`git push origin feature/amazing-feature`)
|
|
208
232
|
5. 打开一个 Pull Request
|
|
209
233
|
|
|
234
|
+
## 订阅
|
|
235
|
+
|
|
236
|
+
[](https://www.tiktok.com/@chatman.media)
|
|
237
|
+
[](https://www.twitch.tv/chatman1984)
|
|
238
|
+
[](https://www.youtube.com/@chatman-media)
|
|
239
|
+
[](https://t.me/alexanderkireyev)
|
|
240
|
+
[](https://x.com/chatman_media)
|
|
241
|
+
|
|
242
|
+
## 支持 💝🚀
|
|
243
|
+
|
|
244
|
+
- **BTC:** 14s9Y9Rb2CUWHSAatiQMhfkpx1MWXofUzw
|
|
245
|
+
- **TON:** UQD1M80nPyzph5ZW1vfp_r19XI5MaerNhDq4dWXbXCo96WFj
|
|
246
|
+
- **NOT:** UQD1M80nPyzph5ZW1vfp_r19XI5MaerNhDq4dWXbXCo96WFj
|
|
247
|
+
- **ETH:** 0x286D65151b622dCC16624cEd8463FDa45585fd60
|
|
248
|
+
|
|
249
|
+
<div align="center">
|
|
250
|
+
|
|
251
|
+
<img src="public/btc.png" alt="BTC" style="height: 185px" />
|
|
252
|
+
<img src="public/ton.png" alt="TON" style="height: 185px" />
|
|
253
|
+
<img src="public/not.png" alt="NOT" style="height: 185px" />
|
|
254
|
+
<img src="public/eth.png" alt="ETH" style="height: 185px" />
|
|
255
|
+
|
|
256
|
+
</div>
|
|
257
|
+
|
|
210
258
|
## 📜 许可证
|
|
211
259
|
|
|
212
260
|
本项目根据 MIT 许可证获得许可 - 有关详细信息,请参阅 [LICENSE](LICENSE) 文件。
|
|
@@ -52,20 +52,24 @@ const logger = {
|
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
54
|
};
|
|
55
|
-
const validateEnvironment = () => {
|
|
55
|
+
const validateEnvironment = (query) => {
|
|
56
56
|
const token = process.env.BOT_TOKEN;
|
|
57
|
-
|
|
57
|
+
let channelId = process.env.CHAT_ID;
|
|
58
|
+
// Check if channelId is provided via URL parameter
|
|
59
|
+
if (query?.channelId) {
|
|
60
|
+
channelId = Array.isArray(query.channelId) ? query.channelId[0] : query.channelId;
|
|
61
|
+
}
|
|
58
62
|
if (!token) {
|
|
59
63
|
throw new Error("Missing BOT_TOKEN environment variable");
|
|
60
64
|
}
|
|
61
|
-
if (!
|
|
62
|
-
throw new Error("Missing CHAT_ID environment variable");
|
|
65
|
+
if (!channelId) {
|
|
66
|
+
throw new Error("Missing CHAT_ID environment variable or channelId parameter");
|
|
63
67
|
}
|
|
64
|
-
return { token,
|
|
68
|
+
return { token, channelId };
|
|
65
69
|
};
|
|
66
|
-
const getMemberCount = async (token,
|
|
67
|
-
const apiUrl = `https://api.telegram.org/bot${token}/getChatMemberCount?chat_id=${encodeURIComponent(
|
|
68
|
-
logger.debug('Fetching member count', {
|
|
70
|
+
const getMemberCount = async (token, channelId) => {
|
|
71
|
+
const apiUrl = `https://api.telegram.org/bot${token}/getChatMemberCount?chat_id=${encodeURIComponent(channelId)}`;
|
|
72
|
+
logger.debug('Fetching member count', { channelId });
|
|
69
73
|
const controller = new AbortController();
|
|
70
74
|
const timeoutId = setTimeout(() => controller.abort(), 5000);
|
|
71
75
|
try {
|
|
@@ -175,10 +179,12 @@ async function handler(req, res) {
|
|
|
175
179
|
}
|
|
176
180
|
});
|
|
177
181
|
// Early check for environment variables
|
|
178
|
-
|
|
182
|
+
const chatIdFromQuery = req.query?.channelId;
|
|
183
|
+
if (!process.env.BOT_TOKEN || (!process.env.CHAT_ID && !chatIdFromQuery)) {
|
|
179
184
|
logger.error('Missing environment variables', {
|
|
180
185
|
BOT_TOKEN: !!process.env.BOT_TOKEN,
|
|
181
|
-
CHAT_ID: !!process.env.CHAT_ID
|
|
186
|
+
CHAT_ID: !!process.env.CHAT_ID,
|
|
187
|
+
chatIdFromQuery: !!chatIdFromQuery
|
|
182
188
|
});
|
|
183
189
|
const errorBadge = createErrorBadge('Missing Config');
|
|
184
190
|
res.setHeader("Content-Type", "image/svg+xml");
|
|
@@ -186,19 +192,19 @@ async function handler(req, res) {
|
|
|
186
192
|
res.status(500).send(errorBadge);
|
|
187
193
|
return;
|
|
188
194
|
}
|
|
189
|
-
const { token,
|
|
190
|
-
logger.debug('Environment validated', {
|
|
195
|
+
const { token, channelId } = validateEnvironment(req.query);
|
|
196
|
+
logger.debug('Environment validated', { channelId });
|
|
191
197
|
const ifNoneMatch = req.headers['if-none-match'];
|
|
192
198
|
const requestEtag = `"${crypto
|
|
193
199
|
.createHash('md5')
|
|
194
|
-
.update(JSON.stringify({ token,
|
|
200
|
+
.update(JSON.stringify({ token, channelId, query: req.query, time: Math.floor(Date.now() / 300000) }))
|
|
195
201
|
.digest('hex')}"`;
|
|
196
202
|
if (ifNoneMatch && ifNoneMatch === requestEtag) {
|
|
197
203
|
logger.info('Returning 304 Not Modified');
|
|
198
204
|
res.status(304).end();
|
|
199
205
|
return;
|
|
200
206
|
}
|
|
201
|
-
const members = await getMemberCount(token,
|
|
207
|
+
const members = await getMemberCount(token, channelId);
|
|
202
208
|
logger.info('Member count fetched', { members });
|
|
203
209
|
const badgeOptions = {
|
|
204
210
|
style: req.query.style,
|
|
@@ -145,7 +145,7 @@ describe('Telegram Badge API', () => {
|
|
|
145
145
|
.createHash('md5')
|
|
146
146
|
.update(JSON.stringify({
|
|
147
147
|
token: 'test_token_for_etag',
|
|
148
|
-
|
|
148
|
+
channelId: '@test_chat_for_etag',
|
|
149
149
|
query: {},
|
|
150
150
|
time: Math.floor(fixedTime / 300000)
|
|
151
151
|
}))
|
package/dist/types/index.d.ts
CHANGED
package/package.json
CHANGED
package/types/index.ts
CHANGED