feat(dispatcher): lastMessage and lastReceivedMessage getters for Conversation
This commit is contained in:
parent
66e623f21d
commit
3fcdd03877
1 changed files with 41 additions and 2 deletions
|
@ -106,14 +106,25 @@ interface QueuedHandler<T> {
|
||||||
timeout?: NodeJS.Timeout
|
timeout?: NodeJS.Timeout
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a conversation inside some chat.
|
||||||
|
*
|
||||||
|
* A conversation keeps track of any messages sent or edited
|
||||||
|
* since it was started and until it was stopped,
|
||||||
|
* and allows waiting for events in it.
|
||||||
|
*
|
||||||
|
* If you need a conversation across multiple chats,
|
||||||
|
* you should use multiple {@link Conversation} objects
|
||||||
|
* and synchronize them manually.
|
||||||
|
*/
|
||||||
export class Conversation {
|
export class Conversation {
|
||||||
private _inputPeer: tl.TypeInputPeer
|
private _inputPeer: tl.TypeInputPeer
|
||||||
private _chatId: number
|
private _chatId: number
|
||||||
private _client: TelegramClient
|
private _client: TelegramClient
|
||||||
private _started = false
|
private _started = false
|
||||||
|
|
||||||
private _lastMessage?: number
|
private _lastMessage: number
|
||||||
private _lastReceivedMessage?: number
|
private _lastReceivedMessage: number
|
||||||
|
|
||||||
private _queuedNewMessage = new Queue<QueuedHandler<Message>>()
|
private _queuedNewMessage = new Queue<QueuedHandler<Message>>()
|
||||||
private _pendingNewMessages = new Queue<Message>()
|
private _pendingNewMessages = new Queue<Message>()
|
||||||
|
@ -144,6 +155,31 @@ export class Conversation {
|
||||||
return this._inputPeer
|
return this._inputPeer
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ID of the very last message in this conversation.
|
||||||
|
*/
|
||||||
|
get lastMessage(): number {
|
||||||
|
if (!this._started) {
|
||||||
|
throw new MtCuteArgumentError("Conversation hasn't started yet")
|
||||||
|
}
|
||||||
|
|
||||||
|
return this._lastMessage
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ID of the last incoming message in this conversation.
|
||||||
|
*
|
||||||
|
* Note that before any messages were received since the {@link start}
|
||||||
|
* of the conversation, this will equal to {@link lastMessage}
|
||||||
|
*/
|
||||||
|
get lastReceivedMessage(): number {
|
||||||
|
if (!this._started) {
|
||||||
|
throw new MtCuteArgumentError("Conversation hasn't started yet")
|
||||||
|
}
|
||||||
|
|
||||||
|
return this._lastReceivedMessage
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Start the conversation
|
* Start the conversation
|
||||||
*/
|
*/
|
||||||
|
@ -162,6 +198,9 @@ export class Conversation {
|
||||||
this._inputPeer = await client.resolvePeer(this.chat)
|
this._inputPeer = await client.resolvePeer(this.chat)
|
||||||
this._chatId = getMarkedPeerId(this._inputPeer)
|
this._chatId = getMarkedPeerId(this._inputPeer)
|
||||||
|
|
||||||
|
const dialog = await client.getPeerDialogs(this._inputPeer)
|
||||||
|
this._lastMessage = this._lastReceivedMessage = dialog.lastMessage.id
|
||||||
|
|
||||||
this.dispatcher.on('new_message', this._onNewMessage)
|
this.dispatcher.on('new_message', this._onNewMessage)
|
||||||
this.dispatcher.on('edit_message', this._onEditMessage)
|
this.dispatcher.on('edit_message', this._onEditMessage)
|
||||||
this.dispatcher.on('history_read', this._onHistoryRead)
|
this.dispatcher.on('history_read', this._onHistoryRead)
|
||||||
|
|
Loading…
Reference in a new issue