
// /app/api/slack/route.ts
import { NextResponse } from 'next/server'
import { WebClient } from '@slack/web-api'
export async function GET(req: Request) {
const web = new WebClient('[Bot Token]')
const url = new Url(req.url)
const code = url.searchParams.get('code') as string
const result = await web.oauth.v2.access({
client_id: '[Client Id]',
client_secret: '[Client Secret]',
code: code,
redirect_uri: 'https://daily-producthunt.kidow.me/api/redirect/slack'
})
return NextResponse.json(result)
}{
"ok": true,
"app_id": "[App Id]",
"authed_user": {
"id": "UKLFE42HE"
},
"scope": "channels:read,chat:write,groups:read,im:read,mpim:read",
"token_type": "bot",
"access_token": "[Bot Token]",
"bot_user_id": "[Bot User ID]",
"team": {
"id": "[Team ID]",
"name": "[Team Name]"
},
"enterprise": null,
"is_enterprise_install": false,
"response_metadata": {
"scopes": [
"channels:read",
"chat:write",
"groups:read",
"im:read",
"mpim:read"
]
}
}const bot = new WebClient(result.access_token)
const { channels } = await bot.conversations.list({
types: 'im'
})
const channelId = channels.find(channel => chanenl.user === result?.authed_user?.id)
"channels": [
{
"id": "D05EZ35K2Q3",
"created": 1688099992,
"is_archived": false,
"is_im": true,
"is_org_shared": false,
"context_team_id": "[Team ID]",
"updated": 1688099992116,
"user": "USLACKBOT",
"is_user_deleted": false,
"priority": 0
},
{
"id": "D05EW8RUFRB",
"created": 1688099992,
"is_archived": false,
"is_im": true,
"is_org_shared": false,
"context_team_id": "[Team ID]",
"updated": 1688099992301,
"user": "U048RA3PYRY",
"is_user_deleted": false,
"priority": 0
},
{
"id": "D05ESGRP77G",
"created": 1688099992,
"is_archived": false,
"is_im": true,
"is_org_shared": false,
"context_team_id": "[Team ID]",
"updated": 1688099992201,
"user": "UKLFE42HE",
"is_user_deleted": false,
"priority": 0
}
]