Konsep

Dasar pondasi atau flow lumpia

Lumpia dibangun atas 3 segment saat prosesi. Karena GAS tidak support async, maka ketiganya dipilih secara berurutan.

Misalkan middleware diletakkan pada codingan paling bawah, tetep dijalankan dibagian paling atas (didahulukan).

Bagan

graph TD;
    lumpia("🍥 Lumpia") --- helper("🧱 helper"):::green;
    lumpia --- markup("🛠 markup"):::green;
    lumpia --- fetch("🕸 fetch");
    lumpia --- db[("👥 user db")];
    lumpia --- init;
    init --> bot((bot));
    bot(("🤖 bot")) -.-> debug([debug]);
    tg("✈️ telegram client") ---> |shorthand|bot
    user(["👤 user"]) --> |text, photo, cb inline, etc..|update[/update/]
    update --> |doPost|bot
    lumpia -.- tg
    subgraph .
        bot --> |ctx|middleware;
        middleware --> ctx{{context}}
        ctx --> broadcast;
        ctx --> trigger;
    end
    broadcast --> ends(["👤 user"])
    trigger --> ends
    
    style lumpia color:blue,fill:#bdd5ef
    style fetch fill:#efd9bd;
    style init fill:#e1efbd
    style ctx fill:#ecedea,color:grey
    style ends color:white,fill:#000;
    style user color:white,fill:#000;
    classDef green fill:#9de0b2
    click broadcast "/docs/lumpia/konsep/#2-broadcast"
    click ctx "/docs/lumpia/ctx"

1. Middleware

Cakupan: use, middleware

Middleware ini bisa mengentikan proses. Misalnya:

bot.use(ctx => console.log('stop') );

Maka, proses akan terhenti tidak dilanjutkan pada event berikutnya.

2. Broadcast

Cakupan: on

Cek bagian update type

3. Trigger

Cakupan: cmd, command, hear, hears, action


Karakteristik

Broadcast dan triger berjalan bersamaan (didahulukan brodcast) ketika middleware sudah selesai diproses dan menghasilkan context

Keduanya tidak saling menghentikan.

Contoh:

bot.on('text' , ctx => ctx.reply('masuk 1'));
bot.cmd('start', ctx => ctx.reply('masuk 2'));

Pesan user yang berupa text dan trigger /start akan dieksekusi (ditangkap keduanya), yang didahulukan adalah jenis broadcast (bot.on), meskipun seandainya codingan diatas dibalik, diletakkan dibawahnya trigger (bot.cmd).

Bisa dianggap sebagai fitur, tapi juga bisa dianggap sebagai bugs juga.

Pandai-pandailah memanfaatkan setuasi-nya.