Przeglądaj źródła

Patched logger; updated console.logs; adding to NewMessage

Chris Watson 5 lat temu
rodzic
commit
d2c7bec74e

+ 10 - 11
gramjs/client/TelegramClient.js

@@ -158,7 +158,7 @@ class TelegramClient {
     async _updateLoop() {
         while (this.isConnected()) {
             const rnd = Helpers.getRandomInt(Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER)
-            console.log('rnd is ', rnd)
+            this._log.debug('rnd is', rnd)
             await Helpers.sleep(1000 * 60)
             // We don't care about the result we just want to send it every
             // 60 seconds so telegram doesn't stop the connection
@@ -167,7 +167,7 @@ class TelegramClient {
                     pingId: rnd,
                 }))
             } catch (e) {
-                console.log('err is ', e)
+                this._log.error('err is', e)
             }
 
             // this.session.save()
@@ -181,7 +181,7 @@ class TelegramClient {
                 try {
                     await this.invoke(new functions.updates.GetStateRequest())
                 } catch (e) {
-                    console.log('err is ', e)
+                    this._log.error('err is', e)
                 }
             }
         }
@@ -395,7 +395,7 @@ class TelegramClient {
                     e instanceof errors.PhoneCodeExpiredError ||
                     e instanceof errors.PhoneCodeHashEmptyError ||
                     e instanceof errors.PhoneCodeInvalidError) {
-                    console.log('Invalid code. Please try again.')
+                    this._log.error('Invalid code. Please try again.')
                 } else {
                     throw e
                 }
@@ -420,8 +420,8 @@ class TelegramClient {
                         })
                         break
                     } catch (e) {
-                        console.log(e)
-                        console.log('Invalid password. Please try again')
+                        this._log.error(e)
+                        this._log.error('Invalid password. Please try again')
                     }
                 }
             } else {
@@ -433,7 +433,7 @@ class TelegramClient {
 
         }
         const name = utils.getDisplayName(me)
-        console.log('Signed in successfully as' + name)
+        this._log.error('Signed in successfully as', name)
         return this
     }
 
