Skip to main content

Attachments

Hướng dẫn thêm attachments (ảnh, file, audio) vào message với SmartMessage.

Lấy attachments người dùng gửi

Sử dụng decorator @Attachments() để đọc danh sách file mà user gửi cùng command.

import { Command, Attachments, AutoContext, SmartMessage } from '@n0xgg04/nezon';
import type { Nezon } from '@n0xgg04/nezon';

@Command('inspect')
async onInspect(
@Attachments() files: Nezon.Attachments,
@Attachments(0) firstFile: Nezon.Attachment | undefined,
@AutoContext('message') managedMessage: Nezon.AutoContextType.Message,
) {
const summary = [
`Tổng số file: ${files.length}`,
`File đầu tiên: ${firstFile?.filename ?? firstFile?.url ?? 'không có'}`,
].join('\n');
await managedMessage.reply(SmartMessage.text(summary));
}

Image Attachments

Thêm ảnh vào message với addImage().

Cú pháp

addImage(
url: string,
options?: {
filename?: string;
width?: number;
height?: number;
}
): SmartMessage

Ví dụ cơ bản

import { Command, AutoContext, SmartMessage } from '@n0xgg04/nezon';
import type { Nezon } from '@n0xgg04/nezon';

@Command('image')
async onImage(@AutoContext() [managedMessage]: Nezon.AutoContext) {
await managedMessage.reply(
SmartMessage.text('Check out this image!')
.addImage('https://example.com/image.jpg')
);
}

Ví dụ với options

@Command('image')
async onImage(@AutoContext() [managedMessage]: Nezon.AutoContext) {
await managedMessage.reply(
SmartMessage.text('High quality image')
.addImage('https://example.com/image.jpg', {
filename: 'my-image.jpg',
width: 1920,
height: 1080,
})
);
}

Type

addImage(url: string, options?: ImageOptions): SmartMessage

interface ImageOptions {
filename?: string; // Tên file khi download
width?: number; // Chiều rộng (pixels)
height?: number; // Chiều cao (pixels)
}

Nhiều ảnh

@Command('gallery')
async onGallery(@AutoContext() [managedMessage]: Nezon.AutoContext) {
await managedMessage.reply(
SmartMessage.text('Image gallery')
.addImage('https://example.com/image1.jpg', { filename: 'img1.jpg' })
.addImage('https://example.com/image2.jpg', { filename: 'img2.jpg' })
.addImage('https://example.com/image3.jpg', { filename: 'img3.jpg' })
);
}

File Attachments

Thêm file bất kỳ (PDF, ZIP, DOC, etc.) vào message với addFile().

Cú pháp

addFile(
url: string,
filename: string,
filetype: string,
options?: {
size?: number;
}
): SmartMessage

Ví dụ

import { Command, AutoContext, SmartMessage } from '@n0xgg04/nezon';
import type { Nezon } from '@n0xgg04/nezon';

@Command('file')
async onFile(@AutoContext() [managedMessage]: Nezon.AutoContext) {
await managedMessage.reply(
SmartMessage.text('Download this file:')
.addFile(
'https://example.com/document.pdf',
'document.pdf',
'application/pdf',
{ size: 1024000 } // 1MB
)
);
}

Type

addFile(
url: string,
filename: string,
filetype: string,
options?: FileOptions
): SmartMessage

interface FileOptions {
size?: number; // Kích thước file (bytes)
}

Ví dụ với ZIP file

@Command('download')
async onDownload(@AutoContext() [managedMessage]: Nezon.AutoContext) {
await managedMessage.reply(
SmartMessage.text('Archive file:')
.addFile(
'https://example.com/archive.zip',
'archive.zip',
'application/x-zip-compressed',
{ size: 5242880 } // 5MB
)
);
}

Audio/Voice Attachments

Sử dụng SmartMessage.voice() để gửi audio message.

Cú pháp

SmartMessage.voice(
url: string,
options?: {
transcript?: string;
}
): SmartMessage

Ví dụ

import { Command, AutoContext, SmartMessage } from '@n0xgg04/nezon';
import type { Nezon } from '@n0xgg04/nezon';

@Command('voice')
async onVoice(@AutoContext() [managedMessage]: Nezon.AutoContext) {
await managedMessage.reply(
SmartMessage.voice('https://example.com/audio.mp3', {
transcript: 'This is a voice message transcript',
})
);
}

Type

static voice(url: string, options?: VoiceOptions): SmartMessage

interface VoiceOptions {
transcript?: string; // Transcript của audio
}

Kết hợp nhiều loại attachments

@Command('mixed')
async onMixed(@AutoContext() [managedMessage]: Nezon.AutoContext) {
await managedMessage.reply(
SmartMessage.text('Mixed content:')
.addImage('https://example.com/image.jpg', { filename: 'img.jpg' })
.addFile('https://example.com/doc.pdf', 'doc.pdf', 'application/pdf')
.addButton(
new ButtonBuilder()
.setLabel('Download All')
.setStyle(ButtonStyle.Primary)
)
);
}

SmartMessage.image() (Static method)

Ngoài addImage(), bạn cũng có thể dùng static method SmartMessage.image():

SmartMessage.image(url: string, options?: {
alt?: string;
filename?: string;
}): SmartMessage

Ví dụ

@Command('photo')
async onPhoto(@AutoContext() [managedMessage]: Nezon.AutoContext) {
await managedMessage.reply(
SmartMessage.image('https://example.com/photo.jpg', {
alt: 'A beautiful photo',
filename: 'photo.jpg',
})
);
}

So sánh các phương thức

MethodUse CaseReturns
SmartMessage.image()Tạo message chỉ có ảnhSmartMessage
.addImage()Thêm ảnh vào message hiện cóSmartMessage (chainable)
SmartMessage.voice()Tạo message chỉ có audioSmartMessage
.addFile()Thêm file vào message hiện cóSmartMessage (chainable)

Best Practices

  1. Luôn cung cấp filename cho attachments

    .addImage(url, { filename: 'image.jpg' })
  2. Sử dụng size cho file lớn

    .addFile(url, 'file.zip', 'application/zip', { size: 10485760 })
  3. Kết hợp với text để mô tả

    SmartMessage.text('Download this file:')
    .addFile(...)

API Reference

addImage()

addImage(url: string, options?: ImageOptions): SmartMessage

addFile()

addFile(
url: string,
filename: string,
filetype: string,
options?: FileOptions
): SmartMessage

SmartMessage.voice()

static voice(url: string, options?: VoiceOptions): SmartMessage

SmartMessage.image()

static image(url: string, options?: { alt?: string; filename?: string }): SmartMessage

Xem thêm