|
|
@@ -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;
|
|
|
};
|