wachan
Version:
Simpler way to code baileys.
217 lines (184 loc) • 9.74 kB
Markdown
[](README.md) | Bahasa Indonesia
Cara yang lebih simpel untuk meng-kode baileys.
- [Instalasi](
- [Contoh](
- [File Pengaturan](
- [Pengaturan Awal](
- [Penjelasan](
- [Objek Bot](
- [Function Response](
- [Objek Message](
- [Captures](
- [Value Yang Di Return](
- [Opsi Pengiriman Pesan](
- [Custom Programming](
```bash
npm install wachan
```
```js
const bot = require("wachan")
// Menerima pesan teks "Hello", lalu membalas "Hi"
bot.onReceive("Hello", "Hi")
// Gunakan function sebagai respon, argument pertamanya yaitu message
bot.onReceive("Hi", async (message) => {
// Kirim pesan dengan bot.sendMessage(), id chatroom tujuan harus dimasukkan
await bot.sendMessage(message.room, "Hiii")
// Bisa membalas dengan message.reply(), secara otomatis meng-quote ke pesan yang diterima
await message.reply(`Hi, ${message.sender.name}!`)
// Bisa juga cukup dengan me-return string untuk membalas
return `Hi, ${message.sender.name}!`
})
// Menggunakan function sebagai input, argument pertama juga berisi message. Ini bisa dipakai untuk memfilter pesan
bot.onReceive(
(message) => message.sender.name == "Don",
"You again"
)
// Cara kirim gambar
bot.onReceive("kirim gambar", {image: bufferGambar, text: "Caption"})
bot.onReceive("kirim gambar", {image: "url atau path ke gambar"})
bot.onReceive("send image", async (message) => {
const image = buffer // atau url atau path
const text = "Ini captionnya"
// Dengan bot.sendMessage()
await bot.sendMessage(message.room, {image, text})
// Dengan message.reply()
await message.reply({image, text})
// Dan tentunya, dengan cara me-return object
return {image, text}
})
// Menggunakan regex sebagai input
bot.onReceive(/good (morning|afternoon|evening)/i, "to you as well")
// Mengambil bagian dari teks menggunakan regex. Hasilnya akan dimasukkan ke teks output menggantikan pola <<angka/nama>>. Penomoran dimulai dari 0.
bot.onReceive(/nama saya (\w+)/, "Halo, <<0>>!")
bot.onReceive(/Saya tinggal di (?<tempat>\w+)/, "<<tempat>> itu dimana ya?")
// Jika menggunakan function sebagai output, teks yang diambil dengan regex masuk ke argument kedua dari function nya
bot.onReceive(/^translate (.+)/, async (message, captures) => {
const translation = await translate(captures[0])
return translation
})
bot.onReceive(/Aku adalah (?<name>\w+)/, async (message, captures) => {
return `${captures.name} adalah nama yang keren!`
})
// Ketika wachan berhasil tersambung (dijalankan sebelum memproses pesan pending)
bot.onConnected(async () => {
await bot.sendText(targetId, "Wachan sudah tersambung!")
})
// Ketika wachan sudah siap (dijalankan setelah memproses pesan pending)
bot.onReady(async () => {
await bot.sendText(targetId, "Selesai membaca semua pesan yg belum dibaca!")
})
// Jalankan bot
bot.start()
```
Saat pertama bot dijalankan, file pengaturan awal akan dibuat jika tidak ada.
```json
{
"receiveOfflineMessages": true,
"defaultBotName": "Wachan"
}
```
Pengaturan ini bisa diubah ketika bot berjalan dengan cara mengakses `bot.settings`. Untuk menyimpan perubahan supaya tetap berlaku ketika bot dijalankan berikutnya, gunakan `bot.settings.save()`.
- `receiveOfflineMessages`: Jika `true`, maka akan memproses pesan offline (pesan yang masuk ketika bot sedang off). Pesan yang dimaksud adalah yang dituliskan pada `bot.onReceive`.
- `defaultBotName`: Nama ini akan digunakan jika pesan bot sendiri tidak memiliki `message.sender.name`
## Objek Bot
Ini objek-objek yang di-export oleh wachan:<br><br>
`bot`: Objek bot wachan
- `bot.onConnected(callback)` - Menambahkan function yang akan dijalankan ketika wachan berhasil terkoneksi ke whatsapp, <b>sebelum</b> memproses pesan offline.
- `bot.onReady(callback)` - Menambahkan function yang akan dijalankan ketika bot sudah siap. Dijalankan <b>setelah</b> memproses pesan offline.
- `bot.onReceive(input, response)` - Menambahkan receiver (penerima pesan) yang akan merespon ke pesan yg ditentukan oleh input.
- `input`: bisa berupa string, regex, atau function.
- string: akan mencocokkan teks yang persis pada isi pesan
- regex: akan mencocokkan pola teks pada isi pesan
- function, `input(message)`: akan memfilter pesan berdasarkan value yang di-return
- `response`: bisa berupa string, object, atau function.
- string: balas (dan meng-quote) pesan yang diterima dengan teks
- object: balas (dan meng-quote) pesan yang diterima dengan data dari object-nya. Lihat [di sini](#opsi-pengiriman-pesan)
- function: `response(message, captures)`, jalankan fungsi. [Penjelasan](#function-response)
- `bot.sendMessage(targetId, optionsa)` - Kirim pesan
- `targetId` - ID chatroom tujuan
- `options` - bisa berupa string / object
- string: kirim pesan teks ini
- object: lebih banyak opsi pengiriman. Lihat di [sini](#opsi-pengiriman-pesan)
- `bot.start()` - Jalankan bot.
- `bot.settings` - Pengaturan bot. Cek [di sini](#penjelasan-tiap-item-di-pengaturan)
- `bot.settings.receiveOfflineMessages`
- `bot.settings.save()` - Simpan pengaturan. Perlu dilakukan setelah memodifikasi settings di dalam program.
- `bot.getSocket()` - Ambil objek socket baileys.
## Function Response
Kamu bisa gunakan function sebagai respon pesan. Argument pertamanya adalah `message` dan keduanya adalah `captures` (jika ada).
```js
bot.onReceive("test", async function (message, captures) {
// Kode di sini
})
```
`message`: Objek pesan Wachan
- `message.room` - ID dari chatroom
- `message.sender` - Objek pengirim (sender)
- `message.sender.id` - ID pengirim
- `message.sender.isMe` - `true` jika pengirimnya adalah bot sendiri
- `message.sender.name` - Username pengirim
- `message.sender.isAdmin` - `true`/`false` jika si pengirim adalah admin/bukan admin. `null` jika pesan ini pesan pribadi. (bukan di dalam grup)
- `message.text` - Teks atau caption dari pesan
- `message.receivedOnline` - `true` jika pesan ini diterima ketika bot sedang online
- `message.reply(options)` - Balas ke pesan.
- `options` - Bisa berupa string / object
- string: balas dengan teks ini
- object: lebih banyak opsi pengiriman. Lihat di [sini](#opsi-pengiriman-pesan)
- `message.toBaileys()` - Me-return objek message asli dari modul baileys
### Captures
Argument kedua adalah `captures` yaitu objek <b>(bukan array)</b> yang berisi string teks-teks yang diambil (di-capture) dengan regex. Jika tidak ada, maka objek-nya kosong.
Key dari objek nya tergantung pada regex-nya. Jika menggunakan capturing biasa dengan tanda kurung, maka hasilnya tersimpan pada key berupa angka (mulai dari 0). Jika menggunakan <i>named capture</i>, maka key-nya berupa string.
Regex Input|Teks yg diterima|Objek `captures`
-|-|-
`/Nama saya (\S+)\. Saya tinggal di (\S+)\./` | `"Nama saya Wachan. Saya tinggal di NPM.` | `{"0":"Wachan", "1":"NPM"}`
`/Nama saya (?<nama>\S+)\. Saya tinggal di (?<lokasi>\S+)\./` | `"Nama saya Wachan. Saya tinggal di NPM.` | `{"nama":"Wachan", "lokasi":"NPM"}`
<hr>
`captures.toArray()` bisa digunakan untuk mengubah objek `captures` ke array (agar bisa melakukan operasi array)
### Value Yang Di-Return
Di dalam function response, kamu bisa me-return string/object:
- string: Membalas pesan yg diterima dengan teks ini.<br>Contoh:
```js
bot.onReceive("test", async () => {
const a = "bro"
return `Hello, ${a}!`
})
bot.onReceive("test", async (msg) => `Hello, ${msg.sender.name}!`)
```
- object: Bisa ditambahkan opsi lain.<br>Contoh:
```js
bot.onReceive("test", async () => {
return {text: "Text"}
})
```
Kesimpulannya, ada 4 cara mengirim pesan:
1. Menggunakan `bot.sendMessage(targetId, options)`
2. Menggunakan object di parameter kedua function `bot.onReceive(input, response)`, yaitu `response`.
3. Menggunakan `message.reply(options)`
4. Me-return object di dalam function response
Jika object-nya adalah string, maka pesan akan dikirim dalam bentuk teks. Tetapi jika berupa object dengan property-property di dalamnya, maka struktur object yang di-support adalah seperti berikut:
- `options` - Opsi pengiriman pesan
- `options.text` - Text/caption yang akan dikirim
- `options.quoted` - Pesan yang akan di-quote. Secara otomatis di-set ke pesan yang diterima (jika menggunakan cara 2, 3, 4). Bisa diganti maupun di-set ke `null`.
- `options.image` - Gambar yang akan dikirim. Bisa berupa buffer, url, maupun path.
<b>Catatan:</b> Karena `bot.sendMessage()` dan `message.reply()` normalnya me-return sebuah object message yang berisi property `text`, jadi me-return hasil dari function-function tersebut bisa membuat bot mengirim pesan 2 kali:
```js
bot.onReceive("test", async (msg) => {
// ini akan mengirim 2 pesan
// 1. dari efek msg.reply()
// 2. dari hasil me-return message yg dibuat dari msg.reply()
return await msg.reply("ok")
})
```
Kamu bisa akses item-item ini untuk memprogram fungsi tambahan sendiri.
1. Objek socket milik baileys: `bot.getSocket()`
2. Objek pesan milik baileys: `message.toBaileys()`