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

+ 1 - 0
packages/slack/src/index.ts

@@ -12,5 +12,6 @@ export * from './interfaces/request-from-slack';
 export * from './models/errors';
 export * from './models/errors';
 export * from './middlewares/verify-slack-request';
 export * from './middlewares/verify-slack-request';
 export * from './utils/block-creater';
 export * from './utils/block-creater';
+export * from './utils/post-ephemeral-errors';
 export * from './utils/slash-command-parser';
 export * from './utils/slash-command-parser';
 export * from './utils/webclient-factory';
 export * from './utils/webclient-factory';

+ 35 - 0
packages/slack/src/utils/post-ephemeral-errors.ts

@@ -0,0 +1,35 @@
+import { WebAPICallResult } from '@slack/web-api';
+
+import { generateMarkdownSectionBlock } from './block-creater';
+import { generateWebClient } from './webclient-factory';
+
+export const postEphemeralErrors = async(
+  rejectedResults: PromiseRejectedResult[],
+  channelId: string,
+  userId: string,
+  botToken: string,
+): Promise<WebAPICallResult|void> => {
+
+  if (rejectedResults.length > 0) {
+    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+    const client = generateWebClient(botToken);
+
+    return client.chat.postEphemeral({
+      text: 'Error occured.',
+      channel: channelId,
+      user: userId,
+      blocks: [
+        generateMarkdownSectionBlock('*Error occured:*'),
+        ...rejectedResults.map((rejectedResult) => {
+          const reason = rejectedResult.reason.toString();
+          const resData = rejectedResult.reason.response?.data;
+          const resDataMessage = resData?.message || resData.toString();
+          const errorMessage = `${reason} (${resDataMessage})`;
+          return generateMarkdownSectionBlock(errorMessage);
+        }),
+      ],
+    });
+  }
+
+  return;
+};

+ 9 - 26
packages/slackbot-proxy/src/controllers/slack.ts

@@ -4,7 +4,9 @@ import {
 
 
 import axios from 'axios';
 import axios from 'axios';
 
 
-import { generateMarkdownSectionBlock, generateWebClient, parseSlashCommand } from '@growi/slack';
+import {
+  generateMarkdownSectionBlock, parseSlashCommand, postEphemeralErrors,
+} from '@growi/slack';
 import { Installation } from '~/entities/installation';
 import { Installation } from '~/entities/installation';
 
 
 import { InstallationRepository } from '~/repositories/installation';
 import { InstallationRepository } from '~/repositories/installation';
@@ -131,33 +133,14 @@ export class SlackCtrl {
     // pickup PromiseRejectedResult only
     // pickup PromiseRejectedResult only
     const results = await Promise.allSettled(promises);
     const results = await Promise.allSettled(promises);
     const rejectedResults: PromiseRejectedResult[] = results.filter((result): result is PromiseRejectedResult => result.status === 'rejected');
     const rejectedResults: PromiseRejectedResult[] = results.filter((result): result is PromiseRejectedResult => result.status === 'rejected');
+    const botToken = installation?.data.bot?.token;
 
 
-    if (rejectedResults.length > 0) {
-      const botToken = installation?.data.bot?.token;
-
+    try {
       // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
       // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
-      const client = generateWebClient(botToken!);
-
-      try {
-        client.chat.postEphemeral({
-          text: 'Error occured.',
-          channel: body.channel_id,
-          user: body.user_id,
-          blocks: [
-            generateMarkdownSectionBlock('*Error occured:*'),
-            ...rejectedResults.map((rejectedResult) => {
-              const reason = rejectedResult.reason.toString();
-              const resData = rejectedResult.reason.response?.data;
-              const resDataMessage = resData?.message || resData.toString();
-              const errorMessage = `${reason} (${resDataMessage})`;
-              return generateMarkdownSectionBlock(errorMessage);
-            }),
-          ],
-        });
-      }
-      catch (err) {
-        logger.error(err);
-      }
+      postEphemeralErrors(rejectedResults, body.channel_id, body.user_id, botToken!);
+    }
+    catch (err) {
+      logger.error(err);
     }
     }
   }
   }