67 lines
1.4 KiB
TypeScript
67 lines
1.4 KiB
TypeScript
import { TaskMode, TaskType } from "@heygen/streaming-avatar";
|
|
import { useCallback } from "react";
|
|
|
|
import { useStreamingAvatarContext } from "./context";
|
|
|
|
export const useTextChat = () => {
|
|
const { avatarRef } = useStreamingAvatarContext();
|
|
|
|
const sendMessage = useCallback(
|
|
(message: string) => {
|
|
if (!avatarRef.current) return;
|
|
avatarRef.current.speak({
|
|
text: message,
|
|
taskType: TaskType.TALK,
|
|
taskMode: TaskMode.ASYNC,
|
|
});
|
|
},
|
|
[avatarRef],
|
|
);
|
|
|
|
const sendMessageSync = useCallback(
|
|
async (message: string) => {
|
|
if (!avatarRef.current) return;
|
|
|
|
return await avatarRef.current?.speak({
|
|
text: message,
|
|
taskType: TaskType.TALK,
|
|
taskMode: TaskMode.SYNC,
|
|
});
|
|
},
|
|
[avatarRef],
|
|
);
|
|
|
|
const repeatMessage = useCallback(
|
|
(message: string) => {
|
|
if (!avatarRef.current) return;
|
|
|
|
return avatarRef.current?.speak({
|
|
text: message,
|
|
taskType: TaskType.REPEAT,
|
|
taskMode: TaskMode.ASYNC,
|
|
});
|
|
},
|
|
[avatarRef],
|
|
);
|
|
|
|
const repeatMessageSync = useCallback(
|
|
async (message: string) => {
|
|
if (!avatarRef.current) return;
|
|
|
|
return await avatarRef.current?.speak({
|
|
text: message,
|
|
taskType: TaskType.REPEAT,
|
|
taskMode: TaskMode.SYNC,
|
|
});
|
|
},
|
|
[avatarRef],
|
|
);
|
|
|
|
return {
|
|
sendMessage,
|
|
sendMessageSync,
|
|
repeatMessage,
|
|
repeatMessageSync,
|
|
};
|
|
};
|