@@ -562,7 +562,7 @@ class TelegramClient {
 
 
     // event region
-    addEventHandler(callback, event) {
+    addEventHandler(event, callback) {
         this._eventBuilders.push([event, callback])
     }
 
@@ -830,7 +830,7 @@ class TelegramClient {
                 return utils.getInputPeer(channels.chats[0])
                 // eslint-disable-next-line no-empty
             } catch (e) {
-                console.log(e)
+                this._log.error(e)
             }
         }
         throw new Error(`Could not find the input entity for ${peer.id || peer.channelId || peer.chatId || peer.userId}.
@@ -1057,7 +1057,6 @@ class TelegramClient {
         let which
         let loc
         if (photo instanceof types.UserProfilePhoto || photo instanceof types.ChatPhoto) {
-            console.log('i am ere')
             dcId = photo.dcId
             which = downloadBig ? photo.photoBig : photo.photoSmall
             loc = new types.InputPeerPhotoFileLocation({
@@ -1066,7 +1065,7 @@ class TelegramClient {
                 volumeId: which.volumeId,
                 big: downloadBig,
             })
-            console.log(loc)
+            this._log.debug(loc)
         } else {
             // It doesn't make any sense to check if `photo` can be used
             // as input location, because then this method would be able

+ 60 - 20
gramjs/events/NewMessage.js

@@ -2,15 +2,24 @@ const { EventBuilder, EventCommon } = require('./common')
 const { types } = require('../tl')
 
 class NewMessage extends EventBuilder {
-    constructor(args = {
-        chats: null,
-        func: null,
-    }) {
-        super(args)
-
-        this.chats = args.chats
-        this.func = args.func
-        this._noCheck = true
+    constructor({
+        outgoing = true,
+        incoming = false,
+        fromUsers = [],
+        forwards = true,
+        pattern = undefined,
+    } = {}) {
+        super()
+
+        this.outgoing = outgoing
+        this.incoming = incoming
+        this.fromUsers = fromUsers
+        this.forwards = forwards
+        this.pattern = pattern
+
+        if (!this.outgoing && !this.incoming) {
+            throw new Error('one of incoming or outgoing must be true')
+        }
     }
 
     async _resolve(client) {
@@ -20,14 +29,14 @@ class NewMessage extends EventBuilder {
 
     build(update, others = null, thisId = null) {
         let event
+
+        if (!this.filter(update)) return
+
         if (update instanceof types.UpdateNewMessage || update instanceof types.UpdateNewChannelMessage) {
-            if (!(update.message instanceof types.Message)) {
-                return
-            }
             event = new Event(update.message)
         } else if (update instanceof types.UpdateShortMessage) {
             event = new Event(new types.Message({
-                out: update.out,
+                out: update.out || false,
                 mentioned: update.mentioned,
                 mediaUnread: update.mediaUnread,
                 silent: update.silent,
@@ -41,11 +50,11 @@ class NewMessage extends EventBuilder {
                 fwdFrom: update.fwdFrom,
                 viaBotId: update.viaBotId,
                 replyToMsgId: update.replyToMsgId,
-                entities: update.entities,
+                entities: update.entities || [],
             }))
         } else if (update instanceof types.UpdateShortChatMessage) {
             event = new this.Event(new types.Message({
-                out: update.out,
+                out: update.out || false,
                 mentioned: update.mentioned,
                 mediaUnread: update.mediaUnread,
                 silent: update.silent,
@@ -57,7 +66,7 @@ class NewMessage extends EventBuilder {
                 fwdFrom: update.fwdFrom,
                 viaBotId: update.viaBotId,
                 replyToMsgId: update.replyToMsgId,
-                entities: update.entities,
+                entities: update.entities || [],
             }))
         } else {
             return
@@ -74,11 +83,42 @@ class NewMessage extends EventBuilder {
         return event
     }
 
-    filter(event) {
-        if (this._noCheck) {
-            return event
+    filter(update) {
+        const message = update.message
+
+        // Make sure this is a message object in the first place
+        if (!(message instanceof types.Message)) {
+            return false
         }
-        return event
+
+        // Check if the message is incoming or outgoing, and if
+        // we want to accept whichever one it is
+        if (message.out) {
+            if (!this.outgoing) return false
+        } else {
+            if (!this.incoming) return false
+        }
+
+        // See if the message was sent by one of the `fromUsers`
+        if (this.fromUsers.length > 0) {
+            const valid = this.fromUsers.map((user) => {
+                const id = 'id' in user ? user.id : user
+                if (message.fromId === id) return true
+                else return false
+            })
+
+            if (!valid.includes(true)) return false
+        }
+
+        // Check if the message was forwarded
+        if (message.fwdFrom && !this.forwards) return false
+
+        // Finally check the message text against a pattern
+        if (this.pattern) {
+            if (!message.message.match(this.pattern)) return false
+        }
+
+        return true
     }
 }
 

+ 8 - 4
gramjs/extensions/Logger.js

@@ -43,28 +43,28 @@ class Logger {
     /**
      * @param message {string}
      */
-    warn(message) {
+    warn(...message) {
         this._log('warn', message, this.colors.warn)
     }
 
     /**
      * @param message {string}
      */
-    info(message) {
+    info(...message) {
         this._log('info', message, this.colors.info)
     }
 
     /**
      * @param message {string}
      */
-    debug(message) {
+    debug(...message) {
         this._log('debug', message, this.colors.debug)
     }
 
     /**
      * @param message {string}
      */
-    error(message) {
+    error(...message) {
         this._log('error', message, this.colors.error)
     }
 
@@ -87,6 +87,10 @@ class Logger {
      * @param color {string}
      */
     _log(level, message, color) {
+        if (Array.isArray(message)) {
+            message = message.join(' ')
+        }
+
         if (this.canSend(level)) {
             if (!this.isBrowser) {
                 console.log(color + this.format(message, level) + this.colors.end)

+ 17 - 17
package-lock.json

@@ -1,6 +1,6 @@
 {
   "name": "telegram",
-  "version": "1.0.0-alpha.1",
+  "version": "1.0.0-alpha.2",
   "lockfileVersion": 1,
   "requires": true,
   "dependencies": {
@@ -1520,9 +1520,9 @@
       "dev": true
     },
     "bluebird": {
-      "version": "3.7.1",
-      "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.1.tgz",
-      "integrity": "sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg==",
+      "version": "3.7.2",
+      "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
+      "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
       "dev": true
     },
     "bn.js": {
@@ -5608,9 +5608,9 @@
       "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
     },
     "serialize-javascript": {
-      "version": "1.9.1",
-      "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.1.tgz",
-      "integrity": "sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==",
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz",
+      "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==",
       "dev": true
     },
     "set-blocking": {
@@ -5971,9 +5971,9 @@
       }
     },
     "stream-shift": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
-      "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=",
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
+      "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==",
       "dev": true
     },
     "string-format": {
@@ -6138,9 +6138,9 @@
       }
     },
     "terser": {
-      "version": "4.4.0",
-      "resolved": "https://registry.npmjs.org/terser/-/terser-4.4.0.tgz",
-      "integrity": "sha512-oDG16n2WKm27JO8h4y/w3iqBGAOSCtq7k8dRmrn4Wf9NouL0b2WpMHGChFGZq4nFAQy1FsNJrVQHfurXOSTmOA==",
+      "version": "4.4.3",
+      "resolved": "https://registry.npmjs.org/terser/-/terser-4.4.3.tgz",
+      "integrity": "sha512-0ikKraVtRDKGzHrzkCv5rUNDzqlhmhowOBqC0XqUHFpW+vJ45+20/IFBcebwKfiS2Z9fJin6Eo+F1zLZsxi8RA==",
       "dev": true,
       "requires": {
         "commander": "^2.20.0",
@@ -6167,16 +6167,16 @@
       }
     },
     "terser-webpack-plugin": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz",
-      "integrity": "sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg==",
+      "version": "1.4.3",
+      "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz",
+      "integrity": "sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA==",
       "dev": true,
       "requires": {
         "cacache": "^12.0.2",
         "find-cache-dir": "^2.1.0",
         "is-wsl": "^1.1.0",
         "schema-utils": "^1.0.0",
-        "serialize-javascript": "^1.7.0",
+        "serialize-javascript": "^2.1.2",
         "source-map": "^0.6.1",
         "terser": "^4.1.2",
         "webpack-sources": "^1.4.0",