2
0
mirror of https://github.com/yagop/node-telegram-bot-api synced 2025-08-24 19:08:11 +00:00

Compare commits

..

No commits in common. "master" and "v0.28.0" have entirely different histories.

37 changed files with 2611 additions and 8265 deletions

View File

@ -5,10 +5,9 @@
"new-cap": 0, "new-cap": 0,
"prefer-arrow-callback": 0, "prefer-arrow-callback": 0,
"no-param-reassign": [2,{"props":false}], "no-param-reassign": [2,{"props":false}],
"max-len": [2, 200], "max-len": [2, 150],
"arrow-body-style": 0, "arrow-body-style": 0,
"comma-dangle": 0, "comma-dangle": 0
"indent": ["error", 2]
}, },
"plugins": [ "plugins": [
"mocha" "mocha"

View File

@ -5,7 +5,7 @@ For example, if your PR passes all tests, you would mark the option as so:
Note the 'x' in between the square brackets '[]' Note the 'x' in between the square brackets '[]'
--> -->
- [ ] All tests pass - [ ] All tests pass
- [ ] I have run `npm run doc` - [ ] I have run `npm run gen-doc`
### Description ### Description

2
.gitignore vendored
View File

@ -2,9 +2,7 @@ node_modules
coverage/ coverage/
npm-debug.log npm-debug.log
.package.json .package.json
package-lock.json
output.md output.md
output/ output/
lib/ lib/
lib-doc/ lib-doc/
.DS_Store

View File

@ -1,15 +1,11 @@
language: node_js language: node_js
node_js: node_js:
- "12"
- "10"
- "8" - "8"
- "7"
- "6" - "6"
# - "5"
# create required bash scripts to run builds on pull requests in the future - "4"
# - "0.12"
#script:
# - 'if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then bash ./travis/run_on_pull_requests; fi'
# - 'if [ "$TRAVIS_PULL_REQUEST" = "false" ]; then bash ./travis/run_on_non_pull_requests; fi'
after_success: after_success:
- bash <(curl -s https://codecov.io/bash) - bash <(curl -s https://codecov.io/bash)
cache: cache:

View File

@ -3,422 +3,10 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
This project adheres to [Semantic Versioning](http://semver.org/). This project adheres to [Semantic Versioning](http://semver.org/).
## [0.68.0][0.68.0] - UNRELEASE ## [Unreleased][Unreleased]
1. Support Telegram Bot API 9.1 (@danielperez9430)
* sendChecklist
* editMessageChecklist
* getMyStarBalance
2. Support Telegram Bot API 9.0 (@danielperez9430)
* readBusinessMessage
* deleteBusinessMessages
* setBusinessAccountName
* setBusinessAccountUsername
* setBusinessAccountBio
* setBusinessAccountProfilePhoto
* removeBusinessAccountProfilePhoto
* setBusinessAccountGiftSettings
* getBusinessAccountStarBalance
* transferBusinessAccountStars
* getBusinessAccountGifts
* convertGiftToStars
* upgradeGift
* transferGift
* postStory
* editStory
* deleteStory
* giftPremiumSubscription
3. Support Telegram Bot API 8.2 and 8.3 (@danielperez9430)
* verifyUser
* verifyChat
* removeUserVerification
* removeChatVerification
4. Support Telegram Bot API 8.0 and 8.1
* savePreparedInlineMessage (@IsmailBinMujeeb & @danielperez9430)
* setUserEmojiStatus (@danielperez9430)
* editUserStarSubscription (@danielperez9430)
* getAvailableGifts (@danielperez9430)
* sendGift (@danielperez9430)
5. Support Telegram Bot API 7.10 (@danielperez9430)
* Update: `purchased_paid_media`
6. Support Telegram Bot API 7.6 (@danielperez9430)
* sendPaidMedia
## [0.67.0][0.67.0] - 2024-05-30
1. Support Telegram Bot API 7.4 (@danielperez9430)
* refundStarPayment
## [0.66.0][0.66.0] - 2024-05-03
1. Support Telegram Bot API 7.2 & 7.3 (@danielperez9430)
* getBusinessConnection
* replaceStickerInSet
2. Support for updates: (@danielperez9430)
* business_connection
* business_message
* edited_business_message
* deleted_business_messages
3. Minor fixes: (@danielperez9430)
* getUserChatBoosts
## [0.65.1][0.65.1] - 2024-03-09
1. Support for updates (@danielperez9430)
* message_reaction
* message_reaction_count
* chat_boost
* removed_chat_boost
## [0.65.0][0.65.0] - 2024-02-20
1. Support Telegram Bot API v7.1
* deleteMessages (@Sp3ricka)
* copyMessages (@xjx0106 & @Sp3ricka)
* setMessageReaction (@Sp3ricka)
* forwardMessages (@danielperez9430)
* getUserChatBoosts (@danielperez9430)
2. Minor changes: (@danielperez9430)
* Refactor methods order
* Fix copyMessages & setMessageReaction methods
* Added missing tests
* Fix tests for methods copyMessages & getMyDefaulAdministratorRights
## [0.64.0][0.64.0] - 2023-10-25
1. Replace `request` with a maintained version (@danielperez9430)
* Change `request` to `@cypress/request`
* Change `request-promise` to `@cypress/request-promise`
## [0.63.0][0.63.0] - 2023-08-23
1. Support Telegram Bot API v6.8 (@danielperez9430)
* unpinAllGeneralForumTopicMessages
## [0.62.0][0.62.0] - 2023-03-19
1. Support Telegram Bot API v6.6 & v6.7 (@danielperez9430)
* setMyDescription
* getMyDescription
* setMyShortDescription
* getMyShortDescription
* setCustomEmojiStickerSetThumbnail
* setStickerSetTitle
* deleteStickerSet
* setStickerEmojiList
* setStickerKeywords
* setStickerMaskPosition
## [0.61.0][0.61.0] - 2022-12-30
1. Support Telegram Bot API v6.4 (@danielperez9430)
* editGeneralForumTopic
* closeGeneralForumTopic
* reopenGeneralForumTopic
* hideGeneralForumTopic
* unhideGeneralForumTopic
2. Minor changes: (@danielperez9430)
* The parameters `name` and `icon_custom_emoji_id` of the method `editForumTopic` are now optional.
* Fix add thumb in sendAudio, sendVideo and sendVideoNote
* Fix getMyCommands and setMyCommands
* Suggested tip amounts stringify in sendInvoice
## [0.60.0][0.60.0] - 2022-10-06
1. Support Telegram Bot API v6.3 (@danielperez9430)
* createForumTopic
* closeForumTopic
* reopenForumTopic
* deleteForumTopic
* unpinAllForumTopicMessages
* getForumTopicIconStickers
2. Fix test getMyDefaultAdministratorRights (@danielperez9430)
3. Fix parse entities - (@toniop99)
## [0.59.0][0.59.0] - 2022-08-15
1. Support Telegram Bot API v6.2 (@danielperez9430)
* getCustomEmojiStickers
2. Support test enviroment (@tinsaeDev & @kamikazechaser)
3. Remove dependencies: (@danielperez9430)
* Remove *bluebird* => Use NodeJS Native Promises
* Remove *depd* => Use node native deprecate util for warnings
* Remove contributor dev dependency and add list of contributors in the readme
4. Remove legacy methods: (@danielperez9430)
* getChatMembersCount
* kickChatMember
5. Docs: (@danielperez9430)
* Update the docs of the methods
* Order methods follow the Telegram bot API docs in src/telegram.js
* Update README
6. Fix: (@danielperez9430)
* addStickerToSet() -> Allow to send tgs_sticker + webm_sticker
* Remove mandatory param “start_parameter” from sendInvoice, because in the docs is a optional param
* getStickerSet test fix deprecated response value "contains_masks" change to "sticker_type"
* Fix some other tests
7. New Test: (@danielperez9430)
* deleteStickerFromSet
* setStickerPositionInSet
* getCustomEmojiStickers
## [0.58.0][0.58.0] - 2022-06-22
1. Support Bot API v6.1: (@danielperez9430)
* Add method *createInvoiceLink()*
2. Support for setStickerSetThumb (@elihaidv)
3. Add new test (@danielperez9430)
* createInvoiceLink
4. Test fixes (@danielperez9430)
* sendVideoNote
* createNewStickerSet
* setStickerSetThumb
* getChatMenuButton
* setWebHook
5. Bug fixes (@danielperez9430)
* answerWebAppQuery
* Support for send thumb in sendAudio
## [0.57.0][0.57.0] - 2022-04-23
Added:
1. Support Bot API v6: (@danielperez9430)
* Add method *setChatMenuButton()*
* Add method *getChatMenuButton()*
* Add method *setMyDefaultAdministratorRights()*
* Add method *getMyDefaultAdministratorRights()*
* Add method *answerWebAppQuery()*
* Renamed the fields voice_chat_scheduled, voice_chat_started, voice_chat_ended, and voice_chat_participants_invited to video_chat_scheduled, video_chat_started, video_chat_ended, and video_chat_participants_invited
Tests:
* answerWebAppQuery
* setChatMenuButton
* getChatMenuButton
* setMyDefaultAdministratorRights
* getMyDefaultAdministratorRights
## [0.56.0][0.56.0] - 2021-12-07
Added:
1. Support Bot API v5.5: (@danielperez9430)
* Add method *banChatSenderChat()*
* Add method *unbanChatSenderChat()*
Fixes:
* Tests for support with new invite link format
## [0.55.0][0.55.0] - 2021-11-06
Added:
1. Support Bot API v5.4: (@danielperez9430)
* Add method *approveChatJoinRequest()*
* Add method *declineChatJoinRequest()*
* Add support for new updates:
* *chat_join_request*
Fixes:
* Method *editMessageMedia*: Now you can send a local file (`"attach://" + filePatch`)
## [0.54.0][0.54.0] - 2021-06-29
Added:
1. Support Bot API v5.3: (@danielperez9430)
* Add method *deleteMyCommands()*
* Add method *banChatMember()*
* Add method *getChatMemberCount()*
New Test:
* deleteMyCommands
* banChatMember
* getChatMemberCount
Deprecated:
* Method *kickChatMember()*
* Method *getChatMembersCount()*
## [0.53.0][0.53.0] - 2021-04-26
Added:
1. Support Bot API v5.2:(@danielperez9430)
* Add support for new messageTypes:
* *voice_chat_scheduled*
## [0.52.0][0.52.0] - 2021-03-20
Added:
1. Support Bot API v5.1: (by @danielperez9430)
* Add method *createChatInviteLink()*
* Add method *editChatInviteLink()*
* Add method *revokeChatInviteLink()*
* Add support for new messageTypes:
* *voice_chat_started*
* *voice_chat_ended*
* *voice_chat_participants_invited*
* *message_auto_delete_timer_changed*
* *chat_invite_link*
* *chat_member_updated*
* Add support for new updates:
* *my_chat_member*
* *chat_member*
New Test: (by @danielperez9430)
* createChatInviteLink
* editChatInviteLink
* revokeChatInviteLink
## [0.51.0][0.51.0] - 2020-11-04
Added:
1. Support Bot API v5.0: (by @danielperez9430)
* Add method *copyMessage()*
* Add method *unpinAllChatMessages()*
* Add method *close()*
* Add method *logOut()*
Changed: (by @danielperez9430)
* Remove trailing-spaces
* Fix Bugs in Test
New Test: (by @danielperez9430)
* copyMessage
* unpinAllChatMessages
## [0.50.0][0.50.0] - 2020-05-2020
Added:
1. Support Bot API v4.8: (by @danielperez9430)
* Add methods: *sendDice()*
2. Support Bot API v4.7: (by @danielperez9430)
* Add methods: *getMyCommands()*,*setMyCommands()*
3. Support Bot API v4.5: (by @danielperez9430)
* Add methods: *setChatAdministratorCustomTitle()*
4. Support Bot API v4.4: (by @danielperez9430)
* Add methods: *setChatPermissions()*
5. Support for poll_answer (by @JieJiSS)
6. Add request options in file stream (by @zhangpanyi )
Changed: (by @danielperez9430)
* New message type: *dice*
* Fix Bugs in tests
* Fix regex compare (by @ledamint)
* Fix listening for error events when downloading files (by @Kraigo)
New Test: (by @danielperez9430)
* sendDice
* getMyCommands
* setMyCommands
* setChatAdministratorCustomTitle
* setChatPermissions
## [0.40.0][0.40.0] - 2019-05-04
Added:
1. Support Bot API v4.2: (by @kamikazechaser)
* Add methods: *TelegramBot#sendPoll()*, *TelegramBot#stopPoll()*
* Support events: *poll*
2. Support Bot API v4.0: (by @kamikazechaser)
* Add methods: *TelegramBot#editMessageMedia()*, *TelegramBot#sendAnimation()*
* Support new message types: *passport_data*, *animation*
* * *
## [0.30.0][0.30.0] - 2017-12-21
Added:
1. Support Bot API v3.5: (by @GochoMugo)
* Allow `provider_data` parameter in *TelegramBot#sendInvoice*
* Add method *TelegramBot#sendMediaGroup()*
2. Support Bot API v3.4: (by @kamikazechaser)
* Add methods *TelegramBot#editMessageLiveLocation*, *TelegramBot#stopMessageLiveLocation* (#439)
* Add methods *TelegramBot#setChatStickerSet*, *TelegramBot#deleteChatStickerSet* (#440)
3. Add methods:
* *TelegramBot#getFileStream* (#442) (by @GochoMugo, requested-by @Xaqron)
4. Add options to *TelegramBot#stopPolling()* (by @GochoMugo)
5. Add `metadata` argument in `message` event (and friends e.g. `text`, `audio`, etc.) (#409) (by @jlsjonas, @GochoMugo)
6. Add forward-compatibility i.e. support future additional Telegram options (by @GochoMugo)
7. Add support for Node.js v9 (by @GochoMugo)
8. Document *TelegramBot.errors*, *TelegramBot.messageTypes* (by @GochoMugo)
Changed:
1. Update *TelegramBot#answerCallbackQuery()* signature (by @GochoMugo)
2. Improve default error logging of `polling_error` and `webhook_error` (#377)
3. Update dependencies
Deprecated:
1. Sending files: *(See [usage guide][usage-sending-files])* (by @hufan-akari, @GochoMugo)
* Error will **not** be thrown if `Buffer` is used and file-type could **not** be detected.
* Filename will **not** be set to `data.${ext}` if `Buffer` is used
* Content type will **not** default to `null` or `undefined`
Fixed:
1. Fix the offset infinite loop bug (#265, #36) (by @GochoMugo)
2. Fix game example (#449, #418) (by @MCSH)
* * *
## [0.29.0][0.29.0] - 2017-10-22
Added:
1. Add Bot API v3.2 methods:
* (#429) *TelegramBot#getStickerSet* (by @CapacitorSet, @LibertyLocked)
* (#430) *TelegramBot#uploadStickerFile* (by @CapacitorSet)
* *TelegramBot#createNewStickerSet*, *TelegramBot#addStickerToSet*, *TelegramBot#setStickerPositionInSet*, *TelegramBot#deleteStickerFromSet* (by @GochoMugo)
2. Supports API v3.3
Deprecated:
1. Auto-enabling Promise cancellation (#319) (by @GochoMugo)
* * * * * *
@ -427,10 +15,10 @@ Deprecated:
Added: Added:
1. (#361) Support Bot API v3.1 (by @Lord-Protector, @kamikazechaser) 1. (#361) Support Bot API v3.1 (by @Lord-Protector, @kamikazechaser)
2. (#332) Support Bot API v3.0 (by @kamikazechaser, @GochoMugo) 1. (#332) Support Bot API v3.0 (by @kamikazechaser, @GochoMugo)
3. Add *TelegramBot#removeTextListener()* (by @GochoMugo) 1. Add *TelegramBot#removeTextListener()* (by @GochoMugo)
4. (#342) Add game example (by @MCSH) 1. (#342) Add game example (by @MCSH)
5. (#315) List 'bot-brother' project in community section in README (by @saeedhei) 1. (#315) List 'bot-brother' project in community section in README (by @saeedhei)
Changed: Changed:
@ -439,8 +27,9 @@ Changed:
Fixed: Fixed:
1. (#325) Fix global regexp state reset (by @Sirius-A) 1. (#325) Fix global regexp state reset (by @Sirius-A)
2. (#363) Fix download file path on windows (by @kucherenkovova) 1. (#363) Fix download file path on windows (by @kucherenkovova)
3. (#346) Fix anchor webhook link in docs (by @Coac) 1. (#346) Fix anchor webhook link in docs (by @Coac)
* * * * * *
@ -450,13 +39,15 @@ Added:
1. (#287) Add Express WebHook example (by @kamikazechaser) 1. (#287) Add Express WebHook example (by @kamikazechaser)
Fixed: Fixed:
1. (#291) Improve docs (by @preco21) 1. (#291) Improve docs (by @preco21)
2. (#298) Fix running on Node v5 (by @jehy) 1. (#298) Fix running on Node v5 (by @jehy)
3. (#307) Fix badge links in README (by @JaakkoLipsanen) 1. (#307) Fix badge links in README (by @JaakkoLipsanen)
4. Fix defaulting value of `options.polling.params.timeout` (by @GochoMugo) 1. Fix defaulting value of `options.polling.params.timeout` (by @GochoMugo)
5. Fix typos in Github issue template (by @GochoMugo, requested-by @GingerPlusPlus) 1. Fix typos in Github issue template (by @GochoMugo, requested-by @GingerPlusPlus)
* * * * * *
@ -465,19 +56,19 @@ Fixed:
Added: Added:
1. Add constructor options: 1. Add constructor options:
* (#243) `options.polling.params` (by @GochoMugo, requested-by @sidelux) * (#243) `options.polling.params` (by @GochoMugo, requested-by @sidelux)
2. Add methods: 1. Add methods:
* (#74) *TelegramBot#removeReplyListener()* (by @githugger) * (#74) *TelegramBot#removeReplyListener()* (by @githugger)
3. (#283) Add proper error handling (by @GochoMugo) 1. (#283) Add proper error handling (by @GochoMugo)
4. (#272) Add health-check endpoint (by @mironov) 1. (#272) Add health-check endpoint (by @mironov)
* `options.webHook.healthEndpoint` * `options.webHook.healthEndpoint`
5. (#152) Add test for TelegramBot#sendDocument() using 'fileOpts' 1. (#152) Add test for TelegramBot#sendDocument() using 'fileOpts'
param (by @evolun) param (by @evolun)
6. Document `options.webHook.host` (by @GochoMugo) 1. Document `options.webHook.host` (by @GochoMugo)
7. (#264) Add Bot API version to README (by @kamikazechaser) 1. (#264) Add Bot API version to README (by @kamikazechaser)
8. Add examples: 1. Add examples:
- (#271) WebHook on Heroku (by @TheBeastOfCaerbannog) - (#271) WebHook on Heroku (by @TheBeastOfCaerbannog)
- (#274) WebHook on Zeit Now (by @Ferrari) - (#274) WebHook on Zeit Now (by @Ferrari)
Changed: Changed:
@ -496,6 +87,7 @@ Fixed:
polling (by @GochoMugo, reported-by @dcparga) polling (by @GochoMugo, reported-by @dcparga)
1. Fix links in documentation (by @Ni2c2k) 1. Fix links in documentation (by @Ni2c2k)
* * * * * *
## [0.26.0][0.26.0] - 2017-01-20 ## [0.26.0][0.26.0] - 2017-01-20
@ -503,32 +95,32 @@ Fixed:
Added: Added:
1. Add *TelegramBot* constructor options: 1. Add *TelegramBot* constructor options:
* `options.https` * `options.https`
* `options.baseApiUrl` * `options.baseApiUrl`
* `options.filepath` * `options.filepath`
2. Add methods: 1. Add methods:
* *TelegramBot#stopPolling()* * *TelegramBot#stopPolling()*
* *TelegramBot#isPolling()* * *TelegramBot#isPolling()*
* *TelegramBot#openWebHook()* * *TelegramBot#openWebHook()*
* *TelegramBot#closeWebHook()* * *TelegramBot#closeWebHook()*
* *TelegramBot#hasOpenWebHook()* * *TelegramBot#hasOpenWebHook()*
* *TelegramBot#deleteWebHook()* * *TelegramBot#deleteWebHook()*
* *TelegramBot#getWebHookInfo()* * *TelegramBot#getWebHookInfo()*
Changed: Changed:
1. Use POST requests by default 1. Use POST requests by default
2. Ensure all relevant methods return Promises 1. Ensure all relevant methods return Promises
3. Document auto-deletion of webhook during polling 1. Document auto-deletion of webhook during polling
4. Deprecate support for Node.js v0.12 1. Deprecate support for Node.js v0.12
5. Fix consistency of methods signatures 1. Fix consistency of methods signatures
6. Rename *TelegramBot#initPolling()* to *TelegramBot#startPolling()* 1. Rename *TelegramBot#initPolling()* to *TelegramBot#startPolling()*
* Deprecate *TelegramBot#initPolling()* * Deprecate *TelegramBot#initPolling()*
Fixed: Fixed:
1. Handle error during formatting `formData` 1. Handle error during formatting `formData`
2. Fix ES6 syntax 1. Fix ES6 syntax
*Credits/Blames: Unless explicitly stated otherwise, above work was *Credits/Blames: Unless explicitly stated otherwise, above work was
done by @GochoMugo* done by @GochoMugo*
@ -540,26 +132,22 @@ done by @GochoMugo*
Added: Added:
1. Supports the API v2.3 updates (by @kamikazechaser) 1. Supports the API v2.3 updates (by @kamikazechaser)
2. Add *TelegramBot* constructor option: 1. Add *TelegramBot* constructor option:
* `options.request`: proxy extra request options (by @tarmolov) * `options.request`: proxy extra request options (by @tarmolov)
* `options.onlyFirstMatch` (by @GingerPlusPlus) * `options.onlyFirstMatch` (by @GingerPlusPlus)
3. Add methods: 1. Add methods:
* *TelegramBot#sendVenue()* (by Tketa) * *TelegramBot#sendVenue()* (by Tketa)
* *TelegramBot#sendContact()* (by @GochoMugo) * *TelegramBot#sendContact()* (by @GochoMugo)
* *TelegramBot#getGameHighScores()* (by @jishnu7) * *TelegramBot#getGameHighScores()* (by @jishnu7)
Fixed: Fixed:
1. Fix request performance issue (by @preco21) 1. Fix request performance issue (by @preco21)
2. Fix typos (by oflisback) 1. Fix typos (by oflisback)
[usage-sending-files]:https://github.com/yagop/node-telegram-bot-api/blob/master/doc/usage.md#sending-files-options
[0.25.0]:https://github.com/yagop/node-telegram-bot-api/releases/tag/v0.25.0 [0.25.0]:https://github.com/yagop/node-telegram-bot-api/releases/tag/v0.25.0
[0.26.0]:https://github.com/yagop/node-telegram-bot-api/releases/tag/v0.26.0 [0.26.0]:https://github.com/yagop/node-telegram-bot-api/releases/tag/v0.26.0
[0.27.0]:https://github.com/yagop/node-telegram-bot-api/releases/tag/v0.27.0 [0.27.0]:https://github.com/yagop/node-telegram-bot-api/releases/tag/v0.27.0
[0.27.1]:https://github.com/yagop/node-telegram-bot-api/releases/tag/v0.27.1 [0.27.1]:https://github.com/yagop/node-telegram-bot-api/releases/tag/v0.27.1
[0.28.0]:https://github.com/yagop/node-telegram-bot-api/releases/tag/v0.28.0 [Unreleased]:https://github.com/yagop/node-telegram-bot-api/compare/v0.27.1...master
[0.29.0]:https://github.com/yagop/node-telegram-bot-api/releases/tag/v0.29.0
[0.30.0]:https://github.com/yagop/node-telegram-bot-api/releases/tag/v0.30.0
[Unreleased]:https://github.com/yagop/node-telegram-bot-api/compare/v0.30.0...master

View File

@ -10,29 +10,18 @@ Before proceeding any further, read the following documents:
## General Information ## General Information
### Creating a Github issue:
1. Ensure that your issue does **not** already exist. [Do a search](https://github.com/yagop/node-telegram-bot-api/issues).
2. Browse through [StackOverflow](https://stackoverflow.com/search?q=telegram+nodejs) and other similar platforms.
3. Should you open your issue, ensure you use the English language for
the wider target audience.
4. Be patient please.
### Updating API Reference i.e. generating `doc/api.md` ### Updating API Reference i.e. generating `doc/api.md`
Run: Run:
```bash ```bash
$ npm run doc $ npm run gen-doc
``` ```
### Running tests ### Running tests
Please read `test/README.md` for more information. Please read `test/README.md` for more information.
### Transpiling ES2015 for older Node.js versions ### Transpiling ES2015 for older Node.js versions
We use babel to transpile the code: We use babel to transpile the code:

View File

@ -1,6 +1,6 @@
The MIT License (MIT) The MIT License (MIT)
Copyright (c) 2019 Yago Copyright (c) 2017 Yago
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@ -1,34 +1,22 @@
<h1 align="center">Node.js Telegram Bot API</h1> # Node.js Telegram Bot API
<div align="center"> [![Bot API](https://img.shields.io/badge/Bot%20API-v.3.1.0-00aced.svg)](https://core.telegram.org/bots/api)
[![Build Status](https://travis-ci.org/yagop/node-telegram-bot-api.svg?branch=master)](https://travis-ci.org/yagop/node-telegram-bot-api)
[![Build status](https://ci.appveyor.com/api/projects/status/ujko6bsum3g5msjh/branch/master?svg=true)](https://ci.appveyor.com/project/yagop/node-telegram-bot-api/branch/master)
[![Coverage Status](https://coveralls.io/repos/yagop/node-telegram-bot-api/badge.svg?branch=master)](https://coveralls.io/r/yagop/node-telegram-bot-api?branch=master)
[![bitHound Score](https://www.bithound.io/github/yagop/node-telegram-bot-api/badges/score.svg)](https://www.bithound.io/github/yagop/node-telegram-bot-api)
[![https://telegram.me/node_telegram_bot_api](https://img.shields.io/badge/💬%20Telegram-node__telegram__bot__api-blue.svg)](https://telegram.me/node_telegram_bot_api)
[![https://telegram.me/Yago_Perez](https://img.shields.io/badge/💬%20Telegram-Yago__Perez-blue.svg)](https://telegram.me/Yago_Perez)
Node.js module to interact with the official [Telegram Bot API](https://core.telegram.org/bots/api). Node.js module to interact with official [Telegram Bot API](https://core.telegram.org/bots/api). A bot token is needed, to obtain one, talk to [@botfather](https://telegram.me/BotFather) and create a new bot.
## Install
[![Bot API](https://img.shields.io/badge/Bot%20API-v.9.0-00aced.svg?style=flat-square&logo=telegram)](https://core.telegram.org/bots/api) ```bash
[![npm package](https://img.shields.io/npm/v/node-telegram-bot-api?logo=npm&style=flat-square)](https://www.npmjs.org/package/node-telegram-bot-api) npm install --save node-telegram-bot-api
[![Coverage Status](https://img.shields.io/codecov/c/github/yagop/node-telegram-bot-api?style=flat-square&logo=codecov)](https://codecov.io/gh/yagop/node-telegram-bot-api)
[![https://telegram.me/node_telegram_bot_api](https://img.shields.io/badge/💬%20Telegram-Channel-blue.svg?style=flat-square)](https://telegram.me/node_telegram_bot_api)
[![https://t.me/+_IC8j_b1wSFlZTVk](https://img.shields.io/badge/💬%20Telegram-Group-blue.svg?style=flat-square)](https://t.me/+_IC8j_b1wSFlZTVk)
[![https://telegram.me/Yago_Perez](https://img.shields.io/badge/💬%20Telegram-Yago_Perez-blue.svg?style=flat-square)](https://telegram.me/Yago_Perez)
</div>
## 📦 Install
```sh
npm i node-telegram-bot-api
``` ```
<br/> ## Usage
> ✍️ **Note:** If you use Typescript you can install this package that contains type definitions for this library
>```sh
>npm install --save-dev @types/node-telegram-bot-api
>```
## 🚀 Usage
```js ```js
const TelegramBot = require('node-telegram-bot-api'); const TelegramBot = require('node-telegram-bot-api');
@ -62,58 +50,39 @@ bot.on('message', (msg) => {
}); });
``` ```
## 📚 Documentation ## Documentation
* [Usage][usage] * [Usage][usage]
* [Examples][examples] * [Examples][examples]
* [Tutorials][tutorials] * [Tutorials][tutorials]
* [Help Information][help] * [Help Information][help]
* API Reference: ([api-release](../master/doc/api.md) / [development][api-dev] / [experimental][api-experimental]) * API Reference ([release][api-release] / [development][api-dev] / [experimental][api-experimental])
* [Contributing to the Project][contributing] * [Contributing to the Project][contributing]
* [Experimental Features][experimental] * [Experimental Features][experimental]
_**Note**: Development is done against the **development** branch. _**Note**: Development is done against the **master** branch.
Code for the latest release resides on the **master** branch. Code for the latest release resides on the **release** branch
Experimental features reside on the **experimental** branch._ Experimental features reside on the **experimental** branch._
## 💭 Community ## Community
We thank all the developers in the Open-Source community who continuously
take their time and effort in advancing this project.
See our [list of contributors][contributors].
We have a [Telegram channel][tg-channel] where we post updates on We have a [Telegram channel][tg-channel] where we post updates on
the Project. Head over and subscribe! the Project. Head over and subscribe!
We also have a [Telegram group][tg-group] to discuss issues related to this library. Some things built using this library, and might interest you:
Some things built using this library that might interest you: * [tgfancy](https://github.com/GochoMugo/tgfancy): A Fancy, Higher-Level Wrapper for Telegram Bot API
* [tgfancy](https://github.com/GochoMugo/tgfancy): A fancy, higher-level wrapper for Telegram Bot API
* [node-telegram-bot-api-middleware](https://github.com/idchlife/node-telegram-bot-api-middleware): Middleware for node-telegram-bot-api * [node-telegram-bot-api-middleware](https://github.com/idchlife/node-telegram-bot-api-middleware): Middleware for node-telegram-bot-api
* [teleirc](https://github.com/FruitieX/teleirc): A simple Telegram ↔ IRC gateway * [teleirc](https://github.com/FruitieX/teleirc): A simple Telegram ↔ IRC gateway
* [bot-brother](https://github.com/SerjoPepper/bot-brother): Node.js library to help you easily create telegram bots * [bot-brother](https://github.com/SerjoPepper/bot-brother): Node.js library to help you easily create telegram bots
* [redbot](https://github.com/guidone/node-red-contrib-chatbot): A Node-RED plugin to create telegram bots visually * [redbot](https://github.com/guidone/node-red-contrib-chatbot): A Node-RED plugin to create telegram bots visually
* [node-telegram-keyboard-wrapper](https://github.com/alexandercerutti/node-telegram-keyboard-wrapper): A wrapper to improve keyboards structures creation through a more easy-to-see way (supports Inline Keyboards, Reply Keyboard, Remove Keyboard and Force Reply)
* [beetube-bot](https://github.com/kodjunkie/beetube-bot): A telegram bot for music, videos, movies, EDM tracks, torrent downloads, files and more.
* [telegram-inline-calendar](https://github.com/VDS13/telegram-inline-calendar): Date and time picker and inline calendar for Node.js telegram bots.
* [telegram-captcha](https://github.com/VDS13/telegram-captcha): Telegram bot to protect Telegram groups from automatic bots.
## 👥 Contributors
<p align="center">
<a href="https://github.com/yagop/node-telegram-bot-api/graphs/contributors">
<img src="https://contrib.rocks/image?repo=yagop/node-telegram-bot-api" />
</a>
</p>
## License ## License
**The MIT License (MIT)** **The MIT License (MIT)**
Copyright © 2019 Yago Copyright (c) 2017 Yago
[usage]:https://github.com/yagop/node-telegram-bot-api/tree/master/doc/usage.md [usage]:https://github.com/yagop/node-telegram-bot-api/tree/master/doc/usage.md
[examples]:https://github.com/yagop/node-telegram-bot-api/tree/master/examples [examples]:https://github.com/yagop/node-telegram-bot-api/tree/master/examples
@ -123,7 +92,5 @@ Copyright © 2019 Yago
[api-release]:https://github.com/yagop/node-telegram-bot-api/tree/release/doc/api.md [api-release]:https://github.com/yagop/node-telegram-bot-api/tree/release/doc/api.md
[api-experimental]:https://github.com/yagop/node-telegram-bot-api/tree/experimental/doc/api.md [api-experimental]:https://github.com/yagop/node-telegram-bot-api/tree/experimental/doc/api.md
[contributing]:https://github.com/yagop/node-telegram-bot-api/tree/master/CONTRIBUTING.md [contributing]:https://github.com/yagop/node-telegram-bot-api/tree/master/CONTRIBUTING.md
[contributors]:https://github.com/yagop/node-telegram-bot-api/graphs/contributors
[experimental]:https://github.com/yagop/node-telegram-bot-api/tree/master/doc/experimental.md [experimental]:https://github.com/yagop/node-telegram-bot-api/tree/master/doc/experimental.md
[tg-channel]:https://telegram.me/node_telegram_bot_api [tg-channel]:https://telegram.me/node_telegram_bot_api
[tg-group]:https://t.me/+nc3A9Hs1S81mYzdk

View File

@ -16,4 +16,3 @@
[getUpdates-v0.25.0]:https://github.com/yagop/node-telegram-bot-api/tree/4e5a493cadfaad5589a8d79e55d9e0d103000ce4#TelegramBot+getUpdates [getUpdates-v0.25.0]:https://github.com/yagop/node-telegram-bot-api/tree/4e5a493cadfaad5589a8d79e55d9e0d103000ce4#TelegramBot+getUpdates
[getUserProfilePhotos-v0.25.0]:https://github.com/yagop/node-telegram-bot-api/tree/4e5a493cadfaad5589a8d79e55d9e0d103000ce4#TelegramBot+getUserProfilePhotos [getUserProfilePhotos-v0.25.0]:https://github.com/yagop/node-telegram-bot-api/tree/4e5a493cadfaad5589a8d79e55d9e0d103000ce4#TelegramBot+getUserProfilePhotos
[answerCallbackQuery-v0.27.1]:https://github.com/yagop/node-telegram-bot-api/blob/v0.27.1/doc/api.md#TelegramBot+answerCallbackQuery [answerCallbackQuery-v0.27.1]:https://github.com/yagop/node-telegram-bot-api/blob/v0.27.1/doc/api.md#TelegramBot+answerCallbackQuery
[answerCallbackQuery-v0.29.0]:https://github.com/yagop/node-telegram-bot-api/blob/v0.29.0/doc/api.md#TelegramBot+answerCallbackQuery

3285
doc/api.md

File diff suppressed because it is too large Load Diff

View File

@ -29,8 +29,6 @@ Sources:
1. [How do I run my bot behind a proxy?](#proxy) 1. [How do I run my bot behind a proxy?](#proxy)
1. [Can you add feature X to the library?](#new-feature) 1. [Can you add feature X to the library?](#new-feature)
1. [Is this scalable?](#scalable) 1. [Is this scalable?](#scalable)
1. [How do I listen for messages in a chat group?](#messages-in-chat)
1. [How do I know when a user blocks the bot?](#blocked-bot)
<a name="gifs"></a> <a name="gifs"></a>
### How do I send GIFs? ### How do I send GIFs?
@ -69,9 +67,7 @@ Sources:
<a name="error-meanings"></a> <a name="error-meanings"></a>
### What does this error mean? ### What does this error mean?
* [502 Bad Gateway](https://github.com/yagop/node-telegram-bot-api/issues/377) *Not done. PRs welcome!*
*Not complete. PRs welcome!*
Sources: Sources:
@ -110,7 +106,6 @@ Sources:
* Issue [#122](https://github.com/yagop/node-telegram-bot-api/issues/122) * Issue [#122](https://github.com/yagop/node-telegram-bot-api/issues/122)
* Issue [#253](https://github.com/yagop/node-telegram-bot-api/issues/253) * Issue [#253](https://github.com/yagop/node-telegram-bot-api/issues/253)
* Issue [#766](https://github.com/yagop/node-telegram-bot-api/issues/766)
<a name="new-feature"></a> <a name="new-feature"></a>
### Can you add feature X to the library? ### Can you add feature X to the library?
@ -130,22 +125,4 @@ Sources:
* Issue [#219](https://github.com/yagop/node-telegram-bot-api/issues/219) * Issue [#219](https://github.com/yagop/node-telegram-bot-api/issues/219)
<a name="messages-in-chat"></a>
### How do I listen for messages in a chat group?
*Not done. PRs welcome!*
Sources:
* Issue [#304](https://github.com/yagop/node-telegram-bot-api/issues/304)
<a name="blocked-bot"></a>
### How do I know when a user blocks the bot?
*Not done. PRs welcome!*
Sources:
* Issue [#273](https://github.com/yagop/node-telegram-bot-api/issues/273)
[questions]:https://github.com/yagop/node-telegram-bot-api/issues?utf8=%E2%9C%93&q=is%3Aissue%20label%3Aquestion%20 [questions]:https://github.com/yagop/node-telegram-bot-api/issues?utf8=%E2%9C%93&q=is%3Aissue%20label%3Aquestion%20

View File

@ -1,12 +1,5 @@
# Tutorials # Tutorials
* [node-telegram-bot-api-tutorial by @hosein2398](https://github.com/hosein2398/node-telegram-bot-api-tutorial) * [node-telegram-bot-api-tutorial by @hosein2398](https://github.com/hosein2398/node-telegram-bot-api-tutorial)
* [node-telegram-bot-api-persian-language by @saeedhei](https://github.com/saeedhei/node-telegram-bot-api-persian-language)
* [Node.JS: Делаем своего Telegram бота [RUS]](https://archakov.im/post/telegram-bot-on-nodejs)
* [YouTube: Пишем Telegram бота на NodeJS [RUS]](https://www.youtube.com/watch?v=RS1nmDMf69U&list=PL6AOr-PZtK-mM2QC1ixyfa5CtJZGK61aN)
* [Node.jsでTelegramのチャットボットを作る - Qiita](https://qiita.com/neetshin/items/0e2f6fa3ade41adb77bc)
* [Guía: Creación de bots de Telegram en Nodejs [ES]](https://tecnonucleous.com/creacion-de-bots-de-telegram-en-nodejs/)
* [node-telegram-bot-api-tutorial:a telegram bot helper to send templates by sms](https://github.com/vito2005/chatManagerTelegramBot)
* [Telegram bot using blockchain services](https://ilanolkies.com/post/Telegram-bot-using-blockchain-services)
* [How to set webhooks using express local server and NGROK](https://github.com/leobloise/node-telegram-bot-api-wb-tutorial)
> Send a PR with useful links **not** listed above > Send a PR with useful links **not** listed above

View File

@ -1,31 +1,24 @@
# Usage # Usage
- [Usage](#usage) * [Events](#events)
- [Events](#events) * [WebHooks](#webhooks)
- [WebHooks](#webhooks) * [Sending files](#sending-files)
- [Sending files](#sending-files) * [Error handling](#error-handling)
- [File Options (metadata)](#file-options-metadata)
- [Performance Issue](#performance-issue)
- [Error handling](#error-handling)
- [Polling errors](#polling-errors)
- [WebHook errors](#webhook-errors)
<a name="events"></a> <a name="events"></a>
## Events ## Events
*TelegramBot* is an [EventEmitter](https://nodejs.org/api/events.html#events_class_eventemitter) *TelegramBot* is an event-emitter that emits the following events:
that emits the following events:
1. `message`: Received a new incoming [Message][message] of any kind 1. `message`: Received a new incoming [Message][message] of any kind
1. Depending on the properties of the [Message][message], one of these 1. Depending on the properties of the [Message][message], one of these
events may **ALSO** be emitted: `text`, `audio`, `document`, `photo`, events will **ALSO** be emitted: `text`, `audio`, `document`, `photo`,
`sticker`, `video`, `voice`, `contact`, `location`, `sticker`, `video`, `voice`, `contact`, `location`,
`new_chat_members`, `left_chat_member`, `new_chat_title`, `new_chat_members`, `left_chat_member`, `new_chat_title`,
`new_chat_photo`, `delete_chat_photo`, `group_chat_created`, `new_chat_photo`, `delete_chat_photo`, `group_chat_created`,
`game`, `pinned_message`, `poll`, `dice`, `migrate_from_chat_id`, `migrate_to_chat_id`, `game`, `pinned_message`, `migrate_from_chat_id`, `migrate_to_chat_id`,
`channel_chat_created`, `supergroup_chat_created`, `channel_chat_created`, `supergroup_chat_created`,
`successful_payment`, `invoice`, `video_note` `successful_payment`, `invoice`, `video_note`
1. **Arguments**: `message` ([Message][message]), `metadata` (`{ type?:string }`)
1. `new_chat_participant`, `left_chat_participant` are **deprecated** 1. `new_chat_participant`, `left_chat_participant` are **deprecated**
1. `callback_query`: Received a new incoming [Callback Query][callback-query] 1. `callback_query`: Received a new incoming [Callback Query][callback-query]
1. `inline_query`: Received a new incoming [Inline Query][inline-query] 1. `inline_query`: Received a new incoming [Inline Query][inline-query]
@ -39,14 +32,8 @@ that emits the following events:
1. `edited_channel_post_caption` 1. `edited_channel_post_caption`
1. `shipping_query`: Received a new incoming shipping query 1. `shipping_query`: Received a new incoming shipping query
1. `pre_checkout_query`: Received a new incoming pre-checkout query 1. `pre_checkout_query`: Received a new incoming pre-checkout query
1. `poll`: Received a new incoming poll 1. `polling_error`: Error occurred during polling. See [polling errors](#polling-errors).
2. `poll_answer`: A user has changed their answer in a non-anonymous poll (Only polls sent by the bot) 1. `webhook_error`: Error occurred handling a webhook request. See [webhook errors](#webhook-errors).
3. `chat_member`: A chat member's status was updated in a chat
4. `my_chat_member`: The bot's chat member status was updated in a chat
5. `chat_join_request`: A request to join the chat has been sent (The bot must have the can_invite_users administrator right)
5. `polling_error`: Error occurred during polling. See [polling errors](#polling-errors).
6. `webhook_error`: Error occurred handling a webhook request. See [webhook errors](#webhook-errors).
7. `error`: Unexpected error occurred, usually fatal!
**Tip:** Its much better to listen a specific event rather than on **Tip:** Its much better to listen a specific event rather than on
`message` in order to stay safe from the content. `message` in order to stay safe from the content.
@ -126,63 +113,6 @@ const url = 'https://telegram.org/img/t_logo.png';
bot.sendPhoto(chatId, url); bot.sendPhoto(chatId, url);
``` ```
If you wish to explicitly specify the filename or
[MIME type](http://en.wikipedia.org/wiki/Internet_media_type),
you may pass an additional argument as file options, like so:
```js
const fileOptions = {
// Explicitly specify the file name.
filename: 'customfilename',
// Explicitly specify the MIME type.
contentType: 'audio/mpeg',
};
bot.sendAudio(chatId, data, {}, fileOptions);
```
**NOTE:** You **MUST** provide an empty object (`{}`) in place of
*Additional Telegram query options*, if you have **no** query options
to specify. For example,
```js
// WRONG!
// 'fileOptions' will be taken as additional Telegram query options!!!
bot.sendAudio(chatId, data, fileOptions);
// RIGHT!
bot.sendAudio(chatId, data, {}, fileOptions);
```
<a name="sending-files-options"></a>
### File Options (metadata)
When sending files, the library automatically resolves
the `filename` and `contentType` properties.
**For now, this has to be manually activated using environment
variable `NTBA_FIX_350`.**
In order of highest-to-lowest precedence in searching for
a value, when resolving the `filename`:
*(`fileOptions` is the Object argument passed to the method.
The "file" argument passed to the method can be a `Stream`,
`Buffer` or `filepath`.)*
1. Is `fileOptions.filename` explictly defined?
1. Does `Stream#path` exist?
1. Is `filepath` provided?
1. Default to `"filename"`
And the `contentType`:
1. Is `fileOptions.contentType` explictly-defined?
1. Does `Stream#path` exist?
1. Try detecting file-type from the `Buffer`
1. Is `filepath` provided?
1. Is `fileOptions.filename` explicitly defined?
1. Default to `"application/octet-stream"`
<a name="sending-files-performance"></a> <a name="sending-files-performance"></a>
### Performance Issue ### Performance Issue

View File

@ -8,8 +8,9 @@ const TOKEN = process.env.TELEGRAM_TOKEN || 'YOUR_TELEGRAM_BOT_TOKEN';
const url = 'https://<PUBLIC-URL>'; const url = 'https://<PUBLIC-URL>';
const port = process.env.PORT; const port = process.env.PORT;
const TelegramBot = require('../..'); const TelegramBot = require('..');
const express = require('express'); const express = require('express');
const bodyParser = require('body-parser');
// No need to pass any parameters as we will handle the updates with Express // No need to pass any parameters as we will handle the updates with Express
const bot = new TelegramBot(TOKEN); const bot = new TelegramBot(TOKEN);
@ -20,7 +21,7 @@ bot.setWebHook(`${url}/bot${TOKEN}`);
const app = express(); const app = express();
// parse the updates to JSON // parse the updates to JSON
app.use(express.json()); app.use(bodyParser.json());
// We are receiving updates at the route below! // We are receiving updates at the route below!
app.post(`/bot${TOKEN}`, (req, res) => { app.post(`/bot${TOKEN}`, (req, res) => {

View File

@ -39,7 +39,7 @@ bot.onText(/\/start/, function onPhotoText(msg) {
// Handle callback queries // Handle callback queries
bot.on('callback_query', function onCallbackQuery(callbackQuery) { bot.on('callback_query', function onCallbackQuery(callbackQuery) {
bot.answerCallbackQuery(callbackQuery.id, { url }); bot.answerCallbackQuery(callbackQuery.id, url, true, { url });
}); });
// Render the HTML game // Render the HTML game

View File

@ -5,7 +5,7 @@
const TOKEN = process.env.TELEGRAM_TOKEN || 'YOUR_TELEGRAM_BOT_TOKEN'; const TOKEN = process.env.TELEGRAM_TOKEN || 'YOUR_TELEGRAM_BOT_TOKEN';
const TelegramBot = require('../..'); const TelegramBot = require('..');
const options = { const options = {
webHook: { webHook: {
// Port to which you should bind is assigned to $PORT variable // Port to which you should bind is assigned to $PORT variable

View File

@ -5,12 +5,12 @@
const TOKEN = process.env.TELEGRAM_TOKEN || 'YOUR_TELEGRAM_BOT_TOKEN'; const TOKEN = process.env.TELEGRAM_TOKEN || 'YOUR_TELEGRAM_BOT_TOKEN';
const TelegramBot = require('../..'); const TelegramBot = require('..');
const options = { const options = {
webHook: { webHook: {
port: 443, port: 443,
key: `${__dirname}/../ssl/key.pem`, // Path to file with PEM private key key: `${__dirname}/key.pem`, // Path to file with PEM private key
cert: `${__dirname}/../ssl/crt.pem` // Path to file with PEM certificate cert: `${__dirname}/crt.pem` // Path to file with PEM certificate
} }
}; };
// This URL must route to the port set above (i.e. 443) // This URL must route to the port set above (i.e. 443)

View File

@ -6,7 +6,7 @@
const TOKEN = process.env.TELEGRAM_TOKEN || 'YOUR_TELEGRAM_BOT_TOKEN'; const TOKEN = process.env.TELEGRAM_TOKEN || 'YOUR_TELEGRAM_BOT_TOKEN';
const TelegramBot = require('../..'); const TelegramBot = require('..');
const options = { const options = {
webHook: { webHook: {
// Just use 443 directly // Just use 443 directly

View File

@ -1,23 +1,11 @@
/** /**
* This example demonstrates setting up webhook * This example demonstrates setting up webhook
* on the OpenShift platform. * on the OpenShift platform.
*
* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
* NOTE:
*
* Openshift 2 has been shut down.
*
* This example is kept here for historical/educational purposes.
* No changes are expected to be made to the source code below.
*
* See https://github.com/yagop/node-telegram-bot-api/issues/426 for
* more information.
* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
*/ */
const TOKEN = process.env.TELEGRAM_TOKEN || 'YOUR_TELEGRAM_BOT_TOKEN'; const TOKEN = process.env.TELEGRAM_TOKEN || 'YOUR_TELEGRAM_BOT_TOKEN';
const TelegramBot = require('../..'); const TelegramBot = require('..');
// See https://developers.openshift.com/en/node-js-environment-variables.html // See https://developers.openshift.com/en/node-js-environment-variables.html
const options = { const options = {
webHook: { webHook: {

View File

@ -6,7 +6,7 @@
const TOKEN = process.env.TELEGRAM_TOKEN || 'YOUR_TELEGRAM_BOT_TOKEN'; const TOKEN = process.env.TELEGRAM_TOKEN || 'YOUR_TELEGRAM_BOT_TOKEN';
const TelegramBot = require('..'); const TelegramBot = require('..');
const request = require('@cypress/request'); const request = require('request');
const options = { const options = {
polling: true polling: true
}; };
@ -62,8 +62,8 @@ bot.onText(/\/editable/, function onEditableText(msg) {
[ [
{ {
text: 'Edit Text', text: 'Edit Text',
// we shall check for this value when we listen // we shall check for this value when we listen
// for "callback_query" // for "callback_query"
callback_data: 'edit' callback_data: 'edit'
} }
] ]

View File

@ -5,7 +5,7 @@
*/ */
const majorVersion = parseInt(process.versions.node.split('.')[0], 10); const majorVersion = parseInt(process.versions.node.split('.')[0], 10);
if (majorVersion <= 5) { if (majorVersion <= 5) {
const deprecate = require('./src/utils').deprecate; const deprecate = require('depd')('node-telegram-bot-api');
deprecate('Node.js v5.x and below will no longer be supported in the future'); deprecate('Node.js v5.x and below will no longer be supported in the future');
module.exports = require('./lib/telegram'); module.exports = require('./lib/telegram');
} else { } else {

View File

@ -1,6 +1,6 @@
{ {
"name": "node-telegram-bot-api", "name": "node-telegram-bot-api",
"version": "0.68.0", "version": "0.28.0",
"description": "Telegram Bot API", "description": "Telegram Bot API",
"main": "./index.js", "main": "./index.js",
"directories": { "directories": {
@ -14,10 +14,9 @@
"bot" "bot"
], ],
"scripts": { "scripts": {
"gen-doc": "echo 'WARNING: `npm run gen-doc` is deprecated. Use `npm run doc` instead.' && npm run doc", "gen-doc": "jsdoc2md --files src/telegram.js --template doc/api.hbs > doc/api.md",
"doc": "jsdoc2md --files src/telegram.js --template doc/api.hbs > doc/api.md",
"build": "babel -d ./lib src", "build": "babel -d ./lib src",
"prepublishOnly": "npm run build && npm run gen-doc", "prepublish": "npm run build && npm run gen-doc",
"eslint": "eslint ./src ./test ./examples", "eslint": "eslint ./src ./test ./examples",
"mocha": "mocha", "mocha": "mocha",
"pretest": "npm run build", "pretest": "npm run build",
@ -29,39 +28,41 @@
"node": ">=0.12" "node": ">=0.12"
}, },
"dependencies": { "dependencies": {
"@cypress/request": "^3.0.8", "array.prototype.findindex": "^2.0.0",
"@cypress/request-promise": "^5.0.0", "bl": "^1.1.2",
"array.prototype.findindex": "^2.0.2", "bluebird": "^3.3.4",
"bl": "^1.2.3", "debug": "^2.2.0",
"debug": "^3.2.7", "depd": "^1.1.0",
"eventemitter3": "^3.0.0", "eventemitter3": "^2.0.2",
"file-type": "^3.9.0", "file-type": "^3.9.0",
"mime": "^1.6.0", "mime": "^1.3.4",
"pump": "^2.0.0" "pump": "^1.0.1",
"request": "^2.69.0",
"request-promise": "^4.1.1"
}, },
"devDependencies": { "devDependencies": {
"babel-cli": "^6.26.0", "babel-cli": "^6.6.5",
"babel-eslint": "^8.0.3", "babel-eslint": "^6.1.2",
"babel-plugin-transform-class-properties": "^6.24.1", "babel-plugin-transform-class-properties": "^6.6.0",
"babel-plugin-transform-es2015-destructuring": "^6.23.0", "babel-plugin-transform-es2015-destructuring": "^6.6.5",
"babel-plugin-transform-es2015-parameters": "^6.24.1", "babel-plugin-transform-es2015-parameters": "^6.7.0",
"babel-plugin-transform-es2015-shorthand-properties": "^6.24.1", "babel-plugin-transform-es2015-shorthand-properties": "^6.5.0",
"babel-plugin-transform-es2015-spread": "^6.22.0", "babel-plugin-transform-es2015-spread": "^6.6.5",
"babel-plugin-transform-object-rest-spread": "^6.26.0", "babel-plugin-transform-object-rest-spread": "^6.6.5",
"babel-plugin-transform-strict-mode": "^6.24.1", "babel-plugin-transform-strict-mode": "^6.6.5",
"babel-preset-es2015": "^6.24.1", "babel-preset-es2015": "^6.6.0",
"babel-register": "^6.26.0", "babel-register": "^6.7.2",
"concat-stream": "^1.6.0", "contributor": "^0.1.25",
"eslint": "^2.13.1", "eslint": "^2.13.1",
"eslint-config-airbnb": "^6.2.0", "eslint-config-airbnb": "^6.2.0",
"eslint-plugin-mocha": "^4.11.0", "eslint-plugin-mocha": "^4.8.0",
"is": "^3.2.1", "is": "^3.1.0",
"is-ci": "^1.0.10", "is-ci": "^1.0.10",
"istanbul": "^1.1.0-alpha.1", "istanbul": "^1.1.0-alpha.1",
"jsdoc-to-markdown": "^3.0.3", "jsdoc-to-markdown": "^2.0.1",
"mocha": "^3.5.3", "mocha": "^3.2.0",
"mocha-lcov-reporter": "^1.3.0", "mocha-lcov-reporter": "^1.2.0",
"node-static": "^0.7.10" "node-static": "^0.7.9"
}, },
"repository": { "repository": {
"type": "git", "type": "git",
@ -70,5 +71,349 @@
"bugs": { "bugs": {
"url": "https://github.com/yagop/node-telegram-bot-api/issues" "url": "https://github.com/yagop/node-telegram-bot-api/issues"
}, },
"homepage": "https://github.com/yagop/node-telegram-bot-api" "homepage": "https://github.com/yagop/node-telegram-bot-api",
"contributors": [
{
"name": "Anton Mironov",
"email": "ant.mironov@gmail.com",
"url": "https://github.com/mironov",
"contributions": 1,
"additions": 51,
"deletions": 15,
"hireable": true
},
{
"name": "Daniil Yastremskiy",
"email": "Catharsis@post.cz",
"url": "https://github.com/TheBeastOfCaerbannog",
"contributions": 1,
"additions": 36,
"deletions": 0,
"hireable": true
},
{
"name": null,
"email": null,
"url": "https://github.com/Ni2c2k",
"contributions": 1,
"additions": 4,
"deletions": 4,
"hireable": null
},
{
"name": "Alexander Tarmolov",
"email": "tarmolov@gmail.com",
"url": "https://github.com/tarmolov",
"contributions": 1,
"additions": 5,
"deletions": 0,
"hireable": null
},
{
"name": "Plusb Preco",
"email": "plusb21@gmail.com",
"url": "https://github.com/preco21",
"contributions": 1,
"additions": 1,
"deletions": 0,
"hireable": null
},
{
"name": "Ola Flisbäck",
"email": null,
"url": "https://github.com/oflisback",
"contributions": 1,
"additions": 3,
"deletions": 3,
"hireable": true
},
{
"name": null,
"email": null,
"url": "https://github.com/GingerPlusPlus",
"contributions": 1,
"additions": 6,
"deletions": 2,
"hireable": null
},
{
"name": "Sergey Bogdanov",
"email": "sergey.bogdanov@gmail.com",
"url": "https://github.com/desunit",
"contributions": 1,
"additions": 1,
"deletions": 1,
"hireable": null
},
{
"name": "Mikhail Burshteyn",
"email": null,
"url": "https://github.com/m-burst",
"contributions": 1,
"additions": 12,
"deletions": 5,
"hireable": null
},
{
"name": "Horus Lugo",
"email": "horusgoul@gmail.com",
"url": "https://github.com/HorusGoul",
"contributions": 1,
"additions": 108,
"deletions": 1,
"hireable": true
},
{
"name": "Serhii Dmytruk",
"email": "dmitruksergey@gmail.com",
"url": "https://github.com/serhiidmytruk",
"contributions": 1,
"additions": 35,
"deletions": 1,
"hireable": null
},
{
"name": "Conor Fennell",
"email": null,
"url": "https://github.com/conorfennell",
"contributions": 1,
"additions": 50,
"deletions": 1,
"hireable": null
},
{
"name": "Aleksandr L.",
"email": "w.siteee@gmail.com",
"url": "https://github.com/w-site",
"contributions": 1,
"additions": 24,
"deletions": 0,
"hireable": null
},
{
"name": "Matthew Brandly",
"email": "matt@brandly.me",
"url": "https://github.com/brandly",
"contributions": 1,
"additions": 1,
"deletions": 1,
"hireable": null
},
{
"name": "Anton",
"email": null,
"url": "https://github.com/Feverqwe",
"contributions": 1,
"additions": 23,
"deletions": 5,
"hireable": null
},
{
"name": "Patricio López Juri",
"email": "patricio@lopezjuri.com",
"url": "https://github.com/mrpatiwi",
"contributions": 1,
"additions": 49,
"deletions": 2,
"hireable": true
},
{
"name": "Guido García",
"email": "palmerabollo@gmail.com",
"url": "https://github.com/palmerabollo",
"contributions": 1,
"additions": 1,
"deletions": 1,
"hireable": true
},
{
"name": "Sebastian Troć",
"email": "sebastian.troc@gucman.pl",
"url": "https://github.com/SebastianTroc",
"contributions": 1,
"additions": 1,
"deletions": 1,
"hireable": null
},
{
"name": "Mohammed Sohail",
"email": "sohail@forfuture.tech",
"url": "https://github.com/kamikazechaser",
"contributions": 2,
"additions": 20,
"deletions": 5,
"hireable": true
},
{
"name": "Jishnu Mohan",
"email": "jishnu7@gmail.com",
"url": "https://github.com/jishnu7",
"contributions": 2,
"additions": 84,
"deletions": 0,
"hireable": true
},
{
"name": "Jérémy Gotteland",
"email": null,
"url": "https://github.com/Tketa",
"contributions": 2,
"additions": 81,
"deletions": 3,
"hireable": null
},
{
"name": "Alex Godko",
"email": "koloboid@gmail.com",
"url": "https://github.com/koloboid",
"contributions": 2,
"additions": 2,
"deletions": 2,
"hireable": true
},
{
"name": "Dardan Neziri",
"email": "dard.ne@gmail.com",
"url": "https://github.com/knock-in",
"contributions": 2,
"additions": 22,
"deletions": 16,
"hireable": true
},
{
"name": "Cristian Baldi",
"email": "bld.cris.96@gmail.com",
"url": "https://github.com/crisbal",
"contributions": 2,
"additions": 26,
"deletions": 1,
"hireable": true
},
{
"name": "Vitaly Aminev",
"email": null,
"url": "https://github.com/AVVS",
"contributions": 2,
"additions": 1065,
"deletions": 1001,
"hireable": true
},
{
"name": null,
"email": "plo.cav@gmail.com",
"url": "https://github.com/evolun",
"contributions": 2,
"additions": 7,
"deletions": 3,
"hireable": null
},
{
"name": "Iiro Jäppinen",
"email": null,
"url": "https://github.com/iiroj",
"contributions": 2,
"additions": 40,
"deletions": 0,
"hireable": null
},
{
"name": "TJ Horner",
"email": "me@tjhorner.com",
"url": "https://github.com/tjhorner",
"contributions": 2,
"additions": 223,
"deletions": 1,
"hireable": null
},
{
"name": "Rafael Kr",
"email": null,
"url": "https://github.com/RafaelKr",
"contributions": 3,
"additions": 3,
"deletions": 2,
"hireable": null
},
{
"name": "Vítor Augusto da Silva Vasconcellos",
"email": "vasvas10@gmail.com",
"url": "https://github.com/HeavenVolkoff",
"contributions": 2,
"additions": 12,
"deletions": 0,
"hireable": true
},
{
"name": "Rey",
"email": null,
"url": "https://github.com/reyy",
"contributions": 2,
"additions": 34,
"deletions": 25,
"hireable": null
},
{
"name": "Ivan Skorokhodov",
"email": "iskorokhodov@gmail.com",
"url": "https://github.com/universome",
"contributions": 3,
"additions": 219,
"deletions": 5,
"hireable": null
},
{
"name": "Riddler",
"email": null,
"url": "https://github.com/Waterloo",
"contributions": 3,
"additions": 64,
"deletions": 2,
"hireable": true
},
{
"name": null,
"email": "exlmotodev@gmail.com",
"url": "https://github.com/EXL",
"contributions": 4,
"additions": 4,
"deletions": 4,
"hireable": true
},
{
"name": "Yago",
"email": "yago@yago.me",
"url": "https://github.com/yagop",
"contributions": 194,
"additions": 3014,
"deletions": 1173,
"hireable": true
},
{
"name": "Ilias Ismanalijev",
"email": "hello@illyism.com",
"url": "https://github.com/Illyism",
"contributions": 7,
"additions": 140,
"deletions": 10,
"hireable": true
},
{
"name": "Chris54721",
"email": null,
"url": "https://github.com/chris54721",
"contributions": 5,
"additions": 22,
"deletions": 6,
"hireable": null
},
{
"name": "Gocho Mugo",
"email": "mugo@forfuture.co.ke",
"url": "https://github.com/GochoMugo",
"contributions": 80,
"additions": 4590,
"deletions": 2377,
"hireable": true
}
]
} }

View File

@ -10,12 +10,6 @@ exports.BaseError = class BaseError extends Error {
super(`${code}: ${message}`); super(`${code}: ${message}`);
this.code = code; this.code = code;
} }
toJSON() {
return {
code: this.code,
message: this.message,
};
}
}; };
@ -30,10 +24,7 @@ exports.FatalError = class FatalError extends exports.BaseError {
const error = (typeof data === 'string') ? null : data; const error = (typeof data === 'string') ? null : data;
const message = error ? error.message : data; const message = error ? error.message : data;
super('EFATAL', message); super('EFATAL', message);
if (error) { if (error) this.stack = error.stack;
this.stack = error.stack;
this.cause = error;
}
} }
}; };

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,5 @@
const errors = require('./errors');
const debug = require('debug')('node-telegram-bot-api'); const debug = require('debug')('node-telegram-bot-api');
const deprecate = require('./utils').deprecate; const deprecate = require('depd')('node-telegram-bot-api');
const ANOTHER_WEB_HOOK_USED = 409; const ANOTHER_WEB_HOOK_USED = 409;
@ -50,7 +49,7 @@ class TelegramBotPolling {
/** /**
* Stop polling * Stop polling
* @param {Object} [options] Options * @param {Object} [options]
* @param {Boolean} [options.cancel] Cancel current request * @param {Boolean} [options.cancel] Cancel current request
* @param {String} [options.reason] Reason for stopping polling * @param {String} [options.reason] Reason for stopping polling
* @return {Promise} * @return {Promise}
@ -80,18 +79,6 @@ class TelegramBotPolling {
return !!this._lastRequest; return !!this._lastRequest;
} }
/**
* Handle error thrown during polling.
* @private
* @param {Error} error
*/
_error(error) {
if (!this.bot.listeners('polling_error').length) {
return console.error('error: [polling_error] %j', error); // eslint-disable-line no-console
}
return this.bot.emit('polling_error', error);
}
/** /**
* Invokes polling (with recursion!) * Invokes polling (with recursion!)
* @return {Promise} promise of the current request * @return {Promise} promise of the current request
@ -106,59 +93,18 @@ class TelegramBotPolling {
updates.forEach(update => { updates.forEach(update => {
this.options.params.offset = update.update_id + 1; this.options.params.offset = update.update_id + 1;
debug('updated offset: %s', this.options.params.offset); debug('updated offset: %s', this.options.params.offset);
try { this.bot.processUpdate(update);
this.bot.processUpdate(update);
} catch (err) {
err._processing = true;
throw err;
}
}); });
return null; return null;
}) })
.catch(err => { .catch(err => {
debug('polling error: %s', err.message); debug('polling error: %s', err.message);
if (!err._processing) { if (this.bot.listeners('polling_error').length) {
return this._error(err); this.bot.emit('polling_error', err);
} else {
console.error(err); // eslint-disable-line no-console
} }
delete err._processing; return null;
/*
* An error occured while processing the items,
* i.e. in `this.bot.processUpdate()` above.
* We need to mark the already-processed items
* to avoid fetching them again once the application
* is restarted, or moves to next polling interval
* (in cases where unhandled rejections do not terminate
* the process).
* See https://github.com/yagop/node-telegram-bot-api/issues/36#issuecomment-268532067
*/
if (!this.bot.options.badRejection) {
return this._error(err);
}
const opts = {
offset: this.options.params.offset,
limit: 1,
timeout: 0,
};
return this.bot.getUpdates(opts).then(() => {
return this._error(err);
}).catch(requestErr => {
/*
* We have been unable to handle this error.
* We have to log this to stderr to ensure devops
* understands that they may receive already-processed items
* on app restart.
* We simply can not rescue this situation, emit "error"
* event, with the hope that the application exits.
*/
/* eslint-disable no-console */
const bugUrl = 'https://github.com/yagop/node-telegram-bot-api/issues/36#issuecomment-268532067';
console.error('error: Internal handling of The Offset Infinite Loop failed');
console.error(`error: Due to error '${requestErr}'`);
console.error('error: You may receive already-processed updates on app restart');
console.error(`error: Please see ${bugUrl} for more information`);
/* eslint-enable no-console */
return this.bot.emit('error', new errors.FatalError(err));
});
}) })
.finally(() => { .finally(() => {
if (this._abort) { if (this._abort) {

View File

@ -4,6 +4,8 @@ const https = require('https');
const http = require('http'); const http = require('http');
const fs = require('fs'); const fs = require('fs');
const bl = require('bl'); const bl = require('bl');
const Promise = require('bluebird');
class TelegramBotWebHook { class TelegramBotWebHook {
/** /**
@ -50,16 +52,12 @@ class TelegramBotWebHook {
if (this.isOpen()) { if (this.isOpen()) {
return Promise.resolve(); return Promise.resolve();
} }
return new Promise((resolve, reject) => { return new Promise(resolve => {
this._webServer.listen(this.options.port, this.options.host, () => { this._webServer.listen(this.options.port, this.options.host, () => {
debug('WebHook listening on port %s', this.options.port); debug('WebHook listening on port %s', this.options.port);
this._open = true; this._open = true;
return resolve(); return resolve();
}); });
this._webServer.once('error', (err) => {
reject(err);
});
}); });
} }
@ -99,7 +97,7 @@ class TelegramBotWebHook {
*/ */
_error(error) { _error(error) {
if (!this.bot.listeners('webhook_error').length) { if (!this.bot.listeners('webhook_error').length) {
return console.error('error: [webhook_error] %j', error); // eslint-disable-line no-console return console.error(error); // eslint-disable-line no-console
} }
return this.bot.emit('webhook_error', error); return this.bot.emit('webhook_error', error);
} }

View File

@ -1,3 +0,0 @@
const util = require('util');
// Native deprecation warning
exports.deprecate = (msg) => util.deprecate(() => { }, msg, 'node-telegram-bot-api')();

View File

@ -10,14 +10,9 @@ export TEST_USER_ID=<USER_ID>
# Group Id which to use in some of the tests, e.g. for TelegramBot#getChat() # Group Id which to use in some of the tests, e.g. for TelegramBot#getChat()
export TEST_GROUP_ID=<GROUP_ID> export TEST_GROUP_ID=<GROUP_ID>
# Game short name to use in some tests, e.g. TelegramBot#sendGame() # Game short name which to use in some of the tests, e.g. TelegramBot#sendGame()
# Defaults to "medusalab_test".
export TEST_GAME_SHORT_NAME=<GAME_SHORT_NAME> export TEST_GAME_SHORT_NAME=<GAME_SHORT_NAME>
# Sticker set name to use in some tests, e.g. TelegramBot#getStickerSet()
# Defaults to "pusheen".
export TEST_STICKER_SET_NAME=<STICKER_SET_NAME>
# Payment provider token to be used # Payment provider token to be used
export TEST_PROVIDER_TOKEN=<YOUR_PROVIDER_TOKEN> export TEST_PROVIDER_TOKEN=<YOUR_PROVIDER_TOKEN>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

File diff suppressed because it is too large Load Diff

View File

@ -1,139 +0,0 @@
const assert = require('assert');
const fs = require('fs');
const path = require('path');
const TelegramBot = require('..');
const paths = {
audio: path.join(__dirname, 'data/audio.mp3'),
};
describe('#_formatSendData', function sendfileSuite() {
const bot = new TelegramBot('token');
const type = 'file';
before(function beforeSuite() {
process.env.NTBA_FIX_350 = 1;
});
after(function afterSuite() {
delete process.env.NTBA_FIX_350;
});
describe('using fileOptions', function sendfileOptionsSuite() {
const stream = fs.createReadStream(paths.audio);
const nonPathStream = fs.createReadStream(paths.audio);
const buffer = fs.readFileSync(paths.audio);
const nonDetectableBuffer = fs.readFileSync(__filename);
const filepath = paths.audio;
const files = [stream, nonPathStream, buffer, nonDetectableBuffer, filepath];
delete nonPathStream.path;
describe('filename', function filenameSuite() {
it('(1) fileOptions.filename', function test() {
const filename = 'custom-filename';
files.forEach((file) => {
const [{ [type]: data }] = bot._formatSendData(type, file, { filename });
assert.equal(data.options.filename, filename);
});
});
it('(2) Stream#path', function test() {
if (!stream.path) {
this.skip('Stream#path unsupported');
return;
}
const [{ [type]: data }] = bot._formatSendData(type, stream);
assert.equal(data.options.filename, path.basename(paths.audio));
});
it('(3) filepath', function test() {
const [{ [type]: data }] = bot._formatSendData(type, filepath);
assert.equal(data.options.filename, path.basename(paths.audio));
});
it('(4) final default', function test() {
[nonPathStream, buffer, nonDetectableBuffer].forEach((file) => {
const [{ [type]: data }] = bot._formatSendData(type, file);
assert.equal(data.options.filename, 'filename');
});
});
});
describe('contentType', function contentTypeSuite() {
it('(1) fileOpts.contentType', function test() {
const contentType = 'application/custom-type';
files.forEach((file) => {
const [{ [type]: data }] = bot._formatSendData(type, file, { contentType });
assert.equal(data.options.contentType, contentType);
});
});
it('(2) Stream#path', function test() {
if (!stream.path) {
this.skip('Stream#path unsupported');
return;
}
const [{ [type]: data }] = bot._formatSendData(type, stream);
assert.equal(data.options.contentType, 'audio/mpeg');
});
it('(3) Buffer file-type', function test() {
const [{ [type]: data }] = bot._formatSendData(type, buffer);
assert.equal(data.options.contentType, 'audio/mpeg');
});
it('(4) filepath', function test() {
const [{ [type]: data }] = bot._formatSendData(type, filepath);
assert.equal(data.options.contentType, 'audio/mpeg');
});
it('(5) fileOptions.filename', function test() {
[nonPathStream, nonDetectableBuffer].forEach((file) => {
const [{ [type]: data }] = bot._formatSendData(type, file, {
filename: 'image.gif',
});
assert.equal(data.options.contentType, 'image/gif');
});
});
it('(6) Final default', function test() {
[nonPathStream, nonDetectableBuffer].forEach((file) => {
const [{ [type]: data }] = bot._formatSendData(type, file);
assert.equal(data.options.contentType, 'application/octet-stream');
});
});
});
});
it('should handle buffer path from fs.readStream', function test() {
let file;
try {
file = fs.createReadStream(Buffer.from(paths.audio));
} catch (ex) {
// Older Node.js versions do not support passing a Buffer
// representation of the path to fs.createReadStream()
if (ex instanceof TypeError) {
Promise.resolve();
return;
}
}
const [{ [type]: data }] = bot._formatSendData('file', file);
assert.equal(data.options.filename, path.basename(paths.audio));
});
it('should not accept file-paths if disallowed with constructor option', function test() {
const tgbot = new TelegramBot('token', { filepath: false });
const [formData, fileId] = tgbot._formatSendData('file', paths.audio);
assert.ok(fileId);
assert.ok(!formData);
});
it('should allow stream.path that can not be parsed', function test() {
const stream = fs.createReadStream(paths.audio);
stream.path = '/?id=123'; // for example, 'http://example.com/?id=666'
assert.doesNotThrow(function assertDoesNotThrow() {
bot._formatSendData('file', stream);
});
});
});

View File

@ -30,13 +30,6 @@ exports = module.exports = {
* @return {Promise} * @return {Promise}
*/ */
isPollingMockServer, isPollingMockServer,
/**
* Return true if the string is a URI to a file
* on Telegram servers.
* @param {String} uri
* @return {Boolean}
*/
isTelegramFileURI,
/** /**
* Send a message to the webhook at the specified port and path. * Send a message to the webhook at the specified port and path.
* @param {Number} port * @param {Number} port
@ -81,7 +74,8 @@ exports = module.exports = {
const assert = require('assert'); const assert = require('assert');
const http = require('http'); const http = require('http');
const request = require('@cypress/request-promise'); const Promise = require('bluebird');
const request = require('request-promise');
const statics = require('node-static'); const statics = require('node-static');
const servers = {}; const servers = {};
@ -223,8 +217,3 @@ function handleRatelimit(bot, methodName, suite) {
}; };
return bot; return bot;
} }
function isTelegramFileURI(uri) {
return /https?:\/\/.*\/file\/bot.*\/.*/.test(uri);
}