diff --git a/CHANGELOG.md b/CHANGELOG.md index 5e1fcaa..a75a6c0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,9 @@ This project adheres to [Semantic Versioning](http://semver.org/). Added: -* Add support for Node.js v9 +1. Add `metadata` argument in `message` event (and + friends e.g. `text`, `audio`, etc.) (#409) (by @jlsjonas, @GochoMugo) +1. Add support for Node.js v9 (by @GochoMugo) Changed: diff --git a/doc/usage.md b/doc/usage.md index 900c4b8..3a17700 100644 --- a/doc/usage.md +++ b/doc/usage.md @@ -8,17 +8,19 @@ ## 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`, `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] diff --git a/src/telegram.js b/src/telegram.js index daa62f0..86c9194 100644 --- a/src/telegram.js +++ b/src/telegram.js @@ -531,14 +531,15 @@ class TelegramBot extends EventEmitter { if (message) { debug('Process Update message %j', message); - this.emit('message', message); - const processMessageType = messageType => { - if (message[messageType]) { - debug('Emitting %s: %j', messageType, message); - this.emit(messageType, message); - } - }; - TelegramBot.messageTypes.forEach(processMessageType); + const metadata = {}; + metadata.type = TelegramBot.messageTypes.find((messageType) => { + return message[messageType]; + }); + this.emit('message', message, metadata); + if (metadata.type) { + debug('Emitting %s: %j', metadata.type, message); + this.emit(metadata.type, message, metadata); + } if (message.text) { debug('Text message'); this._textRegexpCallbacks.some(reg => {