All files / src/lib/functions messages.ts

100% Statements 9/9
100% Branches 2/2
100% Functions 1/1
100% Lines 9/9

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57                23x             2x                         2x 1x 1x                 1x     1x   1x                   1x    
import {
  RESTPostChatMessageBody,
  RESTPostChatMessageResult,
} from "kick-api-types/rest";
 
/**
 * Sends a message to a Kick chat channel on behalf of the broadcaster.
 */
export const sendMessage = async ({
  broadcaster,
  message,
}: {
  broadcaster: { name: string; accessToken: string };
  message: string;
}): Promise<{ sent: boolean; message: string; status: number }> => {
  const res = await fetch("https://api.kick.com/public/v1/chat", {
    method: "POST",
    headers: {
      Authorization: `Bearer ${broadcaster.accessToken}`,
      "Content-Type": "application/json",
      Accept: "*/*",
    },
    body: JSON.stringify({
      content: message,
      type: "bot",
    } as RESTPostChatMessageBody),
  });
 
  if (!res.ok) {
    const data = (await res.json()) as RESTPostChatMessageResult;
    console.log(
      JSON.stringify({
        messageSending: {
          sent: false,
          message: data.message,
          status: res.status,
        },
      })
    );
    return { sent: false, message: data.message, status: res.status };
  }
 
  const data = (await res.json()) as RESTPostChatMessageResult;
 
  console.log(
    JSON.stringify({
      messageSending: {
        sent: data.data.is_sent,
        message: data.message,
        status: res.status,
      },
    })
  );
 
  return { sent: data.data.is_sent, message: data.message, status: res.status };
};