mirror of
https://github.com/yagop/node-telegram-bot-api
synced 2025-08-22 18:07:16 +00:00
Compare commits
212 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
59b43a5355 | ||
|
6d7adc3e12 | ||
|
8fe6f04df2 | ||
|
074912cdb3 | ||
|
cb21b01c3a | ||
|
0b2662fd24 | ||
|
b4effe6980 | ||
|
94e61c0a10 | ||
|
8cff652e05 | ||
|
01c3ea77c9 | ||
|
5fd83b3243 | ||
|
531a15e7b8 | ||
|
12d28f3958 | ||
|
766b4344a8 | ||
|
f40b421717 | ||
|
e7dd42c227 | ||
|
7e9ee42769 | ||
|
65ef0a2fcc | ||
|
fea59f455c | ||
|
556de8794d | ||
|
7fe501f19f | ||
|
d323a3bac5 | ||
|
515a1acdc7 | ||
|
8f741b2cb6 | ||
|
db976c4598 | ||
|
8df6e6583e | ||
|
be25ec69d2 | ||
|
00ffca5fdd | ||
|
cceea22a93 | ||
|
e81ec60377 | ||
|
4fa9a735bb | ||
|
5385d41f1f | ||
|
12d4d25af4 | ||
|
f17e801b8a | ||
|
595cdbd0c6 | ||
|
dfe24a4d38 | ||
|
542002ec0d | ||
|
2885db0e31 | ||
|
ad2b8c2ce1 | ||
|
4ec6a68840 | ||
|
ab0eb183ad | ||
|
c4164a21ce | ||
|
6077f9ba10 | ||
|
41f493ba82 | ||
|
53b5565e8a | ||
|
58261d1be3 | ||
|
4ef4fe9ba9 | ||
|
ab5928669b | ||
|
0eb8b8032f | ||
|
ccdd14670b | ||
|
d85370452a | ||
|
22d99fd91d | ||
|
fe4afd6533 | ||
|
c9b05e7996 | ||
|
f50cf982c7 | ||
|
449f03f786 | ||
|
d28875154c | ||
|
f97cad7588 | ||
|
6ad9115fb1 | ||
|
72feca3d02 | ||
|
280a58c0e2 | ||
|
0f33cb5ab7 | ||
|
e114682f2e | ||
|
1a7f41c930 | ||
|
c6cb87ec12 | ||
|
bbbc6cb8b8 | ||
|
5ff22148d8 | ||
|
19b5fc5bd3 | ||
|
68ac69cf99 | ||
|
e119612b5f | ||
|
b9e8675736 | ||
|
d87e8d258d | ||
|
a1e73481db | ||
|
6c0f2e73c0 | ||
|
15c878ea89 | ||
|
b60f065a83 | ||
|
921cb65fce | ||
|
5cc6629ca0 | ||
|
2416679cee | ||
|
5a4787884e | ||
|
2c06bc3b3d | ||
|
e6938f81eb | ||
|
de76dcd2cb | ||
|
7738677b45 | ||
|
28cd62e355 | ||
|
ec7e61e041 | ||
|
3829e727aa | ||
|
5d30b6a134 | ||
|
fc24d0dc4d | ||
|
167e52c04a | ||
|
93eaad082c | ||
|
917c20c2c7 | ||
|
7643551adc | ||
|
d853a18079 | ||
|
b4309cf45a | ||
|
1ca5e2b967 | ||
|
1bae9c2964 | ||
|
c6a0eedc9a | ||
|
8bf57c1275 | ||
|
5169d79bd9 | ||
|
667380f1de | ||
|
5553ceecbb | ||
|
e66243a776 | ||
|
1f1e46e01b | ||
|
690c26faa2 | ||
|
0613a1bb08 | ||
|
7feb88464d | ||
|
a0aa87329f | ||
|
0b8ca03b54 | ||
|
f1a044e88e | ||
|
0b476fe35d | ||
|
cf28a17654 | ||
|
8a51b70028 | ||
|
d6f5639768 | ||
|
47bea20539 | ||
|
29e0038bf3 | ||
|
d70442d746 | ||
|
6e46f48606 | ||
|
6a7c088a63 | ||
|
11a6b221e9 | ||
|
42b31fbc9e | ||
|
ca7eee8b0c | ||
|
e207ef665b | ||
|
cca75ec92a | ||
|
fadf738da4 | ||
|
8b99ccb75c | ||
|
2d3421905c | ||
|
67c738b0d3 | ||
|
8ef560160c | ||
|
b585957a0a | ||
|
8b7d10e01b | ||
|
1224613fec | ||
|
0461c0bfe3 | ||
|
71fbad31d9 | ||
|
091ef7a8a7 | ||
|
435f06319e | ||
|
119d892c34 | ||
|
1169f8e430 | ||
|
5cecffc34b | ||
|
7e9e9b11b3 | ||
|
2bdd50fdc2 | ||
|
309696622d | ||
|
1f4c79ec8e | ||
|
8edf1fbc6d | ||
|
55332c3c25 | ||
|
96c50ba1bd | ||
|
4358f20dbb | ||
|
0781ae685d | ||
|
584610baaf | ||
|
1a08221174 | ||
|
d7197998dd | ||
|
4051117ed0 | ||
|
f28416fbaf | ||
|
04e8b892aa | ||
|
b968e893d3 | ||
|
b91409a2b6 | ||
|
455a93cacb | ||
|
17f839498e | ||
|
d9692f45a9 | ||
|
0870684d83 | ||
|
8edb687283 | ||
|
3b603b1dbd | ||
|
b774ff436f | ||
|
d6083e4327 | ||
|
fb1f4344b3 | ||
|
b1f0ebaf17 | ||
|
ce9ff57a63 | ||
|
012e7df35f | ||
|
57dec19bab | ||
|
fce9244dfd | ||
|
0008a39227 | ||
|
183b6bdb28 | ||
|
816511b19f | ||
|
cfde217488 | ||
|
13472899e4 | ||
|
59378d381b | ||
|
79118b9fae | ||
|
65384a11d4 | ||
|
1f61b82aa8 | ||
|
633bd83a0a | ||
|
4586ebd10b | ||
|
fd337e91f2 | ||
|
20c5ab6710 | ||
|
5510c07876 | ||
|
3fbc6c85b0 | ||
|
757ba2476a | ||
|
16045fda6e | ||
|
ba4d207684 | ||
|
772609c334 | ||
|
ea420edad9 | ||
|
8c965d3a14 | ||
|
6263dcb007 | ||
|
e03ffe5d04 | ||
|
dc897d95e5 | ||
|
bbac07ad2c | ||
|
49df0c6e02 | ||
|
3722c7182c | ||
|
9cf36a3b20 | ||
|
6b21ca3570 | ||
|
b6349de67e | ||
|
7f41992e62 | ||
|
1475881a37 | ||
|
4f50f7350c | ||
|
4d90529492 | ||
|
b25bc6eddb | ||
|
7315fcff3e | ||
|
962ce2af3c | ||
|
8fd243e6a8 | ||
|
a2d85b889a | ||
|
f4f015a621 | ||
|
ef48af49f5 | ||
|
28160c70cd |
@ -5,9 +5,10 @@
|
||||
"new-cap": 0,
|
||||
"prefer-arrow-callback": 0,
|
||||
"no-param-reassign": [2,{"props":false}],
|
||||
"max-len": [2, 150],
|
||||
"max-len": [2, 200],
|
||||
"arrow-body-style": 0,
|
||||
"comma-dangle": 0
|
||||
"comma-dangle": 0,
|
||||
"indent": ["error", 2]
|
||||
},
|
||||
"plugins": [
|
||||
"mocha"
|
||||
|
2
.github/PULL_REQUEST_TEMPLATE.md
vendored
2
.github/PULL_REQUEST_TEMPLATE.md
vendored
@ -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 '[]'
|
||||
-->
|
||||
- [ ] All tests pass
|
||||
- [ ] I have run `npm run gen-doc`
|
||||
- [ ] I have run `npm run doc`
|
||||
|
||||
### Description
|
||||
|
||||
|
2
.gitignore
vendored
2
.gitignore
vendored
@ -2,7 +2,9 @@ node_modules
|
||||
coverage/
|
||||
npm-debug.log
|
||||
.package.json
|
||||
package-lock.json
|
||||
output.md
|
||||
output/
|
||||
lib/
|
||||
lib-doc/
|
||||
.DS_Store
|
12
.travis.yml
12
.travis.yml
@ -1,11 +1,15 @@
|
||||
language: node_js
|
||||
node_js:
|
||||
- "12"
|
||||
- "10"
|
||||
- "8"
|
||||
- "7"
|
||||
- "6"
|
||||
- "5"
|
||||
- "4"
|
||||
- "0.12"
|
||||
#
|
||||
# create required bash scripts to run builds on pull requests in the future
|
||||
#
|
||||
#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:
|
||||
- bash <(curl -s https://codecov.io/bash)
|
||||
cache:
|
||||
|
520
CHANGELOG.md
520
CHANGELOG.md
@ -3,10 +3,422 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
This project adheres to [Semantic Versioning](http://semver.org/).
|
||||
|
||||
## [Unreleased][Unreleased]
|
||||
## [0.68.0][0.68.0] - UNRELEASE
|
||||
|
||||
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)
|
||||
|
||||
* * *
|
||||
|
||||
@ -15,10 +427,10 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
||||
Added:
|
||||
|
||||
1. (#361) Support Bot API v3.1 (by @Lord-Protector, @kamikazechaser)
|
||||
1. (#332) Support Bot API v3.0 (by @kamikazechaser, @GochoMugo)
|
||||
1. Add *TelegramBot#removeTextListener()* (by @GochoMugo)
|
||||
1. (#342) Add game example (by @MCSH)
|
||||
1. (#315) List 'bot-brother' project in community section in README (by @saeedhei)
|
||||
2. (#332) Support Bot API v3.0 (by @kamikazechaser, @GochoMugo)
|
||||
3. Add *TelegramBot#removeTextListener()* (by @GochoMugo)
|
||||
4. (#342) Add game example (by @MCSH)
|
||||
5. (#315) List 'bot-brother' project in community section in README (by @saeedhei)
|
||||
|
||||
Changed:
|
||||
|
||||
@ -27,9 +439,8 @@ Changed:
|
||||
Fixed:
|
||||
|
||||
1. (#325) Fix global regexp state reset (by @Sirius-A)
|
||||
1. (#363) Fix download file path on windows (by @kucherenkovova)
|
||||
1. (#346) Fix anchor webhook link in docs (by @Coac)
|
||||
|
||||
2. (#363) Fix download file path on windows (by @kucherenkovova)
|
||||
3. (#346) Fix anchor webhook link in docs (by @Coac)
|
||||
|
||||
* * *
|
||||
|
||||
@ -39,15 +450,13 @@ Added:
|
||||
|
||||
1. (#287) Add Express WebHook example (by @kamikazechaser)
|
||||
|
||||
|
||||
Fixed:
|
||||
|
||||
1. (#291) Improve docs (by @preco21)
|
||||
1. (#298) Fix running on Node v5 (by @jehy)
|
||||
1. (#307) Fix badge links in README (by @JaakkoLipsanen)
|
||||
1. Fix defaulting value of `options.polling.params.timeout` (by @GochoMugo)
|
||||
1. Fix typos in Github issue template (by @GochoMugo, requested-by @GingerPlusPlus)
|
||||
|
||||
2. (#298) Fix running on Node v5 (by @jehy)
|
||||
3. (#307) Fix badge links in README (by @JaakkoLipsanen)
|
||||
4. Fix defaulting value of `options.polling.params.timeout` (by @GochoMugo)
|
||||
5. Fix typos in Github issue template (by @GochoMugo, requested-by @GingerPlusPlus)
|
||||
|
||||
* * *
|
||||
|
||||
@ -56,19 +465,19 @@ Fixed:
|
||||
Added:
|
||||
|
||||
1. Add constructor options:
|
||||
* (#243) `options.polling.params` (by @GochoMugo, requested-by @sidelux)
|
||||
1. Add methods:
|
||||
* (#74) *TelegramBot#removeReplyListener()* (by @githugger)
|
||||
1. (#283) Add proper error handling (by @GochoMugo)
|
||||
1. (#272) Add health-check endpoint (by @mironov)
|
||||
* `options.webHook.healthEndpoint`
|
||||
1. (#152) Add test for TelegramBot#sendDocument() using 'fileOpts'
|
||||
* (#243) `options.polling.params` (by @GochoMugo, requested-by @sidelux)
|
||||
2. Add methods:
|
||||
* (#74) *TelegramBot#removeReplyListener()* (by @githugger)
|
||||
3. (#283) Add proper error handling (by @GochoMugo)
|
||||
4. (#272) Add health-check endpoint (by @mironov)
|
||||
* `options.webHook.healthEndpoint`
|
||||
5. (#152) Add test for TelegramBot#sendDocument() using 'fileOpts'
|
||||
param (by @evolun)
|
||||
1. Document `options.webHook.host` (by @GochoMugo)
|
||||
1. (#264) Add Bot API version to README (by @kamikazechaser)
|
||||
1. Add examples:
|
||||
- (#271) WebHook on Heroku (by @TheBeastOfCaerbannog)
|
||||
- (#274) WebHook on Zeit Now (by @Ferrari)
|
||||
6. Document `options.webHook.host` (by @GochoMugo)
|
||||
7. (#264) Add Bot API version to README (by @kamikazechaser)
|
||||
8. Add examples:
|
||||
- (#271) WebHook on Heroku (by @TheBeastOfCaerbannog)
|
||||
- (#274) WebHook on Zeit Now (by @Ferrari)
|
||||
|
||||
Changed:
|
||||
|
||||
@ -87,7 +496,6 @@ Fixed:
|
||||
polling (by @GochoMugo, reported-by @dcparga)
|
||||
1. Fix links in documentation (by @Ni2c2k)
|
||||
|
||||
|
||||
* * *
|
||||
|
||||
## [0.26.0][0.26.0] - 2017-01-20
|
||||
@ -95,32 +503,32 @@ Fixed:
|
||||
Added:
|
||||
|
||||
1. Add *TelegramBot* constructor options:
|
||||
* `options.https`
|
||||
* `options.baseApiUrl`
|
||||
* `options.filepath`
|
||||
1. Add methods:
|
||||
* *TelegramBot#stopPolling()*
|
||||
* *TelegramBot#isPolling()*
|
||||
* *TelegramBot#openWebHook()*
|
||||
* *TelegramBot#closeWebHook()*
|
||||
* *TelegramBot#hasOpenWebHook()*
|
||||
* *TelegramBot#deleteWebHook()*
|
||||
* *TelegramBot#getWebHookInfo()*
|
||||
* `options.https`
|
||||
* `options.baseApiUrl`
|
||||
* `options.filepath`
|
||||
2. Add methods:
|
||||
* *TelegramBot#stopPolling()*
|
||||
* *TelegramBot#isPolling()*
|
||||
* *TelegramBot#openWebHook()*
|
||||
* *TelegramBot#closeWebHook()*
|
||||
* *TelegramBot#hasOpenWebHook()*
|
||||
* *TelegramBot#deleteWebHook()*
|
||||
* *TelegramBot#getWebHookInfo()*
|
||||
|
||||
Changed:
|
||||
|
||||
1. Use POST requests by default
|
||||
1. Ensure all relevant methods return Promises
|
||||
1. Document auto-deletion of webhook during polling
|
||||
1. Deprecate support for Node.js v0.12
|
||||
1. Fix consistency of methods signatures
|
||||
1. Rename *TelegramBot#initPolling()* to *TelegramBot#startPolling()*
|
||||
* Deprecate *TelegramBot#initPolling()*
|
||||
2. Ensure all relevant methods return Promises
|
||||
3. Document auto-deletion of webhook during polling
|
||||
4. Deprecate support for Node.js v0.12
|
||||
5. Fix consistency of methods signatures
|
||||
6. Rename *TelegramBot#initPolling()* to *TelegramBot#startPolling()*
|
||||
* Deprecate *TelegramBot#initPolling()*
|
||||
|
||||
Fixed:
|
||||
|
||||
1. Handle error during formatting `formData`
|
||||
1. Fix ES6 syntax
|
||||
2. Fix ES6 syntax
|
||||
|
||||
*Credits/Blames: Unless explicitly stated otherwise, above work was
|
||||
done by @GochoMugo*
|
||||
@ -132,22 +540,26 @@ done by @GochoMugo*
|
||||
Added:
|
||||
|
||||
1. Supports the API v2.3 updates (by @kamikazechaser)
|
||||
1. Add *TelegramBot* constructor option:
|
||||
* `options.request`: proxy extra request options (by @tarmolov)
|
||||
* `options.onlyFirstMatch` (by @GingerPlusPlus)
|
||||
1. Add methods:
|
||||
* *TelegramBot#sendVenue()* (by Tketa)
|
||||
* *TelegramBot#sendContact()* (by @GochoMugo)
|
||||
* *TelegramBot#getGameHighScores()* (by @jishnu7)
|
||||
2. Add *TelegramBot* constructor option:
|
||||
* `options.request`: proxy extra request options (by @tarmolov)
|
||||
* `options.onlyFirstMatch` (by @GingerPlusPlus)
|
||||
3. Add methods:
|
||||
* *TelegramBot#sendVenue()* (by Tketa)
|
||||
* *TelegramBot#sendContact()* (by @GochoMugo)
|
||||
* *TelegramBot#getGameHighScores()* (by @jishnu7)
|
||||
|
||||
Fixed:
|
||||
|
||||
1. Fix request performance issue (by @preco21)
|
||||
1. Fix typos (by oflisback)
|
||||
2. 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.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.1]:https://github.com/yagop/node-telegram-bot-api/releases/tag/v0.27.1
|
||||
[Unreleased]:https://github.com/yagop/node-telegram-bot-api/compare/v0.27.1...master
|
||||
[0.28.0]:https://github.com/yagop/node-telegram-bot-api/releases/tag/v0.28.0
|
||||
[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
|
||||
|
@ -10,18 +10,29 @@ Before proceeding any further, read the following documents:
|
||||
|
||||
## 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`
|
||||
|
||||
Run:
|
||||
|
||||
```bash
|
||||
$ npm run gen-doc
|
||||
$ npm run doc
|
||||
```
|
||||
|
||||
|
||||
### Running tests
|
||||
|
||||
Please read `test/README.md` for more information.
|
||||
|
||||
|
||||
### Transpiling ES2015 for older Node.js versions
|
||||
|
||||
We use babel to transpile the code:
|
||||
|
@ -1,6 +1,6 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2017 Yago
|
||||
Copyright (c) 2019 Yago
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
75
README.md
75
README.md
@ -1,22 +1,34 @@
|
||||
# Node.js Telegram Bot API
|
||||
<h1 align="center">Node.js Telegram Bot API</h1>
|
||||
|
||||
[](https://core.telegram.org/bots/api)
|
||||
[](https://travis-ci.org/yagop/node-telegram-bot-api)
|
||||
[](https://ci.appveyor.com/project/yagop/node-telegram-bot-api/branch/master)
|
||||
[](https://coveralls.io/r/yagop/node-telegram-bot-api?branch=master)
|
||||
[](https://www.bithound.io/github/yagop/node-telegram-bot-api)
|
||||
[](https://telegram.me/node_telegram_bot_api)
|
||||
[](https://telegram.me/Yago_Perez)
|
||||
<div align="center">
|
||||
|
||||
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.
|
||||
Node.js module to interact with the official [Telegram Bot API](https://core.telegram.org/bots/api).
|
||||
|
||||
## Install
|
||||
|
||||
```bash
|
||||
npm install --save node-telegram-bot-api
|
||||
[](https://core.telegram.org/bots/api)
|
||||
[](https://www.npmjs.org/package/node-telegram-bot-api)
|
||||
[](https://codecov.io/gh/yagop/node-telegram-bot-api)
|
||||
|
||||
[](https://telegram.me/node_telegram_bot_api)
|
||||
[](https://t.me/+_IC8j_b1wSFlZTVk)
|
||||
[](https://telegram.me/Yago_Perez)
|
||||
|
||||
</div>
|
||||
|
||||
## 📦 Install
|
||||
|
||||
```sh
|
||||
npm i node-telegram-bot-api
|
||||
```
|
||||
|
||||
## Usage
|
||||
<br/>
|
||||
|
||||
> ✍️ **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
|
||||
const TelegramBot = require('node-telegram-bot-api');
|
||||
@ -50,39 +62,58 @@ bot.on('message', (msg) => {
|
||||
});
|
||||
```
|
||||
|
||||
## Documentation
|
||||
## 📚 Documentation
|
||||
|
||||
* [Usage][usage]
|
||||
* [Examples][examples]
|
||||
* [Tutorials][tutorials]
|
||||
* [Help Information][help]
|
||||
* API Reference ([release][api-release] / [development][api-dev] / [experimental][api-experimental])
|
||||
* API Reference: ([api-release](../master/doc/api.md) / [development][api-dev] / [experimental][api-experimental])
|
||||
* [Contributing to the Project][contributing]
|
||||
* [Experimental Features][experimental]
|
||||
|
||||
_**Note**: Development is done against the **master** branch.
|
||||
Code for the latest release resides on the **release** branch
|
||||
_**Note**: Development is done against the **development** branch.
|
||||
Code for the latest release resides on the **master** 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
|
||||
the Project. Head over and subscribe!
|
||||
|
||||
Some things built using this library, and might interest you:
|
||||
We also have a [Telegram group][tg-group] to discuss issues related to this library.
|
||||
|
||||
* [tgfancy](https://github.com/GochoMugo/tgfancy): A Fancy, Higher-Level Wrapper for Telegram Bot API
|
||||
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
|
||||
* [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
|
||||
* [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
|
||||
* [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
|
||||
|
||||
**The MIT License (MIT)**
|
||||
|
||||
Copyright (c) 2017 Yago
|
||||
Copyright © 2019 Yago
|
||||
|
||||
[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
|
||||
@ -92,5 +123,7 @@ Copyright (c) 2017 Yago
|
||||
[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
|
||||
[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
|
||||
[tg-channel]:https://telegram.me/node_telegram_bot_api
|
||||
[tg-group]:https://t.me/+nc3A9Hs1S81mYzdk
|
||||
|
@ -16,3 +16,4 @@
|
||||
[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
|
||||
[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
|
||||
|
3293
doc/api.md
3293
doc/api.md
File diff suppressed because it is too large
Load Diff
25
doc/help.md
25
doc/help.md
@ -29,6 +29,8 @@ Sources:
|
||||
1. [How do I run my bot behind a proxy?](#proxy)
|
||||
1. [Can you add feature X to the library?](#new-feature)
|
||||
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>
|
||||
### How do I send GIFs?
|
||||
@ -67,7 +69,9 @@ Sources:
|
||||
<a name="error-meanings"></a>
|
||||
### What does this error mean?
|
||||
|
||||
*Not done. PRs welcome!*
|
||||
* [502 Bad Gateway](https://github.com/yagop/node-telegram-bot-api/issues/377)
|
||||
|
||||
*Not complete. PRs welcome!*
|
||||
|
||||
Sources:
|
||||
|
||||
@ -106,6 +110,7 @@ Sources:
|
||||
|
||||
* 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 [#766](https://github.com/yagop/node-telegram-bot-api/issues/766)
|
||||
|
||||
<a name="new-feature"></a>
|
||||
### Can you add feature X to the library?
|
||||
@ -125,4 +130,22 @@ Sources:
|
||||
|
||||
* 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
|
||||
|
@ -1,5 +1,12 @@
|
||||
# Tutorials
|
||||
|
||||
* [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
|
||||
|
88
doc/usage.md
88
doc/usage.md
@ -1,24 +1,31 @@
|
||||
# Usage
|
||||
|
||||
* [Events](#events)
|
||||
* [WebHooks](#webhooks)
|
||||
* [Sending files](#sending-files)
|
||||
* [Error handling](#error-handling)
|
||||
- [Usage](#usage)
|
||||
- [Events](#events)
|
||||
- [WebHooks](#webhooks)
|
||||
- [Sending files](#sending-files)
|
||||
- [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>
|
||||
## Events
|
||||
|
||||
*TelegramBot* is an event-emitter that emits the following events:
|
||||
*TelegramBot* is an [EventEmitter](https://nodejs.org/api/events.html#events_class_eventemitter)
|
||||
that emits the following events:
|
||||
|
||||
1. `message`: Received a new incoming [Message][message] of any kind
|
||||
1. Depending on the properties of the [Message][message], one of these
|
||||
events will **ALSO** be emitted: `text`, `audio`, `document`, `photo`,
|
||||
events may **ALSO** be emitted: `text`, `audio`, `document`, `photo`,
|
||||
`sticker`, `video`, `voice`, `contact`, `location`,
|
||||
`new_chat_members`, `left_chat_member`, `new_chat_title`,
|
||||
`new_chat_photo`, `delete_chat_photo`, `group_chat_created`,
|
||||
`game`, `pinned_message`, `migrate_from_chat_id`, `migrate_to_chat_id`,
|
||||
`game`, `pinned_message`, `poll`, `dice`, `migrate_from_chat_id`, `migrate_to_chat_id`,
|
||||
`channel_chat_created`, `supergroup_chat_created`,
|
||||
`successful_payment`, `invoice`, `video_note`
|
||||
1. **Arguments**: `message` ([Message][message]), `metadata` (`{ type?:string }`)
|
||||
1. `new_chat_participant`, `left_chat_participant` are **deprecated**
|
||||
1. `callback_query`: Received a new incoming [Callback Query][callback-query]
|
||||
1. `inline_query`: Received a new incoming [Inline Query][inline-query]
|
||||
@ -32,8 +39,14 @@
|
||||
1. `edited_channel_post_caption`
|
||||
1. `shipping_query`: Received a new incoming shipping query
|
||||
1. `pre_checkout_query`: Received a new incoming pre-checkout query
|
||||
1. `polling_error`: Error occurred during polling. See [polling errors](#polling-errors).
|
||||
1. `webhook_error`: Error occurred handling a webhook request. See [webhook errors](#webhook-errors).
|
||||
1. `poll`: Received a new incoming poll
|
||||
2. `poll_answer`: A user has changed their answer in a non-anonymous poll (Only polls sent by the bot)
|
||||
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
|
||||
`message` in order to stay safe from the content.
|
||||
@ -113,6 +126,63 @@ const url = 'https://telegram.org/img/t_logo.png';
|
||||
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>
|
||||
### Performance Issue
|
||||
|
||||
|
@ -39,7 +39,7 @@ bot.onText(/\/start/, function onPhotoText(msg) {
|
||||
|
||||
// Handle callback queries
|
||||
bot.on('callback_query', function onCallbackQuery(callbackQuery) {
|
||||
bot.answerCallbackQuery(callbackQuery.id, url, true, { url });
|
||||
bot.answerCallbackQuery(callbackQuery.id, { url });
|
||||
});
|
||||
|
||||
// Render the HTML game
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
const TOKEN = process.env.TELEGRAM_TOKEN || 'YOUR_TELEGRAM_BOT_TOKEN';
|
||||
const TelegramBot = require('..');
|
||||
const request = require('request');
|
||||
const request = require('@cypress/request');
|
||||
const options = {
|
||||
polling: true
|
||||
};
|
||||
@ -62,8 +62,8 @@ bot.onText(/\/editable/, function onEditableText(msg) {
|
||||
[
|
||||
{
|
||||
text: 'Edit Text',
|
||||
// we shall check for this value when we listen
|
||||
// for "callback_query"
|
||||
// we shall check for this value when we listen
|
||||
// for "callback_query"
|
||||
callback_data: 'edit'
|
||||
}
|
||||
]
|
||||
|
@ -8,9 +8,8 @@ const TOKEN = process.env.TELEGRAM_TOKEN || 'YOUR_TELEGRAM_BOT_TOKEN';
|
||||
const url = 'https://<PUBLIC-URL>';
|
||||
const port = process.env.PORT;
|
||||
|
||||
const TelegramBot = require('..');
|
||||
const TelegramBot = require('../..');
|
||||
const express = require('express');
|
||||
const bodyParser = require('body-parser');
|
||||
|
||||
// No need to pass any parameters as we will handle the updates with Express
|
||||
const bot = new TelegramBot(TOKEN);
|
||||
@ -21,7 +20,7 @@ bot.setWebHook(`${url}/bot${TOKEN}`);
|
||||
const app = express();
|
||||
|
||||
// parse the updates to JSON
|
||||
app.use(bodyParser.json());
|
||||
app.use(express.json());
|
||||
|
||||
// We are receiving updates at the route below!
|
||||
app.post(`/bot${TOKEN}`, (req, res) => {
|
@ -5,7 +5,7 @@
|
||||
|
||||
|
||||
const TOKEN = process.env.TELEGRAM_TOKEN || 'YOUR_TELEGRAM_BOT_TOKEN';
|
||||
const TelegramBot = require('..');
|
||||
const TelegramBot = require('../..');
|
||||
const options = {
|
||||
webHook: {
|
||||
// Port to which you should bind is assigned to $PORT variable
|
@ -5,12 +5,12 @@
|
||||
|
||||
|
||||
const TOKEN = process.env.TELEGRAM_TOKEN || 'YOUR_TELEGRAM_BOT_TOKEN';
|
||||
const TelegramBot = require('..');
|
||||
const TelegramBot = require('../..');
|
||||
const options = {
|
||||
webHook: {
|
||||
port: 443,
|
||||
key: `${__dirname}/key.pem`, // Path to file with PEM private key
|
||||
cert: `${__dirname}/crt.pem` // Path to file with PEM certificate
|
||||
key: `${__dirname}/../ssl/key.pem`, // Path to file with PEM private key
|
||||
cert: `${__dirname}/../ssl/crt.pem` // Path to file with PEM certificate
|
||||
}
|
||||
};
|
||||
// This URL must route to the port set above (i.e. 443)
|
@ -6,7 +6,7 @@
|
||||
|
||||
|
||||
const TOKEN = process.env.TELEGRAM_TOKEN || 'YOUR_TELEGRAM_BOT_TOKEN';
|
||||
const TelegramBot = require('..');
|
||||
const TelegramBot = require('../..');
|
||||
const options = {
|
||||
webHook: {
|
||||
// Just use 443 directly
|
@ -1,11 +1,23 @@
|
||||
/**
|
||||
* This example demonstrates setting up webhook
|
||||
* 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 TelegramBot = require('..');
|
||||
const TelegramBot = require('../..');
|
||||
// See https://developers.openshift.com/en/node-js-environment-variables.html
|
||||
const options = {
|
||||
webHook: {
|
2
index.js
2
index.js
@ -5,7 +5,7 @@
|
||||
*/
|
||||
const majorVersion = parseInt(process.versions.node.split('.')[0], 10);
|
||||
if (majorVersion <= 5) {
|
||||
const deprecate = require('depd')('node-telegram-bot-api');
|
||||
const deprecate = require('./src/utils').deprecate;
|
||||
deprecate('Node.js v5.x and below will no longer be supported in the future');
|
||||
module.exports = require('./lib/telegram');
|
||||
} else {
|
||||
|
409
package.json
409
package.json
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "node-telegram-bot-api",
|
||||
"version": "0.28.0",
|
||||
"version": "0.68.0",
|
||||
"description": "Telegram Bot API",
|
||||
"main": "./index.js",
|
||||
"directories": {
|
||||
@ -14,9 +14,10 @@
|
||||
"bot"
|
||||
],
|
||||
"scripts": {
|
||||
"gen-doc": "jsdoc2md --files src/telegram.js --template doc/api.hbs > doc/api.md",
|
||||
"gen-doc": "echo 'WARNING: `npm run gen-doc` is deprecated. Use `npm run doc` instead.' && npm run doc",
|
||||
"doc": "jsdoc2md --files src/telegram.js --template doc/api.hbs > doc/api.md",
|
||||
"build": "babel -d ./lib src",
|
||||
"prepublish": "npm run build && npm run gen-doc",
|
||||
"prepublishOnly": "npm run build && npm run gen-doc",
|
||||
"eslint": "eslint ./src ./test ./examples",
|
||||
"mocha": "mocha",
|
||||
"pretest": "npm run build",
|
||||
@ -28,41 +29,39 @@
|
||||
"node": ">=0.12"
|
||||
},
|
||||
"dependencies": {
|
||||
"array.prototype.findindex": "^2.0.0",
|
||||
"bl": "^1.1.2",
|
||||
"bluebird": "^3.3.4",
|
||||
"debug": "^2.2.0",
|
||||
"depd": "^1.1.0",
|
||||
"eventemitter3": "^2.0.2",
|
||||
"@cypress/request": "^3.0.8",
|
||||
"@cypress/request-promise": "^5.0.0",
|
||||
"array.prototype.findindex": "^2.0.2",
|
||||
"bl": "^1.2.3",
|
||||
"debug": "^3.2.7",
|
||||
"eventemitter3": "^3.0.0",
|
||||
"file-type": "^3.9.0",
|
||||
"mime": "^1.3.4",
|
||||
"pump": "^1.0.1",
|
||||
"request": "^2.69.0",
|
||||
"request-promise": "^4.1.1"
|
||||
"mime": "^1.6.0",
|
||||
"pump": "^2.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"babel-cli": "^6.6.5",
|
||||
"babel-eslint": "^6.1.2",
|
||||
"babel-plugin-transform-class-properties": "^6.6.0",
|
||||
"babel-plugin-transform-es2015-destructuring": "^6.6.5",
|
||||
"babel-plugin-transform-es2015-parameters": "^6.7.0",
|
||||
"babel-plugin-transform-es2015-shorthand-properties": "^6.5.0",
|
||||
"babel-plugin-transform-es2015-spread": "^6.6.5",
|
||||
"babel-plugin-transform-object-rest-spread": "^6.6.5",
|
||||
"babel-plugin-transform-strict-mode": "^6.6.5",
|
||||
"babel-preset-es2015": "^6.6.0",
|
||||
"babel-register": "^6.7.2",
|
||||
"contributor": "^0.1.25",
|
||||
"babel-cli": "^6.26.0",
|
||||
"babel-eslint": "^8.0.3",
|
||||
"babel-plugin-transform-class-properties": "^6.24.1",
|
||||
"babel-plugin-transform-es2015-destructuring": "^6.23.0",
|
||||
"babel-plugin-transform-es2015-parameters": "^6.24.1",
|
||||
"babel-plugin-transform-es2015-shorthand-properties": "^6.24.1",
|
||||
"babel-plugin-transform-es2015-spread": "^6.22.0",
|
||||
"babel-plugin-transform-object-rest-spread": "^6.26.0",
|
||||
"babel-plugin-transform-strict-mode": "^6.24.1",
|
||||
"babel-preset-es2015": "^6.24.1",
|
||||
"babel-register": "^6.26.0",
|
||||
"concat-stream": "^1.6.0",
|
||||
"eslint": "^2.13.1",
|
||||
"eslint-config-airbnb": "^6.2.0",
|
||||
"eslint-plugin-mocha": "^4.8.0",
|
||||
"is": "^3.1.0",
|
||||
"eslint-plugin-mocha": "^4.11.0",
|
||||
"is": "^3.2.1",
|
||||
"is-ci": "^1.0.10",
|
||||
"istanbul": "^1.1.0-alpha.1",
|
||||
"jsdoc-to-markdown": "^2.0.1",
|
||||
"mocha": "^3.2.0",
|
||||
"mocha-lcov-reporter": "^1.2.0",
|
||||
"node-static": "^0.7.9"
|
||||
"jsdoc-to-markdown": "^3.0.3",
|
||||
"mocha": "^3.5.3",
|
||||
"mocha-lcov-reporter": "^1.3.0",
|
||||
"node-static": "^0.7.10"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@ -71,349 +70,5 @@
|
||||
"bugs": {
|
||||
"url": "https://github.com/yagop/node-telegram-bot-api/issues"
|
||||
},
|
||||
"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
|
||||
}
|
||||
]
|
||||
}
|
||||
"homepage": "https://github.com/yagop/node-telegram-bot-api"
|
||||
}
|
@ -10,6 +10,12 @@ exports.BaseError = class BaseError extends Error {
|
||||
super(`${code}: ${message}`);
|
||||
this.code = code;
|
||||
}
|
||||
toJSON() {
|
||||
return {
|
||||
code: this.code,
|
||||
message: this.message,
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@ -24,7 +30,10 @@ exports.FatalError = class FatalError extends exports.BaseError {
|
||||
const error = (typeof data === 'string') ? null : data;
|
||||
const message = error ? error.message : data;
|
||||
super('EFATAL', message);
|
||||
if (error) this.stack = error.stack;
|
||||
if (error) {
|
||||
this.stack = error.stack;
|
||||
this.cause = error;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
3902
src/telegram.js
3902
src/telegram.js
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,6 @@
|
||||
const errors = require('./errors');
|
||||
const debug = require('debug')('node-telegram-bot-api');
|
||||
const deprecate = require('depd')('node-telegram-bot-api');
|
||||
const deprecate = require('./utils').deprecate;
|
||||
const ANOTHER_WEB_HOOK_USED = 409;
|
||||
|
||||
|
||||
@ -49,7 +50,7 @@ class TelegramBotPolling {
|
||||
|
||||
/**
|
||||
* Stop polling
|
||||
* @param {Object} [options]
|
||||
* @param {Object} [options] Options
|
||||
* @param {Boolean} [options.cancel] Cancel current request
|
||||
* @param {String} [options.reason] Reason for stopping polling
|
||||
* @return {Promise}
|
||||
@ -79,6 +80,18 @@ class TelegramBotPolling {
|
||||
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!)
|
||||
* @return {Promise} promise of the current request
|
||||
@ -93,18 +106,59 @@ class TelegramBotPolling {
|
||||
updates.forEach(update => {
|
||||
this.options.params.offset = update.update_id + 1;
|
||||
debug('updated offset: %s', this.options.params.offset);
|
||||
this.bot.processUpdate(update);
|
||||
try {
|
||||
this.bot.processUpdate(update);
|
||||
} catch (err) {
|
||||
err._processing = true;
|
||||
throw err;
|
||||
}
|
||||
});
|
||||
return null;
|
||||
})
|
||||
.catch(err => {
|
||||
debug('polling error: %s', err.message);
|
||||
if (this.bot.listeners('polling_error').length) {
|
||||
this.bot.emit('polling_error', err);
|
||||
} else {
|
||||
console.error(err); // eslint-disable-line no-console
|
||||
if (!err._processing) {
|
||||
return this._error(err);
|
||||
}
|
||||
return null;
|
||||
delete err._processing;
|
||||
/*
|
||||
* 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(() => {
|
||||
if (this._abort) {
|
||||
|
@ -4,8 +4,6 @@ const https = require('https');
|
||||
const http = require('http');
|
||||
const fs = require('fs');
|
||||
const bl = require('bl');
|
||||
const Promise = require('bluebird');
|
||||
|
||||
|
||||
class TelegramBotWebHook {
|
||||
/**
|
||||
@ -52,12 +50,16 @@ class TelegramBotWebHook {
|
||||
if (this.isOpen()) {
|
||||
return Promise.resolve();
|
||||
}
|
||||
return new Promise(resolve => {
|
||||
return new Promise((resolve, reject) => {
|
||||
this._webServer.listen(this.options.port, this.options.host, () => {
|
||||
debug('WebHook listening on port %s', this.options.port);
|
||||
this._open = true;
|
||||
return resolve();
|
||||
});
|
||||
|
||||
this._webServer.once('error', (err) => {
|
||||
reject(err);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
@ -97,7 +99,7 @@ class TelegramBotWebHook {
|
||||
*/
|
||||
_error(error) {
|
||||
if (!this.bot.listeners('webhook_error').length) {
|
||||
return console.error(error); // eslint-disable-line no-console
|
||||
return console.error('error: [webhook_error] %j', error); // eslint-disable-line no-console
|
||||
}
|
||||
return this.bot.emit('webhook_error', error);
|
||||
}
|
||||
|
3
src/utils.js
Normal file
3
src/utils.js
Normal file
@ -0,0 +1,3 @@
|
||||
const util = require('util');
|
||||
// Native deprecation warning
|
||||
exports.deprecate = (msg) => util.deprecate(() => { }, msg, 'node-telegram-bot-api')();
|
@ -10,9 +10,14 @@ export TEST_USER_ID=<USER_ID>
|
||||
# Group Id which to use in some of the tests, e.g. for TelegramBot#getChat()
|
||||
export TEST_GROUP_ID=<GROUP_ID>
|
||||
|
||||
# Game short name which to use in some of the tests, e.g. TelegramBot#sendGame()
|
||||
# Game short name to use in some tests, e.g. TelegramBot#sendGame()
|
||||
# Defaults to "medusalab_test".
|
||||
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
|
||||
export TEST_PROVIDER_TOKEN=<YOUR_PROVIDER_TOKEN>
|
||||
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 14 KiB |
BIN
test/data/photo.png
Normal file
BIN
test/data/photo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 14 KiB |
BIN
test/data/sticker.png
Normal file
BIN
test/data/sticker.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 52 KiB |
BIN
test/data/sticker_thumb.png
Normal file
BIN
test/data/sticker_thumb.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 14 KiB |
1870
test/telegram.js
1870
test/telegram.js
File diff suppressed because it is too large
Load Diff
139
test/test.format-send-data.js
Normal file
139
test/test.format-send-data.js
Normal file
@ -0,0 +1,139 @@
|
||||
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);
|
||||
});
|
||||
});
|
||||
});
|
@ -30,6 +30,13 @@ exports = module.exports = {
|
||||
* @return {Promise}
|
||||
*/
|
||||
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.
|
||||
* @param {Number} port
|
||||
@ -74,8 +81,7 @@ exports = module.exports = {
|
||||
|
||||
const assert = require('assert');
|
||||
const http = require('http');
|
||||
const Promise = require('bluebird');
|
||||
const request = require('request-promise');
|
||||
const request = require('@cypress/request-promise');
|
||||
const statics = require('node-static');
|
||||
|
||||
const servers = {};
|
||||
@ -217,3 +223,8 @@ function handleRatelimit(bot, methodName, suite) {
|
||||
};
|
||||
return bot;
|
||||
}
|
||||
|
||||
|
||||
function isTelegramFileURI(uri) {
|
||||
return /https?:\/\/.*\/file\/bot.*\/.*/.test(uri);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user