Просмотр исходного кода

rename the class and the todo comment

kaori 5 лет назад
Родитель
Сommit
9b2c77c76d
1 измененных файлов с 35 добавлено и 4 удалено
  1. 35 4
      src/server/routes/apiv3/slack-bot.js

+ 35 - 4
src/server/routes/apiv3/slack-bot.js

@@ -12,7 +12,7 @@ module.exports = (crowi) => {
 
   router.get('/', async(req, res) => {
 
-    class OriginalReceiverClass extends EventEmitter {
+    class ReceiverClass extends EventEmitter {
 
       constructor(signingSecret, endpoints) {
         super();
@@ -24,6 +24,7 @@ module.exports = (crowi) => {
         }
       }
 
+
       init(app) {
         this.bolt = app;
       }
@@ -53,22 +54,52 @@ module.exports = (crowi) => {
         });
       }
 
+      // This is a very simple implementation. Look at the ExpressReceiver source for more detail
+      async requestHandler(req, res) {
+        let ackCalled = false;
+        // Assume parseBody function exists to parse incoming requests
+        const parsedReq = parseBody(req);
+        const event = {
+          body: parsedReq.body,
+          // Receivers are responsible for handling acknowledgements
+          // `ack` should be prepared to be called multiple times and
+          // possibly with `response` as an error
+          ack: (response) => {
+            if (ackCalled) {
+              return;
+            }
+
+            if (response instanceof Error) {
+              res.status(500).send();
+            }
+            else if (!response) {
+              res.send('');
+            }
+            else {
+              res.send(response);
+            }
+
+            ackCalled = true;
+          },
+        };
+        await this.bolt.processEvent(event);
+      }
+
     }
 
-    const receiver = new OriginalReceiverClass(process.env.SLACK_SIGNING_SECRET, '/');
+    const receiver = new ReceiverClass(process.env.SLACK_SIGNING_SECRET, '/');
 
     const app = new App({
       token: process.env.SLACK_BOT_TOKEN,
       receiver,
     });
 
-    // TODO: customising event method
+    // TODO: improve event method
     app.event('message', async({ event, client }) => {
       // Do some slack-specific stuff here
       await client.chat.postMessage('hogehoge');
     });
   });
 
-
   return router;
 };