diff --git a/package-lock.json b/package-lock.json
index 61508a2..e7c83eb 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,8 +9,8 @@
       "version": "1.0.0",
       "license": "GPL-3.0",
       "dependencies": {
-        "@logtail/node": "^0.4.16",
-        "@sentry/node": "^7.80.1",
+        "@logtail/node": "^0.4.21",
+        "@sentry/node": "^7.112.2",
         "@teknologi-umum/nedb-promises": "^5.0.3",
         "@teknologi-umum/pesto": "^1.0.0",
         "carret": "^1.0.4",
@@ -20,9 +20,9 @@
         "got": "^12.6.0",
         "kleur": "^4.1.5",
         "mongoose": "^8.2.4",
-        "qrcode": "^1.5.1",
-        "sanitize-html": "^2.12.1",
-        "telegraf": "^4.15.0",
+        "qrcode": "^1.5.3",
+        "sanitize-html": "^2.13.0",
+        "telegraf": "^4.16.3",
         "tempura": "^0.4.0"
       },
       "devDependencies": {
@@ -177,22 +177,22 @@
       }
     },
     "node_modules/@logtail/core": {
-      "version": "0.4.16",
-      "resolved": "https://registry.npmjs.org/@logtail/core/-/core-0.4.16.tgz",
-      "integrity": "sha512-L6osqjntQzSE2PBSGbv0En/JRUyr4yTy1R61wY+UxzidjVpd3bY6ybvOdLOz0tufPcytM+QrL/cg93yLEVbcAA==",
+      "version": "0.4.21",
+      "resolved": "https://registry.npmjs.org/@logtail/core/-/core-0.4.21.tgz",
+      "integrity": "sha512-QDq194+24bwi4e+a/pxyf4X67NewhTvBmh9iwM2NhbSVSQz4Fo8xQn1Ul8zuUrXETycu/Od2D8wT2tZFNFx/7A==",
       "dependencies": {
-        "@logtail/tools": "^0.4.16",
-        "@logtail/types": "^0.4.14",
+        "@logtail/tools": "^0.4.21",
+        "@logtail/types": "^0.4.20",
         "serialize-error": "^8.1.0"
       }
     },
     "node_modules/@logtail/node": {
-      "version": "0.4.16",
-      "resolved": "https://registry.npmjs.org/@logtail/node/-/node-0.4.16.tgz",
-      "integrity": "sha512-MvOrexrLOdMRotodKCFweqg2Nqs+nl8FDYH1Iovzs3N4yPgJynjzRy2PtjciI3lfw95LTZc3arTDRinof8cZrg==",
+      "version": "0.4.21",
+      "resolved": "https://registry.npmjs.org/@logtail/node/-/node-0.4.21.tgz",
+      "integrity": "sha512-zpwkhJgcYaM+vsjotHRJthc0ot1vP0CAVy+fwrkL8XjfdC3NHiWb6f0agQpHlqdRX8RTsAbcYpWNXKPpFB5U9Q==",
       "dependencies": {
-        "@logtail/core": "^0.4.16",
-        "@logtail/types": "^0.4.14",
+        "@logtail/core": "^0.4.21",
+        "@logtail/types": "^0.4.20",
         "@msgpack/msgpack": "^2.5.1",
         "@types/stack-trace": "^0.0.29",
         "cross-fetch": "^3.0.4",
@@ -202,20 +202,17 @@
       }
     },
     "node_modules/@logtail/tools": {
-      "version": "0.4.16",
-      "resolved": "https://registry.npmjs.org/@logtail/tools/-/tools-0.4.16.tgz",
-      "integrity": "sha512-jHCktK5mbKih8d7//87km+FUzvttdf5QSQ4enisChPjmslFHljs/cp9T0o16AyZ08H5471QWtH5neykZWOY06g==",
+      "version": "0.4.21",
+      "resolved": "https://registry.npmjs.org/@logtail/tools/-/tools-0.4.21.tgz",
+      "integrity": "sha512-xIaolScUwJEikllopGphxBX0lVlN/rA8pLAZiNCMNJXpPbwitoFKLW3w4qRuYdKoFCCJZKwOdwEqU2Fv0i9Cuw==",
       "dependencies": {
-        "@logtail/types": "^0.4.14"
+        "@logtail/types": "^0.4.20"
       }
     },
     "node_modules/@logtail/types": {
-      "version": "0.4.14",
-      "resolved": "https://registry.npmjs.org/@logtail/types/-/types-0.4.14.tgz",
-      "integrity": "sha512-oRAER5vmUyW1rK56EoL+GotVbbCDgttVvg0F9i08WOD6/PjiGcsPH7wNHNYGdvB/KdAXxAhD4+81ZShNKFkZdg==",
-      "dependencies": {
-        "js": "^0.1.0"
-      }
+      "version": "0.4.20",
+      "resolved": "https://registry.npmjs.org/@logtail/types/-/types-0.4.20.tgz",
+      "integrity": "sha512-nYsum10eJMTo+ySBlYXvSrvgD1NDCVUeOlxLBbelq3XUmHu9L48VNR3P0BOmhLamYCTEgjatTj0PyPLfjL1W9g=="
     },
     "node_modules/@mongodb-js/saslprep": {
       "version": "1.1.5",
@@ -290,59 +287,73 @@
       }
     },
     "node_modules/@sentry-internal/tracing": {
-      "version": "7.80.1",
-      "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.80.1.tgz",
-      "integrity": "sha512-5gZ4LPIj2vpQl2/dHBM4uXMi9OI5E0VlOhJQt0foiuN6JJeiOjdpJFcfVqJk69wrc0deVENTtgKKktxqMwVeWQ==",
+      "version": "7.112.2",
+      "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.112.2.tgz",
+      "integrity": "sha512-fT1Y46J4lfXZkgFkb03YMNeIEs2xS6jdKMoukMFQfRfVvL9fSWEbTgZpHPd/YTT8r2i082XzjtAoQNgklm/0Hw==",
       "dependencies": {
-        "@sentry/core": "7.80.1",
-        "@sentry/types": "7.80.1",
-        "@sentry/utils": "7.80.1"
+        "@sentry/core": "7.112.2",
+        "@sentry/types": "7.112.2",
+        "@sentry/utils": "7.112.2"
       },
       "engines": {
         "node": ">=8"
       }
     },
     "node_modules/@sentry/core": {
-      "version": "7.80.1",
-      "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.80.1.tgz",
-      "integrity": "sha512-3Yh+O9Q86MxwIuJFYtuSSoUCpdx99P1xDAqL0FIPTJ+ekaVMiUJq9NmyaNh9uN2myPSmxvEXW6q3z37zta9ZHg==",
+      "version": "7.112.2",
+      "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.112.2.tgz",
+      "integrity": "sha512-gHPCcJobbMkk0VR18J65WYQTt3ED4qC6X9lHKp27Ddt63E+MDGkG6lvYBU1LS8cV7CdyBGC1XXDCfor61GvLsA==",
+      "dependencies": {
+        "@sentry/types": "7.112.2",
+        "@sentry/utils": "7.112.2"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/@sentry/integrations": {
+      "version": "7.112.2",
+      "resolved": "https://registry.npmjs.org/@sentry/integrations/-/integrations-7.112.2.tgz",
+      "integrity": "sha512-ioC2yyU6DqtLkdmWnm87oNvdn2+9oKctJeA4t+jkS6JaJ10DcezjCwiLscX4rhB9aWJV3IWF7Op0O6K3w0t2Hg==",
       "dependencies": {
-        "@sentry/types": "7.80.1",
-        "@sentry/utils": "7.80.1"
+        "@sentry/core": "7.112.2",
+        "@sentry/types": "7.112.2",
+        "@sentry/utils": "7.112.2",
+        "localforage": "^1.8.1"
       },
       "engines": {
         "node": ">=8"
       }
     },
     "node_modules/@sentry/node": {
-      "version": "7.80.1",
-      "resolved": "https://registry.npmjs.org/@sentry/node/-/node-7.80.1.tgz",
-      "integrity": "sha512-0NWfcZMlyQphKWsvyzfhGm2dCBk5DUPqOGW/vGx18G4tCCYtFcAIj/mCp/4XOEcZRPQgb9vkm+sidGD6DnwWlA==",
+      "version": "7.112.2",
+      "resolved": "https://registry.npmjs.org/@sentry/node/-/node-7.112.2.tgz",
+      "integrity": "sha512-MNzkqER8jc2xOS3ArkCLH5hakzu15tcjeC7qjU7rQ1Ms4WuV+MG0docSRESux0/p23Qjzf9tZOc8C5Eq+Sxduw==",
       "dependencies": {
-        "@sentry-internal/tracing": "7.80.1",
-        "@sentry/core": "7.80.1",
-        "@sentry/types": "7.80.1",
-        "@sentry/utils": "7.80.1",
-        "https-proxy-agent": "^5.0.0"
+        "@sentry-internal/tracing": "7.112.2",
+        "@sentry/core": "7.112.2",
+        "@sentry/integrations": "7.112.2",
+        "@sentry/types": "7.112.2",
+        "@sentry/utils": "7.112.2"
       },
       "engines": {
         "node": ">=8"
       }
     },
     "node_modules/@sentry/types": {
-      "version": "7.80.1",
-      "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.80.1.tgz",
-      "integrity": "sha512-CVu4uPVTOI3U9kYiOdA085R7jX5H1oVODbs9y+A8opJ0dtJTMueCXgZyE8oXQ0NjGVs6HEeaLkOuiV0mj8X3yw==",
+      "version": "7.112.2",
+      "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.112.2.tgz",
+      "integrity": "sha512-kCMLt7yhY5OkWE9MeowlTNmox9pqDxcpvqguMo4BDNZM5+v9SEb1AauAdR78E1a1V8TyCzjBD7JDfXWhvpYBcQ==",
       "engines": {
         "node": ">=8"
       }
     },
     "node_modules/@sentry/utils": {
-      "version": "7.80.1",
-      "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.80.1.tgz",
-      "integrity": "sha512-bfFm2e/nEn+b9++QwjNEYCbS7EqmteT8uf0XUs7PljusSimIqqxDtK1pfD9zjynPgC8kW/fVBKv0pe2LufomeA==",
+      "version": "7.112.2",
+      "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.112.2.tgz",
+      "integrity": "sha512-OjLh0hx0t1EcL4ZIjf+4svlmmP+tHUDGcr5qpFWH78tjmkPW4+cqPuZCZfHSuWcDdeiaXi8TnYoVRqDcJKK/eQ==",
       "dependencies": {
-        "@sentry/types": "7.80.1"
+        "@sentry/types": "7.112.2"
       },
       "engines": {
         "node": ">=8"
@@ -422,9 +433,9 @@
       }
     },
     "node_modules/@telegraf/types": {
-      "version": "6.9.1",
-      "resolved": "https://registry.npmjs.org/@telegraf/types/-/types-6.9.1.tgz",
-      "integrity": "sha512-bzqwhicZq401T0e09tu8b1KvGfJObPmzKU/iKCT5V466AsAZZWQrBYQ5edbmD1VZuHLEwopoOVY5wPP4HaLtug=="
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/@telegraf/types/-/types-7.1.0.tgz",
+      "integrity": "sha512-kGevOIbpMcIlCDeorKGpwZmdH7kHbqlk/Yj6dEpJMKEQw5lk0KVQY0OLXaCswy8GqlIVLd5625OB+rAntP9xVw=="
     },
     "node_modules/@types/http-cache-semantics": {
       "version": "4.0.1",
@@ -499,17 +510,6 @@
         "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
       }
     },
