Parcourir la source

implement postMessage

itizawa il y a 4 ans
Parent
commit
531298b646
1 fichiers modifiés avec 33 ajouts et 2 suppressions
  1. 33 2
      packages/slackbot-proxy/src/controllers/growi-to-slack.ts

+ 33 - 2
packages/slackbot-proxy/src/controllers/growi-to-slack.ts

@@ -5,7 +5,9 @@ import axios from 'axios';
 
 import { WebAPICallResult } from '@slack/web-api';
 
-import { verifyGrowiToSlackRequest, getConnectionStatuses, relationTestToSlack } from '@growi/slack';
+import {
+  verifyGrowiToSlackRequest, getConnectionStatuses, relationTestToSlack, generateWebClient,
+} from '@growi/slack';
 
 import { GrowiReq } from '~/interfaces/growi-to-slack/growi-req';
 import { InstallationRepository } from '~/repositories/installation';
@@ -152,8 +154,37 @@ export class GrowiToSlackCtrl {
   @UseBefore(verifyGrowiToSlackRequest)
   async postResult(@Req() req: GrowiReq, @Res() res: Res): Promise<void|string|Res|WebAPICallResult> {
     const { tokenGtoPs } = req;
-    console.log(tokenGtoPs);
 
+    if (tokenGtoPs.length !== 1) {
+      return res.status(400).send({ message: 'tokenGtoPs is invalid' });
+    }
+
+    const tokenGtoP = tokenGtoPs[0];
+
+    // retrieve relation with Installation
+    const relation = await this.relationRepository.createQueryBuilder('relation')
+      .where('tokenGtoP = :token', { token: tokenGtoP })
+      .leftJoinAndSelect('relation.installation', 'installation')
+      .getOne();
+
+    if (relation == null) {
+      return res.status(400).send({ message: 'relation is invalid' });
+    }
+
+    const token = relation.installation.data.bot?.token;
+    if (token == null) {
+      return res.status(400).send({ message: 'installation is invalid' });
+    }
+
+    const client = generateWebClient(token);
+    await client.chat.postMessage({
+      channel: req.body.channel,
+      blocks: req.body.blocks,
+    });
+
+    logger.debug('postMessage is success');
+
+    return res.end();
   }
 
 }