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

WIP: refactor shareSearchResults

Yuki Takei 4 лет назад
Родитель
Сommit
5bfbe8ef7c

+ 3 - 6
packages/slackbot-proxy/src/controllers/growi-to-slack.ts

@@ -207,6 +207,8 @@ export class GrowiToSlackCtrl {
   ): Promise<void|string|Res|WebAPICallResult> {
     const { tokenGtoPs } = req;
 
+    logger.debug('Slack API called: ', { method });
+
     if (tokenGtoPs.length !== 1) {
       return res.webClientErr('tokenGtoPs is invalid', 'invalid_tokenGtoP');
     }
@@ -236,17 +238,12 @@ export class GrowiToSlackCtrl {
       const opt = req.body;
       opt.headers = req.headers;
 
-      await client.apiCall(method, opt);
+      return client.apiCall(method, opt);
     }
     catch (err) {
       logger.error(err);
       return res.webClientErr(`failed to send to slack. err: ${err.message}`, 'fail_api_call');
     }
-
-    logger.debug('send to slack is success');
-
-    // required to return ok for apiCall
-    return res.webClient();
   }
 
 }

+ 0 - 5
packages/slackbot-proxy/src/middlewares/slack-to-growi/add-webclient-response-to-res.ts

@@ -4,7 +4,6 @@ import {
 
 
 export type WebclientRes = Res & {
-  webClient: () => void,
   webClientErr: (message?:string, errorCode?:string) => void
 };
 
@@ -14,10 +13,6 @@ export class AddWebclientResponseToRes implements IMiddleware {
 
   use(@Req() req: Req, @Res() res: WebclientRes, @Next() next: Next): void {
 
-    res.webClient = () => {
-      return res.send({ ok: true });
-    };
-
     res.webClientErr = (error?:string, errorCode?:string) => {
       return res.send({ ok: false, error, errorCode });
     };

+ 41 - 6
src/server/service/slackbot.js

@@ -157,10 +157,48 @@ class SlackBotService extends S2sMessageHandlable {
   }
 
   async shareSearchResults(client, payload) {
-    client.chat.postMessage({
-      channel: payload.channel.id,
-      text: JSON.parse(payload.actions[0].value).pageList,
+    const { channel, container } = payload;
+    const channelId = channel.id;
+    const originalMessageTs = container.message_ts;
+
+    console.log({ container });
+
+    // get original message data
+    const historyResult = await client.conversations.history({
+      channel: channelId,
+      inclusive: true,
+      latest: originalMessageTs,
+      limit: 1,
     });
+
+    if (!historyResult.ok || historyResult.messages.length !== 1) {
+      logger.error('Failed to share search results.');
+      await client.chat.postEphemeral({
+        channel: channelId,
+        text: 'Failed to share search results.',
+      });
+      throw new Error('Failed to share search results.');
+    }
+
+    const originalMessage = historyResult.messages[0];
+
+    console.log({ originalMessage });
+    // // share
+    // const postPromise = client.chat.postMessage({
+    //   channel: channelId,
+    //   as_user: true,
+    //   text: message.text,
+    //   blocks: message.blocks,
+    // });
+
+    // // remove
+    // const deletePromise = client.chat.delete({
+    //   channel: channelId,
+    //   as_user: false,
+    //   ts: originalMessageTs,
+    // });
+
+    // return Promise.all([postPromise, deletePromise]);
   }
 
   async showEphemeralSearchResults(client, body, args, offsetNum) {
@@ -231,9 +269,6 @@ class SlackBotService extends S2sMessageHandlable {
           },
           style: 'primary',
           action_id: 'shareSearchResults',
-          value: JSON.stringify({
-            offset, body, args, pageList: `${keywordsAndDesc} \n\n ${urls.join('\n')}`,
-          }),
         },
       ],
     };