messages.ts•3.06 kB
import { SlackClientWrapper } from '../utils/slack-client.js';
import {
sendMessageSchema,
updateMessageSchema,
deleteMessageSchema,
getChannelHistorySchema,
searchMessagesSchema,
sendFormattedMessageSchema,
} from '../utils/validators.js';
export async function sendMessage(client: SlackClientWrapper, args: unknown) {
const params = sendMessageSchema.parse(args);
return await client.safeCall(async () => {
const result = await client.getClient().chat.postMessage({
channel: params.channel,
text: params.text,
thread_ts: params.thread_ts,
});
return {
ok: true,
channel: result.channel,
ts: result.ts,
message: result.message,
};
});
}
export async function updateMessage(client: SlackClientWrapper, args: unknown) {
const params = updateMessageSchema.parse(args);
return await client.safeCall(async () => {
const result = await client.getClient().chat.update({
channel: params.channel,
ts: params.ts,
text: params.text,
});
return {
ok: true,
channel: result.channel,
ts: result.ts,
message: result.message,
};
});
}
export async function deleteMessage(client: SlackClientWrapper, args: unknown) {
const params = deleteMessageSchema.parse(args);
return await client.safeCall(async () => {
await client.getClient().chat.delete({
channel: params.channel,
ts: params.ts,
});
return {
ok: true,
channel: params.channel,
ts: params.ts,
};
});
}
export async function getChannelHistory(client: SlackClientWrapper, args: unknown) {
const params = getChannelHistorySchema.parse(args);
return await client.safeCall(async () => {
const result = await client.getClient().conversations.history({
channel: params.channel,
limit: params.limit,
oldest: params.oldest,
latest: params.latest,
cursor: params.cursor,
});
return {
messages: result.messages || [],
has_more: result.has_more,
next_cursor: result.response_metadata?.next_cursor,
};
});
}
export async function searchMessages(client: SlackClientWrapper, args: unknown) {
const params = searchMessagesSchema.parse(args);
return await client.safeCall(async () => {
const result = await client.getClient().search.messages({
query: params.query,
count: params.count,
sort: params.sort,
});
return {
messages: result.messages,
total: result.messages?.total || 0,
};
});
}
export async function sendFormattedMessage(client: SlackClientWrapper, args: unknown) {
const params = sendFormattedMessageSchema.parse(args);
return await client.safeCall(async () => {
const result = await client.getClient().chat.postMessage({
channel: params.channel,
text: params.text,
blocks: params.blocks as any,
thread_ts: params.thread_ts,
});
return {
ok: true,
channel: result.channel,
ts: result.ts,
message: result.message,
};
});
}