wa-api-v2 / src /structures /chatting.dto.ts
baagas0's picture
init
b62a170
import {
ApiExtraModels,
ApiHideProperty,
ApiProperty,
getSchemaPath,
} from '@nestjs/swagger';
import { IsNumber, IsString } from 'class-validator';
import { SessionBaseRequest, SessionQuery } from './base.dto';
import {
BinaryFile,
RemoteFile,
VideoBinaryFile,
VideoRemoteFile,
VoiceBinaryFile,
VoiceRemoteFile,
} from './files.dto';
import { ChatIdProperty } from './properties.dto';
/**
* Queries
*/
export class CheckNumberStatusQuery extends SessionQuery {
@IsString()
phone: string;
}
export class MessageTextQuery extends SessionQuery {
@IsString()
phone: string;
@IsString()
text: string;
}
export class ChatQuery extends SessionQuery {
@ChatIdProperty()
chatId: string;
}
export class GetMessageQuery extends ChatQuery {
@IsNumber()
limit: number;
@ApiProperty({
example: true,
required: false,
description: 'Download media for messages',
})
downloadMedia: true;
}
export class GetPresenceQuery extends ChatQuery {}
/**
* Requests
*/
export class ChatRequest extends SessionBaseRequest {
@ChatIdProperty()
chatId: string;
}
export class SendSeenRequest extends ChatRequest {
@ApiProperty({
example: 'false_11111111111@c.us_AAAAAAAAAAAAAAAAAAAA',
required: false,
description:
"NOWEB engine only - it's important to mark ALL messages as seen",
})
messageId?: string;
@ApiProperty({
example: '11111111111@c.us',
required: false,
description:
'NOWEB engine only - the ID of the user that sent the message (undefined for individual chats)',
})
participant?: string;
}
export class MessageRequest extends SessionBaseRequest {
@ApiProperty({
example: 'false_11111111111@c.us_AAAAAAAAAAAAAAAAAAAA',
})
messageId: string;
}
export class VCardContact {
@ApiProperty({
example:
'BEGIN:VCARD\nVERSION:3.0\nFN:Jane Doe\nORG:Company Name;\nTEL;type=CELL;type=VOICE;waid=911111111111:+91 11111 11111\nEND:VCARD',
description: 'The vcard string',
})
vcard: string;
}
export class Contact {
@ApiProperty({
example: 'John Doe',
description: 'The full name of the contact',
})
fullName: string;
@ApiProperty({
example: 'Company Name',
description: 'The organization of the contact',
required: false,
})
organization: string;
@ApiProperty({
example: '+91 11111 11111',
description: 'The phone number of the contact',
})
phoneNumber: string;
@ApiProperty({
example: '911111111111',
description: 'The whatsapp id of the contact. DO NOT add + or @c.us',
required: false,
})
whatsappId: string;
vcard: string = null;
}
@ApiExtraModels(Contact, VCardContact)
export class MessageContactVcardRequest extends ChatRequest {
@ApiProperty({
type: 'array',
oneOf: [
{
$ref: getSchemaPath(VCardContact),
},
{
$ref: getSchemaPath(Contact),
},
],
})
contacts: (VCardContact | Contact)[];
}
export class MessageTextRequest extends ChatRequest {
text = 'Hi there!';
@ApiHideProperty()
mentions?: string[];
}
export class EditMessageRequest {
text = 'Hello, world!';
@ApiHideProperty()
mentions?: string[];
}
export class MessageReplyRequest extends MessageTextRequest {
text = 'Reply text';
@ApiProperty({
example: 'false_11111111111@c.us_AAAAAAAAAAAAAAAAAAAA',
})
reply_to: string;
}
export class MessageLocationRequest extends ChatRequest {
latitude: number;
longitude: number;
title: string;
}
@ApiExtraModels(BinaryFile, RemoteFile)
class FileRequest extends ChatRequest {
@ApiProperty({
oneOf: [
{ $ref: getSchemaPath(BinaryFile) },
{ $ref: getSchemaPath(RemoteFile) },
],
})
file: BinaryFile | RemoteFile;
}
export class MessageImageRequest extends FileRequest {
caption: string;
}
export class MessageFileRequest extends FileRequest {
caption: string;
}
@ApiExtraModels(VoiceBinaryFile, VoiceRemoteFile)
export class MessageVoiceRequest extends ChatRequest {
@ApiProperty({
oneOf: [
{ $ref: getSchemaPath(VoiceBinaryFile) },
{ $ref: getSchemaPath(VoiceRemoteFile) },
],
})
file: VoiceBinaryFile | VoiceRemoteFile;
}
@ApiExtraModels(VideoRemoteFile, VideoBinaryFile)
export class MessageVideoRequest extends ChatRequest {
@ApiProperty({
oneOf: [
{ $ref: getSchemaPath(VideoRemoteFile) },
{ $ref: getSchemaPath(VideoBinaryFile) },
],
})
file: VideoRemoteFile | VideoBinaryFile;
caption: string = 'Just watch at this!';
}
export class MessageLinkPreviewRequest extends ChatRequest {
url: string;
title: string;
}
export class MessageReactionRequest extends MessageRequest {
@ApiProperty({
description:
'Emoji to react with. Send an empty string to remove the reaction',
example: 'πŸ‘',
})
reaction: string;
}
export class MessageStarRequest extends MessageRequest {
@ChatIdProperty()
chatId: string;
star: boolean;
}
export class WANumberExistResult {
numberExists: boolean;
@ApiProperty({
example:
'Chat id for the phone number. Undefined if the number does not exist',
})
chatId?: string;
}
export class MessagePoll {
@ApiProperty({
example: 'How are you?',
})
name: string;
@ApiProperty({
example: ['Awesome!', 'Good!', 'Not bad!'],
})
options: string[];
multipleAnswers = false;
}
export class MessagePollRequest extends ChatRequest {
poll: MessagePoll;
}
export class MessageDestination {
@ApiProperty({
description: 'Message ID',
example: 'false_11111111111@c.us_AAAAAAAAAAAAAAAAAAAA',
})
id: string;
to: string;
from: string;
fromMe: boolean;
}