-    "node_modules/agent-base": {
-      "version": "6.0.2",
-      "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
-      "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
-      "dependencies": {
-        "debug": "4"
-      },
-      "engines": {
-        "node": ">= 6.0.0"
-      }
-    },
     "node_modules/ajv": {
       "version": "6.12.6",
       "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
@@ -1701,18 +1701,6 @@
         "node": ">=10.19.0"
       }
     },
-    "node_modules/https-proxy-agent": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
-      "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
-      "dependencies": {
-        "agent-base": "6",
-        "debug": "4"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
     "node_modules/husky": {
       "version": "8.0.3",
       "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz",
@@ -1898,17 +1886,6 @@
         "node": ">=8"
       }
     },
-    "node_modules/js": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/js/-/js-0.1.0.tgz",
-      "integrity": "sha512-ZBbGYOpact8QAH9RprFWL4RAESYwbDodxiuDjOnzwzzk9pBzKycoifGuUrHHcDixE/eLMKPHRaXenTgu1qXBqA==",
-      "dependencies": {
-        "commander": "~1.1.1"
-      },
-      "bin": {
-        "js": "bin/js"
-      }
-    },
     "node_modules/js-yaml": {
       "version": "4.1.0",
       "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
@@ -1921,17 +1898,6 @@
         "js-yaml": "bin/js-yaml.js"
       }
     },
