Node Telegram Sockets
Node Telegram Sockets adalah modifikasi kustom dari library node-telegram-bot-api yang populer, dirancang untuk menyediakan interaksi bot Telegram yang lebih intuitif dengan penanganan event bergaya 'socket'. Library ini mempertahankan fungsionalitas inti dari node-telegram-bot-api sambil memperkenalkan alias yang memudahkan pengembang yang terbiasa dengan paradigma event-driven atau socket.
Fitur Utama
- Kompatibilitas Penuh: Membangun di atas
node-telegram-bot-api, memastikan kompatibilitas dengan semua fitur dan metode API Telegram Bot.
- Event Handling Bergaya Socket: Memperkenalkan alias
connect dan send untuk metode on dan emit EventEmitter, membuat penanganan event lebih familiar bagi pengembang socket.
- Rebranding: Nama dan namespace internal telah diperbarui menjadi
node-telegram-sockets untuk mencerminkan fokus baru.
- Fleksibel: Mendukung polling dan webhook untuk menerima pembaruan dari Telegram.
Instalasi
Untuk menginstal Node Telegram Sockets, Anda dapat menggunakan npm:
npm install node-telegram-sockets
Penggunaan
Berikut adalah contoh dasar bagaimana menggunakan Node Telegram Sockets:
const TelegramSockets = require("node-telegram-sockets");
const token = "YOUR_TELEGRAM_BOT_TOKEN";
const bot = new TelegramSockets(token, { polling: true });
bot.connect("message", (msg) => {
const chatId = msg.chat.id;
bot.sendMessage(chatId, "Halo dari Node Telegram Sockets!");
});
bot.connect("custom_event", (data) => {
console.log("Menerima event kustom:", data);
});
bot.send("custom_event", { user: "John Doe", action: "test" });
bot.connect("socket:message", ({ data, metadata }) => {
console.log("Menerima pesan melalui socket-like event:", data.text);
});
bot.onText(/\/start/, (msg) => {
bot.sendMessage(msg.chat.id, "Selamat datang!\nKetik /echo [pesan Anda] untuk mengulang pesan.");
});
bot.onText(/\/echo (.+)/, (msg, match) => {
const chatId = msg.chat.id;
const resp = match[1];
bot.sendMessage(chatId, resp);
});
bot.on("polling_error", (error) => {
console.error("Polling error:", error);
});
Perubahan dari node-telegram-bot-api
- Kelas utama telah diganti namanya dari
TelegramBot menjadi TelegramSockets.
- Namespace debug telah diperbarui dari
node-telegram-bot-api menjadi node-telegram-sockets.
- Alias
connect(event, listener) ditambahkan sebagai pengganti on(event, listener).
- Alias
send(event, ...args) ditambahkan sebagai pengganti emit(event, ...args).
- Event baru
socket:message ditambahkan, yang memancarkan objek { data, metadata } untuk setiap pesan yang diterima, memungkinkan penanganan event yang lebih terstruktur.
- Sistem Middleware: Mendukung penggunaan middleware via
.use((msg, next) => { ... }).
- Manajemen Sesi: Akses sesi pengguna langsung melalui
msg.session.
- Auto-Retry Rate Limit: Menangani error 429 (Too Many Requests) secara otomatis jika opsi
rateLimit: true diaktifkan.
- Media Helper: Mengirim album foto dengan mudah menggunakan
.sendAlbum(chatId, [path1, path2]).
- Smart Broadcast System: Mengirim pesan massal dengan antrean otomatis dan laporan status.
- Fluent Keyboard Builder: Membuat tombol dengan gaya, emoji kustom, dan alur kerja yang lancar.
Fitur Lanjutan
1. Middleware
Anda dapat menambahkan fungsi yang akan dijalankan sebelum event handler utama:
bot.use((msg, next) => {
console.log(`Pesan dari ${msg.from.username}: ${msg.text}`);
next();
});
2. Session Management
Setiap pesan secara otomatis memiliki objek sesi yang persisten di memori:
bot.connect("message", (msg) => {
if (!msg.session.counter) msg.session.counter = 0;
msg.session.counter++;
bot.sendMessage(msg.chat.id, `Anda telah mengirim ${msg.session.counter} pesan.`);
});
3. Auto-Retry Rate Limit
Aktifkan penanganan batas permintaan Telegram secara otomatis:
const bot = new TelegramSockets(token, {
polling: true,
rateLimit: true
});
4. Send Album Helper
Kirim beberapa foto sekaligus dengan satu baris kode:
bot.sendAlbum(chatId, [
'./assets/photo1.jpg',
'./assets/photo2.png'
]);
5. Smart Broadcast System
Kirim pesan ke banyak pengguna sekaligus dengan aman:
const userIds = [123456, 789012, 345678];
bot.broadcast(userIds, "Halo semuanya! Ini adalah pesan siaran.")
.then(report => {
console.log(`Total: ${report.total}`);
console.log(`Berhasil: ${report.success}`);
console.log(`Diblokir: ${report.blocked}`);
console.log(`Gagal: ${report.failed}`);
});
6. Fluent Keyboard Builder
Membuat tombol inline dengan gaya dan emoji kustom jadi lebih mudah:
const keyboard = bot.keyboard('inline')
.url("Owner Script", "https://t.me/xrelly", {
style: "danger",
icon_custom_emoji_id: "6213063926200933195"
})
.url("Channel Owner", "https://t.me/jspacker", {
style: "success",
icon_custom_emoji_id: "5328034993727889277"
})
.row()
.callback("Bantuan", "help_data", { style: "primary" })
.build();
bot.sendMessage(chatId, "Pilih menu:", { reply_markup: keyboard });
7. Penggunaan rich_message pada library
Membuat menu pada bot kalian menjadi lebih bagus dan bergaya.
Mendengarkan event rich_message :
bot.on('rich_message', (msg) => {
console.log('Get rich_message:', msg.rich_message);
});
Cara kirim rich_message
const richMessage = {
blocks: [
{
type: "heading",
text: "Hello world!!!",
size: 1
}
]
}
bot.sendRichMessage(chatId, richMessage);
Kontribusi
Kami menyambut kontribusi! Jika Anda memiliki ide untuk fitur baru, perbaikan bug, atau peningkatan, silakan buka isu atau kirim pull request di repositori GitHub.
Lisensi
Library ini dilisensikan di bawah Lisensi MIT. Lihat file LICENSE.md untuk detail lebih lanjut.