Konsep
2 menit dibaca
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.