From 1969b2666abf99182631441e75a03f0e6ad2288c Mon Sep 17 00:00:00 2001
From: Fedor Katurov <gotham48@gmail.com>
Date: Fri, 28 May 2021 11:35:11 +0700
Subject: [PATCH] made event safe json stringify

---
 src/service/vk/handlers/PostNewHandler.ts |  6 +----
 src/service/vk/handlers/VkEventHandler.ts | 29 ++++++++++++++++-------
 2 files changed, 22 insertions(+), 13 deletions(-)

diff --git a/src/service/vk/handlers/PostNewHandler.ts b/src/service/vk/handlers/PostNewHandler.ts
index 66ab5e6..9c60286 100644
--- a/src/service/vk/handlers/PostNewHandler.ts
+++ b/src/service/vk/handlers/PostNewHandler.ts
@@ -115,11 +115,7 @@ export class PostNewHandler extends VkEventHandler<Fields, Values> {
       this.channel.markdown
     );
 
-    const event = await this.createEvent(
-      id,
-      msg.message_id,
-      context.wall.toJSON()
-    );
+    const event = await this.createEvent(id, msg.message_id, context);
 
     await this.db.createPost(
       event!.id,
diff --git a/src/service/vk/handlers/VkEventHandler.ts b/src/service/vk/handlers/VkEventHandler.ts
index 5afd038..edc5249 100644
--- a/src/service/vk/handlers/VkEventHandler.ts
+++ b/src/service/vk/handlers/VkEventHandler.ts
@@ -102,13 +102,26 @@ export class VkEventHandler<
     tgMessageId: number,
     text: Record<any, any>
   ) => {
-    return await this.db.createEvent(
-      this.type,
-      id,
-      this.group.id,
-      this.channel.id,
-      tgMessageId,
-      text
-    );
+    let plain = "";
+
+    try {
+      plain = JSON.stringify(text);
+    } catch (e) {
+      logger.warn(`createEvent: failed to stringify JSON: ${e}`, e);
+      plain = text.toString();
+    }
+
+    try {
+      return await this.db.createEvent(
+        this.type,
+        id,
+        this.group.id,
+        this.channel.id,
+        tgMessageId,
+        { event: plain }
+      );
+    } catch (e) {
+      logger.warn("createEvent error", e);
+    }
   };
 }