a fun bot for the hc slack
at v0.0.1 2.0 kB view raw
1import { slackClient } from "../index"; 2 3import Bottleneck from "bottleneck"; 4import Queue from "./queue"; 5 6import colors from "colors"; 7import type { 8 ChatPostMessageRequest, 9 ChatPostMessageResponse, 10} from "slack-edge"; 11 12// Create a rate limiter with Bottleneck 13const limiter = new Bottleneck({ 14 minTime: 1000, // 1 second between each request 15}); 16 17const messageQueue = new Queue(); 18 19function sendMessage( 20 message: ChatPostMessageRequest, 21): Promise<ChatPostMessageResponse> { 22 return limiter.schedule(() => slackClient.chat.postMessage(message)); 23} 24 25async function slog( 26 logMessage: string, 27 location?: { 28 thread_ts?: string; 29 channel: string; 30 }, 31): Promise<void> { 32 const message: ChatPostMessageRequest = { 33 channel: location?.channel || process.env.SLACK_LOG_CHANNEL || "", 34 thread_ts: location?.thread_ts, 35 text: logMessage.substring(0, 2500), 36 blocks: [ 37 { 38 type: "section", 39 text: { 40 type: "mrkdwn", 41 text: logMessage 42 .split("\n") 43 .map((a) => `> ${a}`) 44 .join("\n"), 45 }, 46 }, 47 { 48 type: "context", 49 elements: [ 50 { 51 type: "mrkdwn", 52 text: `${new Date().toString()}`, 53 }, 54 ], 55 }, 56 ], 57 }; 58 59 messageQueue.enqueue(() => sendMessage(message)); 60} 61 62type LogType = "info" | "start" | "cron" | "error"; 63 64export async function clog(logMessage: string, type: LogType): Promise<void> { 65 switch (type) { 66 case "info": 67 console.log(colors.blue(logMessage)); 68 break; 69 case "start": 70 console.log(colors.green(logMessage)); 71 break; 72 case "cron": 73 console.log(colors.magenta(`[CRON]: ${logMessage}`)); 74 break; 75 case "error": 76 console.error( 77 colors.red.bold( 78 `Yo <@S0790GPRA48> deres an error \n\n [ERROR]: ${logMessage}`, 79 ), 80 ); 81 break; 82 default: 83 console.log(logMessage); 84 } 85} 86 87export async function blog( 88 logMessage: string, 89 type: LogType, 90 location?: { 91 thread_ts?: string; 92 channel: string; 93 }, 94): Promise<void> { 95 slog(logMessage, location); 96 clog(logMessage, type); 97} 98 99export { clog as default, slog };