@kamuridesu/whatframework
Version:
A simple WhatsApp Bot Framework on top of Baileys
106 lines (92 loc) • 3.36 kB
TypeScript
import { GroupMetadata, makeWASocket, ParticipantAction, proto } from "@whiskeysockets/baileys";
import { WAMessage, WAMessageKey } from "@whiskeysockets/baileys";
import { IMessage, IReactionMessage } from "./message.js";
import { IGroup } from './types.js';
import Translations from "../libs/lang/interface.js";
interface GroupsData {
[groupId: string]: {
lastFetchDate: number;
groupData: IGroup
}
}
export interface Media {
media: Buffer | string;
messageType: string;
mimeType: string;
error: Error | undefined;
}
export interface EntryPoint {
botName: string;
prefix: string;
ownerNumber: string;
language: string | undefined;
maxGroupsLimit: number | undefined;
commandHandlers: (ctx: IBot,
command: string,
args: string[],
messageData: IMessage) => void;
chatHandlers: (ctx: IBot,
messageBody: string,
messageData: IMessage) => void;
addMemberHandlers?: (ctx: IBot,
data: {
id: string;
author: string;
participants: string[];
}) => void;
removeMemberHandlers?: (ctx: IBot,
data: {
id: string;
author: string;
participants: string[];
}) => void;
}
export interface Module {
Entrypoint: EntryPoint
}
export interface IMessageHandler {
handle: (message: WAMessage, bot: IBot) => Promise<void>
handleUpdate: (key: WAMessageKey, updates: Partial<WAMessage>, ctx: IBot) => Promise<void>
handleRemoveMember(data: {
id: string;
author: string;
participants: string[];
action: ParticipantAction;
}, bot: IBot): Promise<void>
handleNewMember(data: {
id: string;
author: string;
participants: string[];
action: ParticipantAction;
}, bot: IBot): Promise<void>
}
export interface IBot {
connection?: ReturnType<typeof makeWASocket>;
readonly name: string;
readonly prefix: string;
botNumber?: string;
readonly ownerNumber: string;
readonly language: string;
readonly lang: Translations;
reconnectOnClose: boolean;
groupsData: GroupsData // This is for caching purpose
init(messageHandler: IMessageHandler): Promise<void>;
getMessage(key: proto.IMessageKey): Promise<proto.IMessage | undefined>
replyText(ctx: IMessage, text: string, options: any): Promise<IMessage | undefined>;
replyMedia(
ctx: IMessage,
media: string | Media,
messageType: string,
mimeType?: string,
mediaCaption?: string,
options?: any
): Promise<IMessage | undefined>;
sendTextMessage(ctx: IMessage | string, text: string, options?: {}): Promise<IMessage | undefined>;
reactMessage(ctx: IMessage | string, reactionMessage: IReactionMessage, options?: any): Promise<IMessage | undefined>
getGroups(): Promise<{
[_: string]: GroupMetadata;
} | undefined>
loadMessage(ctx: IMessage | WAMessageKey): Promise<IMessage | WAMessage | undefined>;
loadMessageById(originJid: string, stanzaId: string): Promise<proto.IWebMessageInfo | undefined>;
createPoll(ctx: IMessage, poolName: string, options: Array<string>): Promise<boolean>;
}