telegram-md2html 1.0.2 → 1.0.4

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 CHANGED
@@ -1,325 +1,380 @@
1
- # Telegram Markdown to HTML Converter
2
-
3
- A smart and efficient TypeScript/JavaScript library for converting Telegram-style Markdown to Telegram-compatible HTML. Perfect for Telegram bots, chat applications, and content processing.
4
-
5
- [![npm version](https://img.shields.io/npm/v/telegram-md2html.svg)](https://www.npmjs.com/package/telegram-md2html)
6
- [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
7
- [![TypeScript](https://img.shields.io/badge/TypeScript-Ready-blue.svg)](https://www.typescriptlang.org/)
8
- [![Node.js Version](https://img.shields.io/badge/node-%3E%3D14.0.0-brightgreen.svg)](https://nodejs.org/)
9
- [![npm downloads](https://img.shields.io/npm/dm/telegram-md2html.svg)](https://www.npmjs.com/package/telegram-md2html)
10
-
11
- ## Features
12
-
13
- - **Complete Telegram Markdown Support**: All Telegram-specific formatting options
14
- - **Smart Parsing**: Handles nested styles and complex formatting
15
- - **HTML Safety**: Automatic escaping of HTML special characters
16
- - **Code Block Support**: Inline code and multiline code blocks with language specification
17
- - **Blockquote Support**: Regular and expandable blockquotes
18
- - **Customizable**: Extensible with custom processors
19
- - **TypeScript Ready**: Full TypeScript definitions included
20
- - **Dual Module Support**: Works with both CommonJS and ES Modules
21
- - **Browser Compatible**: Can be used in modern browsers
22
-
23
- ## Installation
24
-
25
- ```bash
26
- npm install telegram-md2html
27
- # or
28
- yarn add telegram-md2html
29
- # or
30
- pnpm add telegram-md2html
31
- ```
32
-
33
- ## Quick Start
34
-
35
- ```javascript
36
- // CommonJS
37
- const { markdownToHtml } = require('telegram-md2html');
38
-
39
- // ES Modules
40
- import { markdownToHtml } from 'telegram-md2html';
41
-
42
- // Convert Telegram markdown to HTML
43
- const html = markdownToHtml('**Hello** *World*!');
44
- console.log(html);
45
- // Output: <b>Hello</b> <i>World</i>!
46
- ```
47
-
48
- ## Usage Examples
49
-
50
- ### Basic Conversion
51
-
52
- ```javascript
53
- import { markdownToHtml } from 'telegram-md2html';
54
-
55
- const markdown = `
56
- # Welcome to Telegram Bot
57
-
58
- **Bold text** and *italic text*
59
- __Underlined__ and ~~strikethrough~~
60
- ||Spoiler text||
61
-
62
- \`inline code\`
63
-
64
- [Visit Google](https://google.com)
65
-
66
- > This is a quote
67
- **> Expandable quote
68
-
69
- \`\`\`javascript
70
- console.log("Hello World");
71
- \`\`\`
72
- `;
73
-
74
- const html = markdownToHtml(markdown);
75
- console.log(html);
76
- ```
77
-
78
- ### Advanced Usage with Options
79
-
80
- ```javascript
81
- import { createConverter } from 'telegram-md2html';
82
-
83
- // Create a converter with custom options
84
- const converter = createConverter({
85
- escapeHtml: true,
86
- autoCloseCodeBlocks: true,
87
- linkProcessor: (url, text) =>
88
- `<a href="${url}" target="_blank" rel="noopener">${text}</a>`,
89
- codeBlockProcessor: (code, language) =>
90
- `<pre><code class="language-${language || 'text'}">${code}</code></pre>`
91
- });
92
-
93
- const html = converter.convert('**[Important Link](https://example.com)**');
94
- ```
95
-
96
- ## Supported Markdown Syntax
97
-
98
- | Markdown | HTML Output | Description |
99
- |----------|-------------|-------------|
100
- | `**text**` | `<b>text</b>` | Bold text |
101
- | `*text*` or `_text_` | `<i>text</i>` | Italic text |
102
- | `__text__` | `<u>text</u>` | Underlined text |
103
- | `~~text~~` | `<s>text</s>` | Strikethrough text |
104
- | `\|\|text\|\|` | `<span class="tg-spoiler">text</span>` | Spoiler text |
105
- | `` `code` `` | `<code>code</code>` | Inline code |
106
- | ```` ```language\ncode\n``` ```` | `<pre><code class="language-xxx">code</code></pre>` | Code block |
107
- | `[text](url)` | `<a href="url">text</a>` | Link |
108
- | `> text` | `<blockquote>text</blockquote>` | Blockquote |
109
- | `**> text` | `<blockquote expandable>text</blockquote>` | Expandable blockquote |
110
-
111
- ## API Reference
112
-
113
- ### `markdownToHtml(text: string, options?: ConvertOptions): string`
114
-
115
- Main conversion function that converts Telegram-style markdown to HTML.
116
-
117
- **Parameters:**
118
- - `text`: The markdown text to convert
119
- - `options`: Optional conversion options
120
-
121
- **Returns:** Telegram-compatible HTML string
122
-
123
- ### `createConverter(options?: ConvertOptions): MarkdownConverter`
124
-
125
- Creates a converter instance with custom options for reuse.
126
-
127
- ### ConvertOptions Interface
128
-
129
- ```typescript
130
- interface ConvertOptions {
131
- /** Whether to escape HTML special characters (default: true) */
132
- escapeHtml?: boolean;
133
-
134
- /** Whether to auto-close unclosed code blocks (default: true) */
135
- autoCloseCodeBlocks?: boolean;
136
-
137
- /** Custom link processor function */
138
- linkProcessor?: (url: string, text: string) => string;
139
-
140
- /** Custom code block processor function */
141
- codeBlockProcessor?: (code: string, language?: string) => string;
142
- }
143
- ```
144
-
145
- ## TypeScript Support
146
-
147
- The library includes full TypeScript definitions. Just import and use:
148
-
149
- ```typescript
150
- import { markdownToHtml, ConvertOptions } from 'telegram-md2html';
151
-
152
- const options: ConvertOptions = {
153
- escapeHtml: false,
154
- linkProcessor: (url: string, text: string): string => {
155
- return `<a href="${url}" class="custom-link">${text}</a>`;
156
- }
157
- };
158
-
159
- const html: string = markdownToHtml('**TypeScript** works!', options);
160
- ```
161
-
162
- ## Browser Usage
163
-
164
- The library can be used in modern browsers:
165
-
166
- ### Using ES Modules (Recommended)
167
-
168
- ```html
169
- <script type="module">
170
- import { markdownToHtml } from 'https://cdn.jsdelivr.net/npm/telegram-md2html/dist/index.mjs';
171
-
172
- const html = markdownToHtml('**Hello** from browser!');
173
- document.getElementById('output').innerHTML = html;
174
- </script>
175
- ```
176
-
177
- ### Using from GitHub
178
-
179
- ```html
180
- <script type="module">
181
- import { markdownToHtml } from 'https://cdn.jsdelivr.net/gh/Soumyadeep765/telegram-md2html@main/dist/index.mjs';
182
-
183
- const html = markdownToHtml('**Hello** World');
184
- document.getElementById('output').innerHTML = html;
185
- </script>
186
- ```
187
-
188
- ### Using a CDN
189
-
190
- ```html
191
- <script src="https://cdn.jsdelivr.net/npm/telegram-md2html/dist/index.js"></script>
192
- <script>
193
- // Available as window.telegramMd2Html
194
- const html = telegramMd2Html.markdownToHtml('**CDN** Example');
195
- document.getElementById('output').innerHTML = html;
196
- </script>
197
- ```
198
-
199
- ### Complex Nested Example
200
-
201
- ```javascript
202
- const result = markdownToHtml(`
203
- **Welcome to our bot!**
204
-
205
- Features:
206
- • *Easy formatting*
207
- __Multiple styles__
208
- • ~~Clean output~~
209
-
210
- \`\`\`python
211
- def greet():
212
- print("Hello from Python!")
213
- \`\`\`
214
-
215
- > Remember: **Formatting** makes messages _better_
216
- **> Click to expand details
217
- `);
218
-
219
- console.log(result);
220
- ```
221
-
222
- ## Error Handling
223
-
224
- The library handles edge cases gracefully:
225
-
226
- - Unclosed code blocks are automatically closed
227
- - HTML characters are properly escaped by default
228
- - Invalid markdown is treated as plain text
229
- - Nested styles are processed correctly
230
-
231
- ## Performance
232
-
233
- The library is optimized for performance:
234
- - Efficient tokenization algorithm
235
- - Minimal memory usage
236
- - No external dependencies
237
- - Fast parsing even for large documents
238
-
239
- ## Contributing
240
-
241
- Contributions are welcome! Here's how you can help:
242
-
243
- 1. Fork the repository
244
- 2. Create a feature branch: `git checkout -b feature-name`
245
- 3. Make your changes
246
- 4. Add tests for new functionality
247
- 5. Run tests: `npm test`
248
- 6. Commit your changes: `git commit -am 'Add feature'`
249
- 7. Push to the branch: `git push origin feature-name`
250
- 8. Submit a pull request
251
-
252
- ### Development Setup
253
-
254
- ```bash
255
- # Clone the repository
256
- git clone https://github.com/Soumyadeep765/telegram-md2html.git
257
- cd telegram-md2html
258
-
259
- # Install dependencies
260
- npm install
261
-
262
- # Build the library
263
- npm run build
264
-
265
- # Run tests
266
- npm test
267
-
268
- # Watch mode for development
269
- npm run dev
270
- ```
271
-
272
- ## Testing
273
-
274
- The library includes comprehensive tests:
275
-
276
- ```bash
277
- # Run all tests
278
- npm test
279
-
280
- # Run tests with coverage
281
- npm test -- --coverage
282
- ```
283
-
284
- ## License
285
-
286
- This project is licensed under the **MIT** License
287
-
288
- ## Support
289
-
290
- If you find this library useful, please consider:
291
-
292
- - Starring the repository on GitHub
293
- - Sharing it with others
294
- - Reporting issues
295
- - Suggesting new features
296
-
297
- ## Changelog
298
-
299
- ### v1.0.1
300
- - Initial release
301
- - Complete Telegram markdown support
302
- - TypeScript definitions
303
- - Browser compatibility
304
- - Custom processor support
305
-
306
- ### v1.0.2
307
- - **Improved output formatting**: Removed extra newlines around code blocks and quotes
308
- - Cleaner HTML output without unnecessary whitespace
309
- - Better preservation of original markdown formatting
310
-
311
- ## Author
312
-
313
- **Soumyadeep Das**
314
- - GitHub: [@Soumyadeep765](https://github.com/Soumyadeep765/telegram-md2html)
315
- - Email: soumyadeepdas765@gmail.com
316
-
317
- ## Acknowledgments
318
-
319
- - Telegram for their excellent Bot API
320
- - All contributors and users of this library
321
- - The open source community for inspiration and support
322
-
323
- ---
324
-
1
+ # Telegram Markdown to HTML Converter
2
+
3
+ A smart and efficient TypeScript/JavaScript library for converting Telegram-style Markdown to Telegram-compatible HTML. Perfect for Telegram bots, chat applications, and content processing.
4
+
5
+ [![npm version](https://img.shields.io/npm/v/telegram-md2html.svg)](https://www.npmjs.com/package/telegram-md2html)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
7
+ [![TypeScript](https://img.shields.io/badge/TypeScript-Ready-blue.svg)](https://www.typescriptlang.org/)
8
+ [![Node.js Version](https://img.shields.io/badge/node-%3E%3D14.0.0-brightgreen.svg)](https://nodejs.org/)
9
+ [![npm downloads](https://img.shields.io/npm/dm/telegram-md2html.svg)](https://www.npmjs.com/package/telegram-md2html)
10
+
11
+ ## Features
12
+
13
+ - **Complete Telegram Markdown Support**: All Telegram-specific formatting options
14
+ - **Smart Parsing**: Handles nested styles and complex formatting
15
+ - **Username Protection**: Underscores in usernames (e.g., @username_bot) are preserved
16
+ - **HTML Safety**: Automatic escaping of HTML special characters
17
+ - **Heading Support**: Convert `##` and `###` to bold text with custom symbols
18
+ - **Code Block Support**: Inline code and multiline code blocks with language specification
19
+ - **Blockquote Support**: Regular and expandable blockquotes
20
+ - **Customizable**: Extensible with custom processors
21
+ - **TypeScript Ready**: Full TypeScript definitions included
22
+ - **Dual Module Support**: Works with both CommonJS and ES Modules
23
+ - **Browser Compatible**: Can be used in modern browsers
24
+
25
+ ## Installation
26
+
27
+ ```bash
28
+ npm install telegram-md2html
29
+ # or
30
+ yarn add telegram-md2html
31
+ # or
32
+ pnpm add telegram-md2html
33
+ ```
34
+
35
+ ## Quick Start
36
+
37
+ ```javascript
38
+ // CommonJS
39
+ const { markdownToHtml } = require('telegram-md2html');
40
+
41
+ // ES Modules
42
+ import { markdownToHtml } from 'telegram-md2html';
43
+
44
+ // Convert Telegram markdown to HTML
45
+ const html = markdownToHtml('**Hello** *World*!');
46
+ console.log(html);
47
+ // Output: <b>Hello</b> <i>World</i>!
48
+ ```
49
+
50
+ ## Usage Examples
51
+
52
+ ### Basic Conversion
53
+
54
+ ```javascript
55
+ import { markdownToHtml } from 'telegram-md2html';
56
+
57
+ const markdown = `
58
+ ## Welcome to Telegram Bot
59
+
60
+ **Bold text** and *italic text*
61
+ __Underlined__ and ~~strikethrough~~
62
+ ||Spoiler text||
63
+
64
+ `inline code`
65
+
66
+ [Visit Google](https://google.com)
67
+
68
+ > This is a quote
69
+ **> Expandable quote
70
+
71
+ \`\`\`javascript
72
+ console.log("Hello World");
73
+ \`\`\`
74
+ `;
75
+
76
+ const html = markdownToHtml(markdown);
77
+ console.log(html);
78
+ ```
79
+
80
+ ### Headings with Custom Symbol
81
+
82
+ ```javascript
83
+ import { createConverter } from 'telegram-md2html';
84
+
85
+ // Custom symbol for headings
86
+ const converter = createConverter({
87
+ headingSymbol: '📌' // or '▎' (default), '⚡', '🔹', etc.
88
+ });
89
+
90
+ const html = converter.convert('## Important Title');
91
+ // Output: <b>📌 Important Title</b>
92
+
93
+ // No symbol (just bold)
94
+ const blankConverter = createConverter({ headingBlank: true });
95
+ const result = blankConverter.convert('### Subtitle');
96
+ // Output: <b>Subtitle</b>
97
+ ```
98
+
99
+ ### Username Protection
100
+
101
+ ```javascript
102
+ import { markdownToHtml } from 'telegram-md2html';
103
+
104
+ // Underscores in usernames are NOT converted to italic
105
+ const html = markdownToHtml('Hello @my_telegram_bot');
106
+ // Output: Hello @my_telegram_bot (preserved, no italic formatting)
107
+
108
+ // Real italic still works
109
+ const html2 = markdownToHtml('This is *italic* text');
110
+ // Output: This is <i>italic</i> text
111
+ ```
112
+
113
+ ### Advanced Usage with Options
114
+
115
+ ```javascript
116
+ import { createConverter } from 'telegram-md2html';
117
+
118
+ // Create a converter with custom options
119
+ const converter = createConverter({
120
+ escapeHtml: true,
121
+ autoCloseCodeBlocks: true,
122
+ headingSymbol: '🔹',
123
+ linkProcessor: (url, text) =>
124
+ `<a href="\${url}" target="_blank" rel="noopener">\${text}</a>`,
125
+ codeBlockProcessor: (code, language) =>
126
+ `<pre><code class="language-\${language || 'text'}">\${code}</code></pre>`
127
+ });
128
+
129
+ const html = converter.convert('**[Important Link](https://example.com)**');
130
+ ```
131
+
132
+ ## Supported Markdown Syntax
133
+
134
+ | Markdown | HTML Output | Description |
135
+ | --- | --- | --- |
136
+ | `## text` | `<b>▎ text</b>` | Level 2 heading |
137
+ | `### text` | `<b>▎ text</b>` | Level 3 heading |
138
+ | `**text**` | `<b>text</b>` | Bold text |
139
+ | `*text*` or `_text_` | `<i>text</i>` | Italic text |
140
+ | `__text__` | `<u>text</u>` | Underlined text |
141
+ | `~~text~~` | `<s>text</s>` | Strikethrough text |
142
+ | `\|\|text\|\|` | `<span class="tg-spoiler">text</span>` | Spoiler text |
143
+ | `` `code` `` | `<code>code</code>` | Inline code |
144
+ | \`\`\`language\ncode\n\`\`\` | `<pre><code class="language-xxx">code</code></pre>` | Code block |
145
+ | `[text](url)` | `<a href="url">text</a>` | Hyperlink |
146
+ | `> text` | `<blockquote>text</blockquote>` | Blockquote |
147
+ | `**> text**` | `<blockquote expandable>text</blockquote>` | Expandable blockquote |
148
+
149
+ ## API Reference
150
+
151
+ ### `markdownToHtml(text: string, options?: ConvertOptions): string`
152
+
153
+ Main conversion function that converts Telegram-style markdown to HTML.
154
+
155
+ **Parameters:**
156
+ - `text`: The markdown text to convert
157
+ - `options`: Optional conversion options
158
+
159
+ **Returns:** Telegram-compatible HTML string
160
+
161
+ ### `createConverter(options?: ConvertOptions): MarkdownConverter`
162
+
163
+ Creates a converter instance with custom options for reuse.
164
+
165
+ ### ConvertOptions Interface
166
+
167
+ ```typescript
168
+ interface ConvertOptions {
169
+ /** Whether to escape HTML special characters (default: true) */
170
+ escapeHtml?: boolean;
171
+
172
+ /** Whether to auto-close unclosed code blocks (default: true) */
173
+ autoCloseCodeBlocks?: boolean;
174
+
175
+ /** Custom symbol for headings (default: '▎') */
176
+ headingSymbol?: string;
177
+
178
+ /** Whether to show blank (no symbol) for headings (default: false) */
179
+ headingBlank?: boolean;
180
+
181
+ /** Custom link processor function */
182
+ linkProcessor?: (url: string, text: string) => string;
183
+
184
+ /** Custom code block processor function */
185
+ codeBlockProcessor?: (code: string, language?: string) => string;
186
+ }
187
+ ```
188
+
189
+ ## TypeScript Support
190
+
191
+ The library includes full TypeScript definitions. Just import and use:
192
+
193
+ ```typescript
194
+ import { markdownToHtml, ConvertOptions } from 'telegram-md2html';
195
+
196
+ const options: ConvertOptions = {
197
+ escapeHtml: false,
198
+ headingSymbol: '⚡',
199
+ linkProcessor: (url: string, text: string): string => {
200
+ return `<a href="\${url}" class="custom-link">\${text}</a>`;
201
+ }
202
+ };
203
+
204
+ const html: string = markdownToHtml('## TypeScript works!', options);
205
+ ```
206
+
207
+ ## Browser Usage
208
+
209
+ The library can be used in modern browsers:
210
+
211
+ ### Using ES Modules (Recommended)
212
+
213
+ ```html
214
+ <script type="module">
215
+ import { markdownToHtml } from 'https://cdn.jsdelivr.net/npm/telegram-md2html/dist/index.mjs';
216
+
217
+ const html = markdownToHtml('**Hello** from browser!');
218
+ document.getElementById('output').innerHTML = html;
219
+ </script>
220
+ ```
221
+
222
+ ### Using from GitHub
223
+
224
+ ```html
225
+ <script type="module">
226
+ import { markdownToHtml } from 'https://cdn.jsdelivr.net/gh/Soumyadeep765/telegram-md2html@main/dist/index.mjs';
227
+
228
+ const html = markdownToHtml('**Hello** World');
229
+ document.getElementById('output').innerHTML = html;
230
+ </script>
231
+ ```
232
+
233
+ ### Using a CDN
234
+
235
+ ```html
236
+ <script src="https://cdn.jsdelivr.net/npm/telegram-md2html/dist/index.js"></script>
237
+ <script>
238
+ // Available as window.telegramMd2Html
239
+ const html = telegramMd2Html.markdownToHtml('**CDN** Example');
240
+ document.getElementById('output').innerHTML = html;
241
+ </script>
242
+ ```
243
+
244
+ ### Complex Nested Example
245
+
246
+ ```javascript
247
+ const result = markdownToHtml(`
248
+ ## Welcome to our bot!
249
+
250
+ Features:
251
+ • *Easy formatting*
252
+ __Multiple styles__
253
+ • ~~Clean output~~
254
+ • Username @test_bot works fine
255
+
256
+ \`\`\`python
257
+ def greet():
258
+ print("Hello from Python!")
259
+ ```
260
+
261
+ > Remember: **Formatting** makes messages _better_
262
+ **> Click to expand details
263
+ `);
264
+
265
+ console.log(result);
266
+ \`\`\`
267
+
268
+ ## Error Handling
269
+
270
+ The library handles edge cases gracefully:
271
+
272
+ - Unclosed code blocks are automatically closed
273
+ - HTML characters are properly escaped by default
274
+ - Invalid markdown is treated as plain text
275
+ - Nested styles are processed correctly
276
+ - Usernames with underscores are not treated as italic
277
+
278
+ ## Performance
279
+
280
+ The library is optimized for performance:
281
+ - Efficient tokenization algorithm
282
+ - Minimal memory usage
283
+ - No external dependencies
284
+ - Fast parsing even for large documents
285
+
286
+ ## Contributing
287
+
288
+ Contributions are welcome! Here's how you can help:
289
+
290
+ 1. Fork the repository
291
+ 2. Create a feature branch: `git checkout -b feature-name`
292
+ 3. Make your changes
293
+ 4. Add tests for new functionality
294
+ 5. Run tests: `npm test`
295
+ 6. Commit your changes: `git commit -am 'Add feature'`
296
+ 7. Push to the branch: `git push origin feature-name`
297
+ 8. Submit a pull request
298
+
299
+ ### Development Setup
300
+
301
+ ```bash
302
+ # Clone the repository
303
+ git clone https://github.com/Soumyadeep765/telegram-md2html.git
304
+ cd telegram-md2html
305
+
306
+ # Install dependencies
307
+ npm install
308
+
309
+ # Build the library
310
+ npm run build
311
+
312
+ # Run tests
313
+ npm test
314
+
315
+ # Watch mode for development
316
+ npm run dev
317
+ ```
318
+
319
+ ## Testing
320
+
321
+ The library includes comprehensive tests:
322
+
323
+ ```bash
324
+ # Run all tests
325
+ npm test
326
+
327
+ # Run tests with coverage
328
+ npm test -- --coverage
329
+ ```
330
+
331
+ ## License
332
+
333
+ This project is licensed under the **MIT** License
334
+
335
+ ## Support
336
+
337
+ If you find this library useful, please consider:
338
+
339
+ - Starring the repository on GitHub
340
+ - Sharing it with others
341
+ - Reporting issues
342
+ - Suggesting new features
343
+
344
+ ## Changelog
345
+
346
+ ### v1.0.3 (Current)
347
+ - **Fixed**: Username underscore bug - `@username_bot` no longer triggers italic formatting
348
+ - **Added**: Heading support for `##` and `###` with configurable symbol (default: '▎')
349
+ - **Added**: `headingSymbol` and `headingBlank` options for heading customization
350
+ - **Improved**: Italic detection with word boundary checks
351
+ - **Fixed**: Preserved underscores in usernames, file names, and code blocks
352
+ - **Improved**: Better handling of mixed formatting with usernames
353
+
354
+ ### v1.0.2
355
+ - **Improved output formatting**: Removed extra newlines around code blocks and quotes
356
+ - Cleaner HTML output without unnecessary whitespace
357
+ - Better preservation of original markdown formatting
358
+
359
+ ### v1.0.1
360
+ - Initial release
361
+ - Complete Telegram markdown support
362
+ - TypeScript definitions
363
+ - Browser compatibility
364
+ - Custom processor support
365
+
366
+ ## Author
367
+
368
+ **Soumyadeep Das**
369
+ - GitHub: [@Soumyadeep765](https://github.com/Soumyadeep765/telegram-md2html)
370
+ - Email: soumyadeepdas765@gmail.com
371
+
372
+ ## Acknowledgments
373
+
374
+ - Telegram for their excellent Bot API
375
+ - All contributors and users of this library
376
+ - The open source community for inspiration and support
377
+
378
+ ---
379
+
325
380
  **Note**: This library is not affiliated with or endorsed by Telegram.