-    "node_modules/js/node_modules/commander": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/commander/-/commander-1.1.1.tgz",
-      "integrity": "sha512-71Rod2AhcH3JhkBikVpNd0pA+fWsmAaVoti6OR38T76chA7vE3pSerS0Jor4wDw+tOueD2zLVvFOw5H0Rcj7rA==",
-      "dependencies": {
-        "keypress": "0.1.x"
-      },
-      "engines": {
-        "node": ">= 0.6.x"
-      }
-    },
     "node_modules/json-buffer": {
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
@@ -1963,11 +1929,6 @@
         "node": ">=12.0.0"
       }
     },
-    "node_modules/keypress": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/keypress/-/keypress-0.1.0.tgz",
-      "integrity": "sha512-x0yf9PL/nx9Nw9oLL8ZVErFAk85/lslwEP7Vz7s5SI1ODXZIgit3C5qyWjw4DxOuO/3Hb4866SQh28a1V1d+WA=="
-    },
     "node_modules/keyv": {
       "version": "4.5.4",
       "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
@@ -2631,9 +2592,9 @@
       }
     },
     "node_modules/qrcode": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.1.tgz",
-      "integrity": "sha512-nS8NJ1Z3md8uTjKtP+SGGhfqmTCs5flU/xR623oI0JX+Wepz9R8UrRVCTBTJm3qGw3rH6jJ6MUHjkDx15cxSSg==",
+      "version": "1.5.3",
+      "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.3.tgz",
+      "integrity": "sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg==",
       "dependencies": {
         "dijkstrajs": "^1.0.1",
         "encode-utf8": "^1.0.3",
@@ -2923,9 +2884,9 @@
       }
     },
     "node_modules/sanitize-html": {
-      "version": "2.12.1",
-      "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.12.1.tgz",
-      "integrity": "sha512-Plh+JAn0UVDpBRP/xEjsk+xDCoOvMBwQUf/K+/cBAVuTbtX8bj2VB7S1sL1dssVpykqp0/KPSesHrqXtokVBpA==",
+      "version": "2.13.0",
+      "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.13.0.tgz",
+      "integrity": "sha512-Xff91Z+4Mz5QiNSLdLWwjgBDm5b1RU6xBT0+12rapjiaR7SwfRdjw8f+6Rir2MXKLrDicRFHdb51hGOAxmsUIA==",
       "dependencies": {
         "deepmerge": "^4.2.2",
         "escape-string-regexp": "^4.0.0",
@@ -3086,15 +3047,15 @@
       }
     },
     "node_modules/telegraf": {
-      "version": "4.15.0",
-      "resolved": "https://registry.npmjs.org/telegraf/-/telegraf-4.15.0.tgz",
-      "integrity": "sha512-jOQhpMZxZ7gTD1/pIQkXHv0BNVRMfn0xtRHnxHv6GQdeISMErzzAe82rMm78ZPSwwKCS4vVu3n/c2LMY8UFiKg==",
+      "version": "4.16.3",
+      "resolved": "https://registry.npmjs.org/telegraf/-/telegraf-4.16.3.tgz",
+      "integrity": "sha512-yjEu2NwkHlXu0OARWoNhJlIjX09dRktiMQFsM678BAH/PEPVwctzL67+tvXqLCRQQvm3SDtki2saGO9hLlz68w==",
       "dependencies": {
-        "@telegraf/types": "^6.9.1",
+        "@telegraf/types": "^7.1.0",
         "abort-controller": "^3.0.0",
         "debug": "^4.3.4",
         "mri": "^1.2.0",
-        "node-fetch": "^2.6.8",
+        "node-fetch": "^2.7.0",
         "p-timeout": "^4.1.0",
         "safe-compare": "^1.1.4",
         "sandwich-stream": "^2.0.2"
@@ -3107,9 +3068,9 @@
       }
     },
     "node_modules/telegraf/node_modules/node-fetch": {
-      "version": "2.6.9",
-      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz",
-      "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==",
+      "version": "2.7.0",
+      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
+      "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
       "dependencies": {
         "whatwg-url": "^5.0.0"
       },
@@ -3584,22 +3545,22 @@
       }
     },
     "@logtail/core": {
-      "version": "0.4.16",
-      "resolved": "https://registry.npmjs.org/@logtail/core/-/core-0.4.16.tgz",
-      "integrity": "sha512-L6osqjntQzSE2PBSGbv0En/JRUyr4yTy1R61wY+UxzidjVpd3bY6ybvOdLOz0tufPcytM+QrL/cg93yLEVbcAA==",
+      "version": "0.4.21",
+      "resolved": "https://registry.npmjs.org/@logtail/core/-/core-0.4.21.tgz",
+      "integrity": "sha512-QDq194+24bwi4e+a/pxyf4X67NewhTvBmh9iwM2NhbSVSQz4Fo8xQn1Ul8zuUrXETycu/Od2D8wT2tZFNFx/7A==",
       "requires": {
-        "@logtail/tools": "^0.4.16",
-        "@logtail/types": "^0.4.14",
+        "@logtail/tools": "^0.4.21",
+        "@logtail/types": "^0.4.20",
         "serialize-error": "^8.1.0"
       }
     },
     "@logtail/node": {
-      "version": "0.4.16",
-      "resolved": "https://registry.npmjs.org/@logtail/node/-/node-0.4.16.tgz",
-      "integrity": "sha512-MvOrexrLOdMRotodKCFweqg2Nqs+nl8FDYH1Iovzs3N4yPgJynjzRy2PtjciI3lfw95LTZc3arTDRinof8cZrg==",
+      "version": "0.4.21",
+      "resolved": "https://registry.npmjs.org/@logtail/node/-/node-0.4.21.tgz",
+      "integrity": "sha512-zpwkhJgcYaM+vsjotHRJthc0ot1vP0CAVy+fwrkL8XjfdC3NHiWb6f0agQpHlqdRX8RTsAbcYpWNXKPpFB5U9Q==",
       "requires": {
-        "@logtail/core": "^0.4.16",
-        "@logtail/types": "^0.4.14",
+        "@logtail/core": "^0.4.21",
+        "@logtail/types": "^0.4.20",
         "@msgpack/msgpack": "^2.5.1",
         "@types/stack-trace": "^0.0.29",
         "cross-fetch": "^3.0.4",
@@ -3609,20 +3570,17 @@
       }
     },
     "@logtail/tools": {
-      "version": "0.4.16",
-      "resolved": "https://registry.npmjs.org/@logtail/tools/-/tools-0.4.16.tgz",
-      "integrity": "sha512-jHCktK5mbKih8d7//87km+FUzvttdf5QSQ4enisChPjmslFHljs/cp9T0o16AyZ08H5471QWtH5neykZWOY06g==",
+      "version": "0.4.21",
+      "resolved": "https://registry.npmjs.org/@logtail/tools/-/tools-0.4.21.tgz",
+      "integrity": "sha512-xIaolScUwJEikllopGphxBX0lVlN/rA8pLAZiNCMNJXpPbwitoFKLW3w4qRuYdKoFCCJZKwOdwEqU2Fv0i9Cuw==",
       "requires": {
-        "@logtail/types": "^0.4.14"
+        "@logtail/types": "^0.4.20"
       }
     },
     "@logtail/types": {
-      "version": "0.4.14",
-      "resolved": "https://registry.npmjs.org/@logtail/types/-/types-0.4.14.tgz",
-      "integrity": "sha512-oRAER5vmUyW1rK56EoL+GotVbbCDgttVvg0F9i08WOD6/PjiGcsPH7wNHNYGdvB/KdAXxAhD4+81ZShNKFkZdg==",
-      "requires": {
-        "js": "^0.1.0"
-      }
+      "version": "0.4.20",
+      "resolved": "https://registry.npmjs.org/@logtail/types/-/types-0.4.20.tgz",
+      "integrity": "sha512-nYsum10eJMTo+ySBlYXvSrvgD1NDCVUeOlxLBbelq3XUmHu9L48VNR3P0BOmhLamYCTEgjatTj0PyPLfjL1W9g=="
     },
     "@mongodb-js/saslprep": {
       "version": "1.1.5",
@@ -3685,47 +3643,58 @@
       }
     },
     "@sentry-internal/tracing": {
-      "version": "7.80.1",
-      "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.80.1.tgz",
-      "integrity": "sha512-5gZ4LPIj2vpQl2/dHBM4uXMi9OI5E0VlOhJQt0foiuN6JJeiOjdpJFcfVqJk69wrc0deVENTtgKKktxqMwVeWQ==",
+      "version": "7.112.2",
+      "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.112.2.tgz",
+      "integrity": "sha512-fT1Y46J4lfXZkgFkb03YMNeIEs2xS6jdKMoukMFQfRfVvL9fSWEbTgZpHPd/YTT8r2i082XzjtAoQNgklm/0Hw==",
       "requires": {
-        "@sentry/core": "7.80.1",
-        "@sentry/types": "7.80.1",
-        "@sentry/utils": "7.80.1"
+        "@sentry/core": "7.112.2",
+        "@sentry/types": "7.112.2",
+        "@sentry/utils": "7.112.2"
       }
     },
     "@sentry/core": {
-      "version": "7.80.1",
-      "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.80.1.tgz",
-      "integrity": "sha512-3Yh+O9Q86MxwIuJFYtuSSoUCpdx99P1xDAqL0FIPTJ+ekaVMiUJq9NmyaNh9uN2myPSmxvEXW6q3z37zta9ZHg==",
+      "version": "7.112.2",
+      "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.112.2.tgz",
+      "integrity": "sha512-gHPCcJobbMkk0VR18J65WYQTt3ED4qC6X9lHKp27Ddt63E+MDGkG6lvYBU1LS8cV7CdyBGC1XXDCfor61GvLsA==",
       "requires": {
-        "@sentry/types": "7.80.1",
-        "@sentry/utils": "7.80.1"
+        "@sentry/types": "7.112.2",
+        "@sentry/utils": "7.112.2"
+      }
+    },
+    "@sentry/integrations": {
+      "version": "7.112.2",
+      "resolved": "https://registry.npmjs.org/@sentry/integrations/-/integrations-7.112.2.tgz",
+      "integrity": "sha512-ioC2yyU6DqtLkdmWnm87oNvdn2+9oKctJeA4t+jkS6JaJ10DcezjCwiLscX4rhB9aWJV3IWF7Op0O6K3w0t2Hg==",
+      "requires": {
+        "@sentry/core": "7.112.2",
+        "@sentry/types": "7.112.2",
+        "@sentry/utils": "7.112.2",
+        "localforage": "^1.8.1"
       }
     },
     "@sentry/node": {
-      "version": "7.80.1",
-      "resolved": "https://registry.npmjs.org/@sentry/node/-/node-7.80.1.tgz",
-      "integrity": "sha512-0NWfcZMlyQphKWsvyzfhGm2dCBk5DUPqOGW/vGx18G4tCCYtFcAIj/mCp/4XOEcZRPQgb9vkm+sidGD6DnwWlA==",
+      "version": "7.112.2",
+      "resolved": "https://registry.npmjs.org/@sentry/node/-/node-7.112.2.tgz",
+      "integrity": "sha512-MNzkqER8jc2xOS3ArkCLH5hakzu15tcjeC7qjU7rQ1Ms4WuV+MG0docSRESux0/p23Qjzf9tZOc8C5Eq+Sxduw==",
       "requires": {
-        "@sentry-internal/tracing": "7.80.1",
-        "@sentry/core": "7.80.1",
-        "@sentry/types": "7.80.1",
-        "@sentry/utils": "7.80.1",
-        "https-proxy-agent": "^5.0.0"
+        "@sentry-internal/tracing": "7.112.2",
+        "@sentry/core": "7.112.2",
+        "@sentry/integrations": "7.112.2",
+        "@sentry/types": "7.112.2",
+        "@sentry/utils": "7.112.2"
       }
     },
     "@sentry/types": {
-      "version": "7.80.1",
-      "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.80.1.tgz",
-      "integrity": "sha512-CVu4uPVTOI3U9kYiOdA085R7jX5H1oVODbs9y+A8opJ0dtJTMueCXgZyE8oXQ0NjGVs6HEeaLkOuiV0mj8X3yw=="
+      "version": "7.112.2",
+      "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.112.2.tgz",
+      "integrity": "sha512-kCMLt7yhY5OkWE9MeowlTNmox9pqDxcpvqguMo4BDNZM5+v9SEb1AauAdR78E1a1V8TyCzjBD7JDfXWhvpYBcQ=="
     },
     "@sentry/utils": {
-      "version": "7.80.1",
-      "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.80.1.tgz",
-      "integrity": "sha512-bfFm2e/nEn+b9++QwjNEYCbS7EqmteT8uf0XUs7PljusSimIqqxDtK1pfD9zjynPgC8kW/fVBKv0pe2LufomeA==",
+      "version": "7.112.2",
+      "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.112.2.tgz",
+      "integrity": "sha512-OjLh0hx0t1EcL4ZIjf+4svlmmP+tHUDGcr5qpFWH78tjmkPW4+cqPuZCZfHSuWcDdeiaXi8TnYoVRqDcJKK/eQ==",
       "requires": {
-        "@sentry/types": "7.80.1"
+        "@sentry/types": "7.112.2"
       }
     },
     "@sindresorhus/is": {
@@ -3782,9 +3751,9 @@
       }
     },
     "@telegraf/types": {
-      "version": "6.9.1",
-      "resolved": "https://registry.npmjs.org/@telegraf/types/-/types-6.9.1.tgz",
-      "integrity": "sha512-bzqwhicZq401T0e09tu8b1KvGfJObPmzKU/iKCT5V466AsAZZWQrBYQ5edbmD1VZuHLEwopoOVY5wPP4HaLtug=="
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/@telegraf/types/-/types-7.1.0.tgz",
+      "integrity": "sha512-kGevOIbpMcIlCDeorKGpwZmdH7kHbqlk/Yj6dEpJMKEQw5lk0KVQY0OLXaCswy8GqlIVLd5625OB+rAntP9xVw=="
     },
     "@types/http-cache-semantics": {
       "version": "4.0.1",
@@ -3848,14 +3817,6 @@
       "dev": true,
       "requires": {}
     },
