@bcpros/nestjs-slack-bolt
v1.1.0
Published
A Nestjs module using Slack Bold SDK
Downloads
3
Readme
Table of Contents
Description
This module gives a handy way to develop Slack applications using the Nestjs framework
Features
The Nestjs Slack Bolt module offers the following features to simplify the interaction between your application and Slack API:
- Message Handling
- Command Handling
- Action Handling
- Event Handling
- Shortcut Handling
Installation
The module can be installed using yarn or npm:
$ yarn add nestjs-slack-bolt
OR
$ npm i nestjs-slack-bolt
Setting Up
Add these variables to the .env
file to set up the module:
# To define on API mode
SLACK_SIGNING_SECRET="**"
# To define on Socket mode
SLACK_APP_TOKEN="**"
# Required variables
SLACK_BOT_TOKEN="**"
SLACK_SOCKET_MODE=true
Usage
To use the module, 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.forRoot()],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
Examples
Here are a few examples to demonstrate how you can use the Nestjs Slack Bolt module in your application:
Using annotations
Handling a message event
import { Controller } from '@nestjs/common';
import { Message } from 'nestjs-slack-bolt';
import { SlackEventMiddlewareArgs } from '@slack/bolt';
@Controller()
export class AppController {
@Message('hi')
message({ say }: SlackEventMiddlewareArgs) {
say('Hello, I received your message!');
}
// Other handlers...
}
Handling an action
import { Controller } from '@nestjs/common';
import { Action } from 'nestjs-slack-bolt';
import { SlackActionMiddlewareArgs } from '@slack/bolt';
@Controller()
export class AppController {
@Action('click')
action({ say }: SlackActionMiddlewareArgs) {
say('Click event received, nice job!');
}
// Other handlers...
}
Handling a command
import { Controller } from '@nestjs/common';
import { Command } from 'nestjs-slack-bolt';
import { SlackCommandMiddlewareArgs } from '@slack/bolt';
@Controller()
export class AppController {
@Command('/list')
command({ say }: SlackCommandMiddlewareArgs) {
say('The /list command has been received. Processing...');
}
// Other handlers...
}
Handling an event
import { Controller } from '@nestjs/common';
import { Event } from 'nestjs-slack-bolt';
import { SlackEventMiddlewareArgs } from '@slack/bolt';
@Controller()
export class AppController {
@Event('app_home_opened')
event({ say }: SlackEventMiddlewareArgs) {
say('The app was just opened!');
}
// Other handlers...
}
Handling a shortcut event
import { Controller } from '@nestjs/common';
import { Shortcut } from 'nestjs-slack-bolt';
@Controller()
export class AppController {
@Shortcut('test_shortcut')
async shortcut({ shortcut, ack, client, logger }) {
try {
await ack(); //Acknowledge shortcut request
const result = await client.views.open({
trigger_id: shortcut.trigger_id,
view: { /* Your view parameters */ }
});
logger.info(result); // Log the result
}
catch (error) {
logger.error(error); // Log any error
}
}
// Other handlers...
}
These examples demonstrate how to handle different types of interactions in your Slack application using the NestJS Slack Bolt module.
Using the SlackService
import { Controller } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { SlackService } from 'nestjs-slack-bolt/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 }),
}),
);
}
}
Contributors ✨
Thanks goes to these wonderful people (emoji key):
This project follows the all-contributors specification. Contributions of any kind welcome!