Explorar o código

show postEphemeralMessage

kaori %!s(int64=4) %!d(string=hai) anos
pai
achega
6a26733a8a

+ 7 - 3
packages/slackbot-proxy/src/controllers/slack.ts

@@ -169,6 +169,10 @@ export class SlackCtrl {
 
     const { body, authorizeResult } = req;
 
+    // Send response immediately to avoid opelation_timeout error
+    // See https://api.slack.com/apis/connections/events-api#the-events-api__responding-to-events
+    res.send();
+
     // pass
     if (body.ssl_check != null) {
       return;
@@ -183,10 +187,10 @@ export class SlackCtrl {
 
     // register
     if (callBackId === 'register') {
-      const insertResults = await this.registerService.insertOrderRecord(this.orderRepository, installation, payload);
+      const insertOrderResults = await this.registerService.insertOrderRecord(this.orderRepository, installation, authorizeResult, payload);
 
-      if (insertResults != null && insertResults.response_action === 'errors') {
-        return res.send(insertResults);
+      if (insertOrderResults != null && insertOrderResults.errors != null) {
+        return;
       }
 
       await this.registerService.notifyServerUriToSlack(authorizeResult, payload);

+ 18 - 1
packages/slackbot-proxy/src/services/RegisterService.ts

@@ -44,14 +44,20 @@ export class RegisterService implements GrowiCommandProcessor {
   }
 
   async insertOrderRecord(
+      orderRepository: OrderRepository, installation: Installation | undefined,
       // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
-      orderRepository: OrderRepository, installation: Installation | undefined, payload: any,
+      authorizeResult:AuthorizeResult, payload: any,
   ): Promise<any> {
     const inputValues = payload.view.state.values;
     const growiUrl = inputValues.growiUrl.contents_input.value;
     const tokenPtoG = inputValues.tokenPtoG.contents_input.value;
     const tokenGtoP = inputValues.tokenGtoP.contents_input.value;
 
+    const { botToken } = authorizeResult;
+    const { channel } = JSON.parse(payload.view.private_metadata);
+
+    const client = new WebClient(botToken, { logLevel: isProduction ? LogLevel.DEBUG : LogLevel.INFO });
+
     const isUrl = (url: string) => {
       return url.match(/^(https?:\/\/)/);
     };
@@ -63,6 +69,17 @@ export class RegisterService implements GrowiCommandProcessor {
           growiUrl: 'Please enter a valid URL',
         },
       };
+      await client.chat.postEphemeral({
+        channel,
+        user: payload.user.id,
+        // Recommended including 'text' to provide a fallback when using blocks
+        // refer to https://api.slack.com/methods/chat.postEphemeral#text_usage
+        text: 'Invalid URL',
+        blocks: [
+          generateMarkdownSectionBlock('Please enter a valid URL'),
+        ],
+      });
+      return { errors: 'Please enter a valid URL' };
     }
 
     orderRepository.save({