-    "agent-base": {
-      "version": "6.0.2",
-      "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
-      "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
-      "requires": {
-        "debug": "4"
-      }
-    },
     "ajv": {
       "version": "6.12.6",
       "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
@@ -4707,15 +4668,6 @@
         "resolve-alpn": "^1.2.0"
       }
     },
-    "https-proxy-agent": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
-      "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
-      "requires": {
-        "agent-base": "6",
-        "debug": "4"
-      }
-    },
     "husky": {
       "version": "8.0.3",
       "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz",
@@ -4850,24 +4802,6 @@
         "istanbul-lib-report": "^3.0.0"
       }
     },
-    "js": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/js/-/js-0.1.0.tgz",
-      "integrity": "sha512-ZBbGYOpact8QAH9RprFWL4RAESYwbDodxiuDjOnzwzzk9pBzKycoifGuUrHHcDixE/eLMKPHRaXenTgu1qXBqA==",
-      "requires": {
-        "commander": "~1.1.1"
-      },
-      "dependencies": {
-        "commander": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/commander/-/commander-1.1.1.tgz",
-          "integrity": "sha512-71Rod2AhcH3JhkBikVpNd0pA+fWsmAaVoti6OR38T76chA7vE3pSerS0Jor4wDw+tOueD2zLVvFOw5H0Rcj7rA==",
-          "requires": {
-            "keypress": "0.1.x"
-          }
-        }
-      }
-    },
     "js-yaml": {
       "version": "4.1.0",
       "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
@@ -4905,11 +4839,6 @@
       "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz",
       "integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA=="
     },
