Jelajahi Sumber

Refetch sender when not found in message

painor 4 tahun lalu
induk
melakukan
4518b82f62

+ 1 - 1
gramjs/Version.ts

@@ -1 +1 @@
-export const version = "1.5.26";
+export const version = "1.5.27";

+ 5 - 4
gramjs/client/TelegramClient.ts

@@ -141,11 +141,11 @@ export class TelegramClient extends TelegramBaseClient {
 
     //endregion
     // region messages
-    iterMessages(entity: EntityLike, params: messageMethods.IterMessagesParams) {
+    iterMessages(entity: EntityLike | undefined, params: messageMethods.IterMessagesParams) {
         return messageMethods.iterMessages(this, entity, params)
     }
 
-    getMessages(entity: EntityLike, params: messageMethods.IterMessagesParams) {
+    getMessages(entity: EntityLike | undefined, params: messageMethods.IterMessagesParams) {
         return messageMethods.getMessages(this, entity, params);
     }
 
@@ -156,6 +156,7 @@ export class TelegramClient extends TelegramBaseClient {
     editMessage(entity: EntityLike, params: messageMethods.EditMessageParams) {
         return messageMethods.editMessage(this, entity, params)
     }
+
     //endregion
 
     //region chats
@@ -324,7 +325,7 @@ export class TelegramClient extends TelegramBaseClient {
         return this.connect()
     }
 
-    async _createExportedSender(dcId: number, retries: number):Promise<MTProtoSender> {
+    async _createExportedSender(dcId: number, retries: number): Promise<MTProtoSender> {
         const dc = await this.getDC(dcId);
         const sender = new MTProtoSender(this.session.getAuthKey(dcId),
             {
@@ -367,7 +368,7 @@ export class TelegramClient extends TelegramBaseClient {
                 await sender.disconnect()
             }
         }
-        throw new Error("Could not create sender for DC "+dcId)
+        throw new Error("Could not create sender for DC " + dcId)
     }
 
     async getDC(dcId: number): Promise<{ id: number, ipAddress: string, port: number }> {

+ 14 - 14
gramjs/client/messages.ts

@@ -330,12 +330,12 @@ export class _IDsIter extends RequestIter {
             if (message instanceof Api.MessageEmpty || fromId && message.peerId != fromId) {
                 this.buffer?.push(undefined)
             } else {
-                const temp:Message = message as unknown as Message;
-                try{
-                    temp._finishInit(this.client,entities,this._entity);
-                }catch (e) {
+                const temp: Message = message as unknown as Message;
+                try {
+                    temp._finishInit(this.client, entities, this._entity);
+                } catch (e) {
                     // we don't care about errors here
-                    this.client._log.warn("Failed to finish entities for message "+temp.id);
+                    this.client._log.warn("Failed to finish entities for message " + temp.id);
                 }
                 temp._entities = entities;
                 this.buffer?.push(temp);
@@ -388,7 +388,7 @@ export interface EditMessageParams {
 
 //  MessageMethods {
 
-export function iterMessages(client: TelegramClient, entity: EntityLike, {limit, offsetDate, offsetId, maxId, minId, addOffset, search, filter, fromUser, waitTime, ids, reverse = false, replyTo}: IterMessagesParams) {
+export function iterMessages(client: TelegramClient, entity: EntityLike | undefined, {limit, offsetDate, offsetId, maxId, minId, addOffset, search, filter, fromUser, waitTime, ids, reverse = false, replyTo}: IterMessagesParams) {
     if (ids) {
         if (typeof ids == 'number') {
             ids = [ids]
@@ -418,7 +418,7 @@ export function iterMessages(client: TelegramClient, entity: EntityLike, {limit,
     })
 }
 
-export async function getMessages(client: TelegramClient, entity: EntityLike, params: IterMessagesParams): Promise<TotalList<Message>> {
+export async function getMessages(client: TelegramClient, entity: EntityLike | undefined, params: IterMessagesParams): Promise<TotalList<Message>> {
     if (Object.keys(params).length == 1 && params.limit === undefined) {
         if (params.minId === undefined && params.maxId === undefined) {
             params.limit = undefined;
@@ -543,14 +543,14 @@ export async function editMessage(client: TelegramClient,
         [text, formattingEntities] = await client._parseMessageText(text, parseMode);
     }
     const msg = await client.invoke(new Api.messages.EditMessage({
-        peer:entity,
-        id:utils.getMessageId(message),
-        message:text,
-        noWebpage:!linkPreview,
-        entities:formattingEntities,
+        peer: entity,
+        id: utils.getMessageId(message),
+        message: text,
+        noWebpage: !linkPreview,
+        entities: formattingEntities,
         //media: no media for now,
-        replyMarkup:client.buildReplyMarkup(buttons),
-        scheduleDate:schedule,
+        replyMarkup: client.buildReplyMarkup(buttons),
+        scheduleDate: schedule,
     }));
     return msg;
     //return client._getResponseMessage(request, result, entity);

+ 1 - 0
gramjs/events/NewMessage.ts

@@ -59,6 +59,7 @@ export class NewMessage extends EventBuilder {
             this.addAttributes(event);
             return event;
         } else if (update instanceof Api.UpdateShortMessage) {
+
             return new NewMessageEvent(new Message({
                 out: update.out,
                 mentioned: update.mentioned,

+ 5 - 1
gramjs/tl/custom/chatGetter.ts

@@ -49,7 +49,11 @@ export class ChatGetter {
 
     get inputChat() {
         if (!this._inputChat && this._chatPeer && this._client) {
-            this._inputChat = this._client._entityCache.get(this._chatPeer);
+            try{
+                this._inputChat = this._client._entityCache.get(this._chatPeer);
+            }catch (e) {
+
+            }
         }
         return this._inputChat;
     }

+ 38 - 20
gramjs/tl/custom/message.ts

@@ -215,7 +215,7 @@ export class Message extends Mixin(SenderGetter, ChatGetter) {
     }
 
     get text() {
-        if (this._text===undefined && this._client) {
+        if (this._text === undefined && this._client) {
             if (!this._client.parseMode) {
                 this._text = this.message
             } else {
@@ -256,6 +256,43 @@ export class Message extends Mixin(SenderGetter, ChatGetter) {
         return this._forward
     }
 
+    async _refetchSender() {
+        await this._reloadMessage()
+    }
+
+    /**
+     * Re-fetches this message to reload the sender and chat entities,
+     * along with their input versions.
+     * @private
+     */
+    async _reloadMessage() {
+        if (!this._client) return;
+        let msg: Message | undefined = undefined;
+        try {
+            const chat = this.isChannel ? await this.getInputChat() : undefined;
+            let temp = await this._client.getMessages(chat, {ids: this.id});
+            if (temp) {
+                msg = temp[0];
+            }
+
+        } catch (e) {
+            this._client._log.error("Got error while trying to finish init message with id " + this.id);
+            if (this._client._log.canSend('error')) {
+                console.log(e);
+            }
+        }
+        if (msg == undefined) return;
+
+        this._sender = msg._sender;
+        this._inputSender = msg._inputSender;
+        this._chat = msg._chat;
+        this._inputChat = msg._inputChat;
+        this._viaBot = msg._viaBot;
+        this._viaInputBot = msg._viaInputBot;
+        this._forward = msg._forward;
+        this._actionEntities = msg._actionEntities
+    }
+
     /*
 
         get buttons() {
@@ -600,27 +637,8 @@ export class Message extends Mixin(SenderGetter, ChatGetter) {
                 }
             }
 
-            async _reloadMessage() {
-                if (!this._client) return;
-
-                const chat = this.isChannel ? this.getInputChat() : undefined;
-                const msg = this._client.getMessages({chat, ids: this.id});
 
-                if (!msg) return;
 
-                this._sender = msg._sender;
-                this._inputSender = msg._inputender;
-                this._chat = msg._chat;
-                this._inputChat = msg._inputChat;
-                this._viaBot = msg._viaBot;
-                this._viaInputBot = msg._viaInputBot;
-                this._forward = msg._forward;
-                this._actionEntities = msg._actionEntities
-            }
-
-            async _refetchSender() {
-                await this._reloadMessage()
-            }
 
             _setButtons(chat, bot) {
                 // TODO: Implement MessageButton

+ 7 - 2
gramjs/tl/custom/senderGetter.ts

@@ -32,7 +32,7 @@ export class SenderGetter {
     }
 
     async getSender() {
-        if (this._client && (!this._sender || !(this._sender instanceof Api.Channel) || this._sender.min && await this.getInputSender())) {
+        if (this._client && (!this._sender || ((this._sender instanceof Api.Channel) && this._sender.min)) && (await this.getInputSender())) {
             try {
                 this._sender = await this._client.getEntity(this._inputSender);
             } catch (e) {
@@ -47,7 +47,12 @@ export class SenderGetter {
 
     get inputSender() {
         if (!this._inputSender && this._senderId && this._client) {
-            this._inputSender = this._client._entityCache.get(this._senderId);
+            try {
+                this._inputSender = this._client._entityCache.get(this._senderId);
+
+            }catch (e) {
+
+            }
 
         }
         return this._inputSender;

File diff ditekan karena terlalu besar
+ 11434 - 2
package-lock.json


+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "telegram",
-  "version": "1.5.26",
+  "version": "1.5.27",
   "description": "NodeJS MTProto API Telegram client library,",
   "main": "index.js",
   "types": "index.d.ts",

Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini