0.2.4 • Published 9 months ago

nestjs-bolt v0.2.4

Weekly downloads
-
License
MIT
Repository
github
Last release
9 months ago

code style: prettier


Description

This module gives a handy way to develop Slack applications using the Nestjs framework

Features

  • Handle Messages
  • Handle Commands
  • Handle Actions
  • Handle Events

Installation

# yarn
$ yarn add nestjs-bolt

# npm
$ npm i nestjs-bolt

Usage

Add these variables to the .env file

# to define on API mode
SLACK_SIGNING_SECRET="**"

# to define on Socket mode
SLACK_APP_TOKEN="**"

# require variables
SLACK_BOT_TOKEN="**"
SLACK_SOCKET_MODE=true

Import the SlackModule

import { Module } from '@nestjs/common';
import { SlackModule } from 'nestjs-slack-bolt';
import { AppController } from './app.controller';
import { AppService } from './app.service';

@Module({
  imports: [SlackModule],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

Example

Using annotations

import { Controller } from '@nestjs/common';
import { Action, Command, Message, Event } from 'nestjs-slack-bolt';
import { AppService } from './app.service';
import {
  SlackActionMiddlewareArgs,
  SlackCommandMiddlewareArgs,
  SlackEventMiddlewareArgs,
} from '@slack/bolt';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Message('hi') //Handle a message event
  message({ say }: SlackEventMiddlewareArgs) {
    say('Hello');
  }

  @Action('click') //Handle an action
  action({ say }: SlackActionMiddlewareArgs) {
    say('click event received');
  }

  @Command('/list') // handle command
  command({ say }: SlackCommandMiddlewareArgs) {
    say('/list command received');
  }

  @Event('app_home_opened')
  event({ say }: SlackEventMiddlewareArgs) {
    say('app_open_event received');
  }
}

Example

Using the SlackService

import { Controller } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { SlackService } from 'nestjs-slack-bolt/dist/services/slack.service';
import { Cron, CronExpression } from '@nestjs/schedule';
import { from } from 'rxjs';

@Controller()
export class AppController {
  constructor(
    private readonly slackService: SlackService,
    private readonly configService: ConfigService,
  ) {}

  @Cron(CronExpression.EVERY_10_SECONDS)
  cronJob() {
    this.searchUsers()
      .pipe()
      .subscribe((users) => {
        console.log(JSON.stringify(users));
      });
  }

  searchUsers(cursor?: string) {
    return from(
      this.slackService.client.users.list({
        token: this.configService.get('SLACK_BOT_TOKEN'),
        limit: 1,
        ...(cursor && { cursor }),
      }),
    );
  }
}

TODO

  • Improve testing
  • handle additional slack events

Contribute & Disclaimer

....

0.2.4

9 months ago

0.2.3

9 months ago

0.2.2

9 months ago

0.2.1

9 months ago

0.2.0

9 months ago

0.1.2

9 months ago

0.1.1

9 months ago

0.1.0

9 months ago