-    "keypress": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/keypress/-/keypress-0.1.0.tgz",
-      "integrity": "sha512-x0yf9PL/nx9Nw9oLL8ZVErFAk85/lslwEP7Vz7s5SI1ODXZIgit3C5qyWjw4DxOuO/3Hb4866SQh28a1V1d+WA=="
-    },
     "keyv": {
       "version": "4.5.4",
       "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
@@ -5345,9 +5274,9 @@
       "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="
     },
     "qrcode": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.1.tgz",
-      "integrity": "sha512-nS8NJ1Z3md8uTjKtP+SGGhfqmTCs5flU/xR623oI0JX+Wepz9R8UrRVCTBTJm3qGw3rH6jJ6MUHjkDx15cxSSg==",
+      "version": "1.5.3",
+      "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.3.tgz",
+      "integrity": "sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg==",
       "requires": {
         "dijkstrajs": "^1.0.1",
         "encode-utf8": "^1.0.3",
@@ -5544,9 +5473,9 @@
       "integrity": "sha512-jLYV0DORrzY3xaz/S9ydJL6Iz7essZeAfnAavsJ+zsJGZ1MOnsS52yRjU3uF3pJa/lla7+wisp//fxOwOH8SKQ=="
     },
     "sanitize-html": {
-      "version": "2.12.1",
-      "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.12.1.tgz",
-      "integrity": "sha512-Plh+JAn0UVDpBRP/xEjsk+xDCoOvMBwQUf/K+/cBAVuTbtX8bj2VB7S1sL1dssVpykqp0/KPSesHrqXtokVBpA==",
+      "version": "2.13.0",
+      "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.13.0.tgz",
+      "integrity": "sha512-Xff91Z+4Mz5QiNSLdLWwjgBDm5b1RU6xBT0+12rapjiaR7SwfRdjw8f+6Rir2MXKLrDicRFHdb51hGOAxmsUIA==",
       "requires": {
         "deepmerge": "^4.2.2",
         "escape-string-regexp": "^4.0.0",
@@ -5665,24 +5594,24 @@
       }
     },
     "telegraf": {
-      "version": "4.15.0",
-      "resolved": "https://registry.npmjs.org/telegraf/-/telegraf-4.15.0.tgz",
-      "integrity": "sha512-jOQhpMZxZ7gTD1/pIQkXHv0BNVRMfn0xtRHnxHv6GQdeISMErzzAe82rMm78ZPSwwKCS4vVu3n/c2LMY8UFiKg==",
+      "version": "4.16.3",
+      "resolved": "https://registry.npmjs.org/telegraf/-/telegraf-4.16.3.tgz",
+      "integrity": "sha512-yjEu2NwkHlXu0OARWoNhJlIjX09dRktiMQFsM678BAH/PEPVwctzL67+tvXqLCRQQvm3SDtki2saGO9hLlz68w==",
       "requires": {
-        "@telegraf/types": "^6.9.1",
+        "@telegraf/types": "^7.1.0",
         "abort-controller": "^3.0.0",
         "debug": "^4.3.4",
         "mri": "^1.2.0",
-        "node-fetch": "^2.6.8",
+        "node-fetch": "^2.7.0",
         "p-timeout": "^4.1.0",
         "safe-compare": "^1.1.4",
         "sandwich-stream": "^2.0.2"
       },
       "dependencies": {
         "node-fetch": {
-          "version": "2.6.9",
-          "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz",
-          "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==",
+          "version": "2.7.0",
+          "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
+          "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
           "requires": {
             "whatwg-url": "^5.0.0"
           }
diff --git a/package.json b/package.json
index c6a737e..44aff7b 100644
--- a/package.json
+++ b/package.json
@@ -24,8 +24,8 @@
     "#utils/*": "./src/utils/*"
   },
   "dependencies": {
-    "@logtail/node": "^0.4.16",
-    "@sentry/node": "^7.80.1",
+    "@logtail/node": "^0.4.21",
+    "@sentry/node": "^7.112.2",
     "@teknologi-umum/nedb-promises": "^5.0.3",
     "@teknologi-umum/pesto": "^1.0.0",
     "carret": "^1.0.4",
@@ -35,9 +35,9 @@
     "got": "^12.6.0",
     "kleur": "^4.1.5",
     "mongoose": "^8.2.4",
-    "qrcode": "^1.5.1",
-    "sanitize-html": "^2.12.1",
-    "telegraf": "^4.15.0",
+    "qrcode": "^1.5.3",
+    "sanitize-html": "^2.13.0",
+    "telegraf": "^4.16.3",
     "tempura": "^0.4.0"
   },
   "devDependencies": {
diff --git a/src/app.js b/src/app.js
index 4e28a4b..2c16ba0 100644
--- a/src/app.js
+++ b/src/app.js
@@ -36,10 +36,10 @@ Sentry.init({
   enabled: process.env.NODE_ENV === "production",
   environment: process.env.NODE_ENV,
   sampleRate: 1.0,
-  tracesSampleRate: 0.2,
+  tracesSampleRate: 0.5,
   integrations: [
-    new Sentry.Integrations.Http({ tracing: true }),
-    new Sentry.Integrations.Undici(),
+    Sentry.nativeNodeFetchIntegration(),
+    Sentry.httpIntegration({ tracing: true }),
     ...Sentry.autoDiscoverNodePerformanceMonitoringIntegrations()
   ]
 });
diff --git a/src/services/eval/crypto.js b/src/services/eval/crypto.js
index a5b3b89..eeb61a2 100644
--- a/src/services/eval/crypto.js
+++ b/src/services/eval/crypto.js
@@ -1,5 +1,3 @@
-import got from "got";
-
 export async function fetchCryptoCurrency(cryptoSymbol) {
   if (typeof cryptoSymbol !== "string") {
     throw "Simbol mata uang crypto harus berupa string";
@@ -7,30 +5,25 @@ export async function fetchCryptoCurrency(cryptoSymbol) {
   if (!/^[A-Z]{3,8}(?:IDR|USDT)$/.test(cryptoSymbol)) {
     throw `Simbol mata uang crypto ${cryptoSymbol} tidak valid`;
   }
+  const requestSearchParams = new URLSearchParams();
+  requestSearchParams.set("symbol", cryptoSymbol.toUpperCase());
+  const response = await fetch(`https://gold.teknologiumum.com/crypto?${requestSearchParams.toString()}`);
 
-  const { statusCode, body } = await got.get(
-    `https://indodax.com/api/ticker/${cryptoSymbol.toLowerCase()}`,
-    {
-      responseType: "json",
-      throwHttpErrors: false
-    }
-  );
-
-  if (statusCode !== 200) {
+  if (response.status !== 200) {
     throw `Gagal mendapatkan data crypto ${cryptoSymbol}`;
   }
 
-
-  if (body.error_description !== undefined) {
-    throw body.error_description;
-  }
-
+  const body = await response.json();
 
   return {
-    last: parseFloat(body.ticker.last),
-    buy: parseFloat(body.ticker.buy),
-    sell: parseFloat(body.ticker.sell),
-    high: parseFloat(body.ticker.high),
-    low: parseFloat(body.ticker.low)
+    symbol: body.symbol,
+    base_currency: body.base_currency,
+    quote_currency: body.quote_currency,
+    open: parseFloat(body.open),
+    high: parseFloat(body.high),
+    low: parseFloat(body.low),
+    last: parseFloat(body.last),
+    volume: parseFloat(body.volume),
+    date: new Date(body.date)
   };
 }
diff --git a/src/services/eval/currency.js b/src/services/eval/currency.js
index 2a4cd91..300cefa 100644
--- a/src/services/eval/currency.js
+++ b/src/services/eval/currency.js
@@ -1,4 +1,3 @@
-import got from "got";
 import { SingleValueCache } from "#utils/cache.js";
 
 // cache TTL: 10 minutes
@@ -9,18 +8,13 @@ const cache = new SingleValueCache(cacheTtl);
 
 async function getCurrencyDictionary() {
   const c = await cache.getOrCreate(async () => {
-    const { statusCode, body } = await got.get(
-      "https://gold.teknologiumum.com/currencies",
-      {
-        responseType: "json",
-        throwHttpErrors: false
-      }
-    );
+    const response = await fetch("https://gold.teknologiumum.com/currencies");
 
-    if (statusCode !== 200) {
+    if (response.status !== 200) {
       throw "Gagal mendapatkan data forex";
     }
 
+    const body = await response.json();
 
     return body.reduce((currencyBySymbol, currency) => {
       currencyBySymbol[currency.name] = currency;
diff --git a/src/services/eval/stock.js b/src/services/eval/stock.js
index 177a594..d5434b4 100644
--- a/src/services/eval/stock.js
+++ b/src/services/eval/stock.js
@@ -1,5 +1,3 @@
-import got from "got";
-
 export async function fetchStock(stockCode) {
   if (typeof stockCode !== "string") throw "Kode saham harus berupa string";
   if (!/^[A-Z]{4}(?:-[A-Z][A-Z\d]{0,2})?$/.test(stockCode)) {
@@ -9,19 +7,17 @@ export async function fetchStock(stockCode) {
   const requestSearchParams = new URLSearchParams();
   requestSearchParams.set("stockCode", stockCode);
 
-  const { statusCode, body } = await got.get(
-    `https://gold.teknologiumum.com/stock?${requestSearchParams.toString()}`,
-    {
-      responseType: "json",
-      throwHttpErrors: false
-    }
+  const response = await fetch(
+    `https://gold.teknologiumum.com/stock?${requestSearchParams.toString()}`
   );
 
-  if (statusCode !== 200) {
+  if (response.status !== 200) {
     throw `Gagal mendapatkan data saham ${stockCode}`;
   }
 
-  const response = {
+  const body = await response.json();
+
+  const mappedResponse = {
     name: body.symbol,
     close: body.close,
     previous: body.open,
@@ -31,8 +27,7 @@ export async function fetchStock(stockCode) {
     value: body.close
   };
 
+  if (mappedResponse.name === "") throw stockCode;
 
-  if (response.name === "") throw stockCode;
-
-  return response;
+  return mappedResponse;
 }
diff --git a/src/services/snap/utils.js b/src/services/snap/utils.js
index 4e751e5..0a35a18 100644
--- a/src/services/snap/utils.js
+++ b/src/services/snap/utils.js
@@ -1,4 +1,3 @@
-import got from "got";
 import { DEFAULT_HEADERS } from "#utils/http.js";
 import {
   ERR_EMPTY_CODE,
@@ -27,10 +26,9 @@ export async function generateImage(code, lang) {
   }
 
   const linenr = code.split("\n").length;
-  const { body } = await got.post("https://graphene.teknologiumum.com/api", {
+  const response = await fetch("https://graphene.teknologiumum.com/api", {
     headers: DEFAULT_HEADERS,
-    http2: true,
-    json: {
+    body: JSON.stringify({
       code: code.replace(/^\s+|\s+$/g, ""), // trim extranous whitespace at the end of the code
       lang: lang === "" ? null : lang,
       theme: "github-dark-dimmed",
@@ -41,15 +39,9 @@ export async function generateImage(code, lang) {
         colour: "#A0ADB6",
         radius: 4
       }
-    },
-    responseType: "buffer",
-    timeout: {
-      request: 60_000
-    },
-    retry: {
-      limit: 3
-    }
+    }),
+    cache: "no-cache"
   });
 
-  return body;
+  return Buffer.from(await response.arrayBuffer());
 }
diff --git a/src/uptime.js b/src/uptime.js
index 3306e6c..29f32ea 100644
--- a/src/uptime.js
+++ b/src/uptime.js
@@ -1,5 +1,4 @@
 import dotenv from "dotenv";
-import got from "got";
 import * as Sentry from "@sentry/node";
 import { pathTo } from "#utils/path.js";
 
@@ -17,7 +16,7 @@ async function run(url) {
   searchParams.set("ping", "0");
   searchParams.set("status", "up");
 
-  await got.get(url + "?" + searchParams.toString());
+  await fetch(url + "?" + searchParams.toString());
 }
 
 for (;;) {