0% menganggap dokumen ini bermanfaat (0 suara)
4 tayangan65 halaman

Bot in Bash Console & Modular

Diskusi dalam grup Telegram Bash.ID membahas pemrograman BASH dan pembuatan bot Telegram. Anggota grup berbagi pengalaman dan memberikan instruksi tentang penggunaan skrip BASH serta alat seperti curl dan jq. Kulgram malam ini bertujuan untuk memperkenalkan pembuatan bot dengan menggunakan @BotFather di Telegram.

Diunggah oleh

semejasdigokil1999
Hak Cipta
© All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
4 tayangan65 halaman

Bot in Bash Console & Modular

Diskusi dalam grup Telegram Bash.ID membahas pemrograman BASH dan pembuatan bot Telegram. Anggota grup berbagi pengalaman dan memberikan instruksi tentang penggunaan skrip BASH serta alat seperti curl dan jq. Kulgram malam ini bertujuan untuk memperkenalkan pembuatan bot dengan menggunakan @BotFather di Telegram.

Diunggah oleh

semejasdigokil1999
Hak Cipta
© All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd

1/29/2018 Telegram Web

[Link] 745 members

Epsi ‫ رزﻗﻲ‬Sayidina
Selamat malam teman-tema semua, kita berjumpa lagi malam ini, dengan tema pemrograman BASH secara…

Saturday, January 27, 2018

Epsi ‫ رزﻗﻲ‬Sayidina 4:26:14 PM

Sugandi Slamet
Belum pernah pak saya
Biasanya pakai apa um ?

PHP, Django atau Kotlin ?

Hendro Wicaksono joined the group

Epsi ‫ رزﻗﻲ‬Sayidina 4:52:41 PM

Epsi ‫ رزﻗﻲ‬Sayidina
Photo

Ini bisa dicoba kalau belum pernah bikin script.

[Link]

#!/usr/bin/env
ls -l ~

Lalu jadikan executable

$ chmod +x [Link]

Lalu jalankan di terminal.

$ ./[Link]

Semoga tidak ada typo.

Maaf baru jawab, aku tadi numpang motor. Baru sempat ketik2
sekarang.

Delvia Silitonga joined the group

Dudi Gurnadi K joined the group

Epsi ‫ رزﻗﻲ‬Sayidina 5:44:58 PM

Kulgram malam ini juga akan banyak menggunakan curl .

Ini dapat dicoba juga.

$ curl [Link]
ycode/master/[Link]

Silahkan lihat hasilnya.

Sugandi Slamet 6:06:54 PM

Epsi ‫ رزﻗﻲ‬Sayidina
Biasanya pakai apa um ? PHP, Django atau Kotlin ?
Pake php aja

Epsi ‫ رزﻗﻲ‬Sayidina 6:07:09 PM


Biasanya pakai apa um ? PHP, Django atau Kotlin ?
Sama python kdang2

[Link] 1/65
1/29/2018 Telegram Web

Dikky R joined the group

Epsi ‫ رزﻗﻲ‬Sayidina 6:33:07 PM

Sugandi Slamet
Sama python kdang2
Berarti sudah biasa pakai sha-bang ya .

Sepertinya di sini sudah paham semua. Jadi akan lebih mudah.

Ada yang belum tahu ?

Mumpung belun masuk jam kulgram.

Trims

Dalam kulgram nanti juga akan ada proses parsing JSON. 6:34:51 PM

Jadi mohon pastikan json_reformat dan jq (json query), sudah


ada di linux masing2.

Kalau belum ada di-install dahulu.

Isla joined the group

Kerad juga kamu ya joined the group

Prada 6:57:47 PM
PR
Sap bang

Epsi ‫ رزﻗﻲ‬Sayidina 7:21:44 PM

Prada
Sap bang
Woke woke

Wanda Agustiansyah R joined the group

Fau Ozhan joined the group

Bones ( P.A.D ) 7:42:15 PM

Yuga
Kulgram itu ga selalu orang yang lebih pinter om, meskipun b…
sangat2 setuju

Epsi ‫ رزﻗﻲ‬Sayidina 7:44:03 PM

Bones ( P.A.D )
sangat2 setuju
Ada yang pandai di bidang X.
Ada yang pandai di bidang Y.

Pada dasarnya sama-sama membutuhkan.

Ayat Maulana joined the group

maland admin 7:56:14 PM

bentar lagi mulaaii

7:58:02 PM

GIF

Epsi ‫ رزﻗﻲ‬Sayidina 7:59:36 PM

Selamat malam semua.

Malam minggu ceria ini kita berkumpul bersama untuk membahas


topik yang berkaitan dengan bash shell.

[Link] 2/65
1/29/2018 Telegram Web
Sugandi Slamet 7:59:47 PM

Epsi ‫ رزﻗﻲ‬Sayidina
Berarti sudah biasa pakai sha-bang ya . Sepertinya di sini sud…
Sha-bang

Helmy Agta 8:00:03 PM

hadir bang

Abdul Djalil Djayali edited 8:01:02 PM

hadir mas

Epsi ‫ رزﻗﻲ‬Sayidina 8:01:02 PM

Saya berusaha mencari-cari topik yang yang dapat dijadikan


project bash script.

Yang cukup kecil, dan ternyata salah satu topik yang tepat adalah
telegram bot.

Terimakasih banyak atas kehadiran teman2 yang merelakan 8:01:44 PM


waktu luang malam minggunya untuk hadir di chat group ini.

Kang Anton joined the group

Epsi ‫ رزﻗﻲ‬Sayidina 8:03:05 PM

Sebagai awal. Tentunya semua sudah mengenal telegram bot


ya....

Dan mungkin beberapa sudah pernah modus ke mbak Miranda


Salma @BGLIBot.

Sugandi Slamet 8:03:23 PM

Sha-bang itu apa ya?

Epsi ‫ رزﻗﻲ‬Sayidina 8:03:51 PM

Salah satu contoh bot.

R3creator joined the group

Epsi ‫ رزﻗﻲ‬Sayidina 8:04:28 PM

Sugandi Slamet
Sha-bang itu apa ya?
Duh mas baru tanya sekarang

Kang Anton 8:05:03 PM

Izin gabung mas @RizqiSayidina

Epsi ‫ رزﻗﻲ‬Sayidina 8:06:22 PM

Karena kulgram ini bertemakan bot, maka saya meminta pada


rekan-rekan semua untuk membikin bot dengan subscribe ke
@BotFather.

Apakah dapat dilakukan ?

[Link] 3/65
1/29/2018 Telegram Web
8:06:56 PM

Begini penampakan @botfather. Klik saja tombol start.

Saya menunggu respons tanggapan, sebelum melanjutkan. 8:07:55 PM

Apakah bisa dilakukan ?

Atas tanggapannya paman ucapkan terimakasih.

Kang Anton 8:08:41 PM

This?

8:08:53 PM

Epsi ‫ رزﻗﻲ‬Sayidina 8:09:10 PM

Kang Anton
This?
Ya betuulll.. Lanjut ya...

Kemudian ketik /newbot (tg://bot_command?command=newbot) 8:09:58 PM


dan beri nama bot sesuai selera masing-masing.

8:10:13 PM

/newbot

Apakah bisa dilanjut ? 8:10:22 PM

Bones ( P.A.D ) 8:10:52 PM

Lanjut om

Kang Anton 8:10:56 PM

This

#jombloGalau (tg://search_hashtag?hashtag=jombloGalau) 8:11:02 PM

[Link] 4/65
1/29/2018 Telegram Web
Epsi ‫ رزﻗﻲ‬Sayidina 8:11:14 PM

Nanti akan diberi token oleh @botfather, simpan token baik-baik.


dicopas saja ke text editor lalu simpan dan jangan diperlihatkan
ke orang lain.

maland pinned « Selamat malam sem… »

Kang Anton 8:11:57 PM

Epsi ‫ رزﻗﻲ‬Sayidina 8:12:09 PM

Kang Anton
#jombloGalau
Ya kang. Paman paham ini malam minggu.

Nanti modusin Miranda Salma aja yaks kalau masih galau.

Kang Anton 8:12:29 PM

Tp ini gak bsa bikin username om

Epsi ‫ رزﻗﻲ‬Sayidina 8:12:31 PM

Kang Anton
Photo

Beri nama bot berakhiran bot

8:13:08 PM

Mengapa ? 8:13:14 PM

Kang Anton 8:13:28 PM

Epsi ‫ رزﻗﻲ‬Sayidina 8:13:33 PM

Yang lain ada yang berhasilkah ?

Kang Anton 8:13:47 PM

Wait, i will try again

[Link] 5/65
1/29/2018 Telegram Web
Bones ( P.A.D ) 8:13:59 PM

Epsi ‫ رزﻗﻲ‬Sayidina 8:14:09 PM

Kang Anton
Photo

Ooh biasa ituuu... cari nama yang lain sampai dapat.

Mungkin sudah ada yang punya.

Bones ( P.A.D ) 8:14:18 PM

Photo

Nah keren

Sudah ada profile picture pula. 8:14:33 PM

8:14:58 PM

Ganti avatar

Bones ( P.A.D ) 8:15:09 PM

loncat step

Sugandi Slamet 8:15:20 PM

Epsi ‫ رزﻗﻲ‬Sayidina
Duh mas baru tanya sekarang
O h maaf ya udh lanjut

Epsi ‫ رزﻗﻲ‬Sayidina 8:15:45 PM

ganti keterangan

Sugandi Slamet

[Link] 6/65
1/29/2018 Telegram Web
Epsi ‫ رزﻗﻲ‬Sayidina 8:15:50 PM
Saya menunggu respons tanggapan, sebelum melanjutkan. A…
Ok sudah

Asem Bused 8:15:54 PM

nyimak sambil makan.

Kang Anton 8:16:06 PM

Trus apa nh om @RizqiSayidina

Epsi ‫ رزﻗﻲ‬Sayidina 8:16:12 PM

Jangan lupa copas baik2 token yang diberikan.

Kang Anton 8:16:14 PM

Udh bisa euy

8:16:42 PM

Epsi ‫ رزﻗﻲ‬Sayidina 8:16:49 PM

Kang Anton
Udh bisa euy
Syukur.

Sekarang buka terminal bash nya

Bones ( P.A.D ) 8:16:59 PM

Kang Anton
Photo

Jiah

Kang Anton 8:17:33 PM

Bones ( P.A.D )
Jiah
Maklum ya, sya msh awam

Jufi 8:17:38 PM

Kang Anton 8:17:42 PM

Epsi ‫ رزﻗﻲ‬Sayidina
Syukur. Sekarang buka terminal bash nya
Terminal nya dmna om?

Jufi 8:17:43 PM

saya kok dapat beignian ya ?

Epsi ‫ رزﻗﻲ‬Sayidina 8:18:17 PM

Malam ini kita bermain di console (terminal) dahulu.

Besok kita bermain script.

[Link] 7/65
1/29/2018 Telegram Web
Bones ( P.A.D ) 8:18:39 PM

Kang Anton
Maklum ya, sya msh awam
Bukan itu token jangan di bagi2 loe keep sendiri

Kang Anton 8:18:47 PM

Wkwk

Maap2 8:18:51 PM

Namanya jg bljr 8:18:54 PM

Epsi ‫ رزﻗﻲ‬Sayidina 8:19:25 PM


Malam ini kita bermain di console (terminal) dahulu. Besok kit…
Buka terminal apa nih om?

Linux? 8:19:28 PM

Janexmgd 8:19:41 PM

Hmm lanjut om :)

Asem Bused 8:19:52 PM

Kang Anton
Linux?
iya pak

Epsi ‫ رزﻗﻲ‬Sayidina 8:20:13 PM

Kang Anton
Linux?
Iya terminal apa saja yang ada bash nya.

Enaknya linux. Freebsd juga boleh.

Jufi 8:20:35 PM
saya kok dapat beignian ya ?
Di smartphone bisakah ?

Helmy Agta 8:20:43 PM

iya om lanjut

kurang tau kalau smartphone 8:20:57 PM

Kang Anton 8:21:56 PM

Wait sya buka laptop dlu

Jufi 8:21:56 PM

Epsi ‫ رزﻗﻲ‬Sayidina
Di smartphone bisakah ?
oh bisa om

kayaknya error kalau di telegram web 8:22:05 PM

Bones ( P.A.D ) 8:22:14 PM

Epsi ‫ رزﻗﻲ‬Sayidina
Di smartphone bisakah ?

Epsi ‫ رزﻗﻲ‬Sayidina 8:22:21 PM

Di bash atau zsh.


Kita masukkan toen sebagai variable.

[Link] 8/65
1/29/2018 Telegram Web
misalnya

token='your_token_here'

nantinya boleh di 8:22:59 PM

echo $token

Namun jangan beri screenshot token yang rahasia itu kemari.

si_kabayan 8:23:15 PM

Kang Anton
Photo

@para_bot itu bot ane zaman baheula


Pake bash juga, kayaknya bener-bener make bash, ga make
perkakas bantu macam jq
Tapi entahlah, dah lama...

Epsi ‫ رزﻗﻲ‬Sayidina 8:23:35 PM

Apakah dapat dilakukan ?

Jufi 8:23:37 PM

Epsi ‫ رزﻗﻲ‬Sayidina
Di bash atau zsh. Kita masukkan toen sebagai variable. misaln…
cara masuk ke mode bash gimana ya ? apakah cukup dengan
hanya membuka terminal linux ?

Epsi ‫ رزﻗﻲ‬Sayidina 8:25:18 PM

si_kabayan
@para_bot itu bot ane zaman baheula Pake bash juga, kayak…
Ampun mastah.
Ini karena di group bash.

Kalau di group lain, tentunya pakai yang lebih sederhana.

Seperti aku bilang sebelumnya, bot ini hanya case saja untuk
membikin script bash.

Di kulgram lain, aku akan ambil case yang lain. Namun tentunya
bertemakan bash juga.

Bukan PHP, Ruby atau Haskell.

Jufi 8:25:41 PM
cara masuk ke mode bash gimana ya ? apakah cukup dengan …
Terminal linux umumnya bash.

dhang gara 8:26:03 PM

DaunMintUser
Linus pake gentoo?
itu gambar Stallman, linus pakai fedora

Epsi ‫ رزﻗﻲ‬Sayidina 8:26:55 PM

Jufi
cara masuk ke mode bash gimana ya ? apakah cukup dengan …
coba di terminal

$ echo $0

Jufi 8:27:36 PM

kok not found ya om ? ane pakai linux min 18 8:27:48 PM

[Link] 9/65
1/29/2018 Telegram Web
Kang Anton 8:28:01 PM

Terus om/

Abdul Djalil Djayali 8:28:04 PM

tokennya kelihatan

DaunMintUser 8:28:17 PM

dhang gara
itu gambar Stallman, linus pakai fedora
Klo stallman?gentoo?

Fahmi Nurcahya 8:28:33 PM

Apa bisa di termux?

Epsi ‫ رزﻗﻲ‬Sayidina 8:28:48 PM

Jufi
Photo

Jangan pakai spasi

bash ini memang tidak secanggih bahasa pemrograman.

Sifatnya hanya sehell penghubung OS ke manusia. Jadi syntaxnya


juga sederhana.

Bill 8:28:56 PM

Fahmi Nurcahya
Apa bisa di termux?
Termux jalan kok om, ini ane lagi pake juga

Epsi ‫ رزﻗﻲ‬Sayidina 8:29:24 PM

Check jenis shell

Fahmi Nurcahya 8:29:26 PM

Sip om

Jufi 8:29:30 PM

ooh ole om , thanks

Epsi ‫ رزﻗﻲ‬Sayidina 8:29:48 PM

Jufi
ooh ole om , thanks
Hehe... bisakah ?

Jufi 8:30:00 PM

Epsi ‫ رزﻗﻲ‬Sayidina
Hehe... bisakah ?
siip sudah bisa

Epsi ‫ رزﻗﻲ‬Sayidina 8:30:13 PM

Lanjut ya..

Helmy Agta 8:30:26 PM

lanjut

Kang Anton 8:30:55 PM

Epsi ‫ رزﻗﻲ‬Sayidina
Lanjut ya..
Belom om

Ini ngetik apa lg om 8:31:03 PM

Epsi ‫ رزﻗﻲ‬Sayidina 8:32:31 PM

Kita bisa saja berulangkali menggunakan token bot tersebut. Jadi


alih-alih bolak balik menulis variable di bash, lebih baik token
ditaruh di config.

[Link] 10/65
1/29/2018 Telegram Web

Kebetulan punyaku namanya cupu bot maka ditaruh di

~/.config/cupubot/[Link]

Kang Anton 8:32:47 PM


Ini ngetik apa lg om
Sudah buka terminal bash nya ?

Kang Anton 8:32:51 PM

Udh

Epsi ‫ رزﻗﻲ‬Sayidina 8:33:19 PM

Kira-kira seperti ini

% mkdir ~/.config/cupubot
% touch ~/.config/cupubot/[Link]
% echo "token='your_token_here'" > ~/.config/cupubo
t/[Link]
% source ~/.config/cupubot/[Link]
% echo $token

8:33:47 PM

Penampakan

ini Kang 8:34:33 PM

Dhitya Pamungkas joined the group

Epsi ‫ رزﻗﻲ‬Sayidina 8:35:20 PM

Epsi ‫ رزﻗﻲ‬Sayidina
Di bash atau zsh. Kita masukkan toen sebagai variable. misaln…
Ini @kangAnton

Ada yang jelas mengenai penggunaan config ini ? 8:36:35 PM

confignya sendiri adalah bash file jadi dapat dipanggil dengan:

% source ~/.config/cupubot/[Link]

Ada yang jelas ? 8:36:51 PM

Apakah bisa dilanjut ?

Asem Bused 8:37:34 PM

bisa *pendapat pribadi

Abdul Djalil Djayali 8:37:53 PM

bisa mas

Jufi 8:38:04 PM

jadi harus pakai script % source ~/.config/cupubot/[Link]


([Link] baru bisa jalan echo $token ya om ?

Epsi ‫ رزﻗﻲ‬Sayidina 8:38:07 PM

Thx

Kang Anton 8:38:26 PM

Jufi

[Link] 11/65
1/29/2018 Telegram Web
bearti jika buka terminal baru enggak bisa echo $token kah ? 8:38:27 PM

Babang 8:39:08 PM

sudah

Epsi ‫ رزﻗﻲ‬Sayidina 8:39:44 PM

Jufi
jadi harus pakai script % source ~/.config/cupubot/[Link] …
Ini sekedar tempat variable saja.
Jadi kalau tidak sengaja sesi terminalnya ditutup.

Maka catatan token nya tidak hilang.

Dan tidak perlu bolak balik mengetik token='...

Dan juga, token tidak tercatat di history bash.

Jufi 8:40:09 PM
bearti jika buka terminal baru enggak bisa echo $token kah ?
Bisa, aku menghindari bolak-balik mengetik saja.

Kang Anton 8:41:13 PM

Photo

Ya... @kangAnton pintaaar.

Jangan lupa di [Link] ([Link] ditulis kode token yang


sebenarnya.

Token aslinya 43 digit. 8:41:54 PM

Telegram API ada di sini 8:42:20 PM


* [Link]
([Link]
[Link]
Telegram Bot API ([Link]
The Bot API is an HTTP-based interface created for developers
keen on building bots for Telegram.
To learn how to create…

Bisa dibaca nanti. 8:43:25 PM

Yang kita perlu tahu, untuk menggunakan telegram API adalah


menggunaka URLn , format URL-nya begini:

[Link]

Jufi 8:44:16 PM

oke om , ane paham

Epsi ‫ رزﻗﻲ‬Sayidina 8:44:42 PM

Sekarang kita bikin variable URL-nya di console.

% tele_url="[Link]

Kalau perlu

% echo $tele_url

Apakah bisa kawan-kawan2 ?

Aku tunggu yaaa 🤓 8:45:35 PM

Kang Anton 8:45:48 PM

Epsi ‫ رزﻗﻲ‬Sayidina
Ya... @kangAnton pintaaar. Jangan lupa di [Link] ditulis ko…
wait

Babang

[Link] 12/65
1/29/2018 Telegram Web
Epsi ‫ رزﻗﻲ‬Sayidina 8:46:03 PM
Bisa dibaca nanti. Yang kita perlu tahu, untuk menggunakan t…
methode_ name ny apa apa

Fau Ozhan 8:46:15 PM

Helmy Agta
kurang tau kalau smartphone
Kalau di smartphone bisa pakai termux

Jufi 8:46:48 PM

Epsi ‫ رزﻗﻲ‬Sayidina
Sekarang kita bikin variable URL-nya di console. % tele_url="…
bisa om

Zifor Syahid 8:46:50 PM

ane nyimak

Epsi ‫ رزﻗﻲ‬Sayidina 8:47:03 PM

Babang
methode_ name ny apa apa
Berhubung sudah ada tanya, bisa dicoba method getMe .

% curl -s "${tele_url}/getMe"
{"ok":true,"result":{"id":547870369,"is_bot":true,"f
irst_name":"epsi_bot","username":"epsi_bot"}}

Kang Anton 8:47:08 PM

wai wait

saya bngung 8:47:11 PM

Epsi ‫ رزﻗﻲ‬Sayidina 8:47:17 PM

Kang Anton
wai wait
Kutunggu.

Kang Anton 8:47:43 PM

itu [Link] ([Link] di ketik di console terminalnya om

Epsi ‫ رزﻗﻲ‬Sayidina 8:48:48 PM

Kang Anton
itu [Link] di ketik di console terminalnya om
Buka saja pakai text editor.
@kangAnton biasanya pakai apa ?

Abdul Djalil Djayali 8:49:02 PM

sudah mas

Epsi ‫ رزﻗﻲ‬Sayidina 8:49:48 PM

Kang Anton
itu [Link] di ketik di console terminalnya om
Misalnya kalau aku pakai text editor geany .

$ geany ~/.config/cupubot/[Link]

Abdul Djalil Djayali 8:50:01 PM


sudah mas
Sip.

Jufi 8:50:04 PM

dapatnya begitu 8:50:10 PM

Kang Anton 8:50:35 PM

itu saya masukin token yang panjang itu om

[Link] 13/65
1/29/2018 Telegram Web
8:50:40 PM

Abdul Djalil Djayali 8:51:04 PM

Kang Anton
Photo

itu id bot... token lengkapnya belum

Epsi ‫ رزﻗﻲ‬Sayidina 8:51:14 PM

Jufi
Photo

di [Link] ([Link] sudah pakai token panjang ya...

Sebentar...

Kang Anton 8:52:23 PM

Abdul Djalil Djayali


itu id bot... token lengkapnya belum
terus saya pastein aja kode yang panjang itu om

Zifor Syahid 8:52:32 PM

{"ok":true,"result":
{"id":494830934,"is_bot":true,"first_name":"zifor_bot","username
":"ziefbot"}}[

Epsi ‫ رزﻗﻲ‬Sayidina 8:53:00 PM

token panjang

Kang Anton 8:53:27 PM

okkk

udah om 8:54:09 PM

Jh W joined the group

Danny 8:55:04 PM

Pelan2 Om

Epsi ‫ رزﻗﻲ‬Sayidina 8:55:12 PM

Zifor Syahid
{"ok":true,"result":{"id":494830934,"is_bot":true,"first_name"…
Mantaaafzzz....

JSON ini dapat dirapikan dengan json_reformat .


Ini fungsinya buat kita manusia, supaya mudah membacanya.
Kalau script atau mesin mah tidak perlu.

Berikut contohnya:

% curl -s "${tele_url}/getMe" | json_reformat


{
"ok": true,
"result": {
"id": 547870369,
"is_bot": true,
"first_name": "epsi_bot",
"username": "epsi_bot"
}
}

[Link] 14/65
1/29/2018 Telegram Web
Danny 8:55:38 PM
Pelan2 Om
Maaf... ampun mas.

Jufi 8:55:41 PM

Epsi ‫ رزﻗﻲ‬Sayidina
di [Link] sudah pakai token panjang ya... Sebentar...

sudah om 8:55:43 PM

Epsi ‫ رزﻗﻲ‬Sayidina 8:56:31 PM

Jufi
sudah om
Bisa getMe kah mas ?

Jufi 8:57:01 PM

apa karna koneksi ya ? 8:57:07 PM

kebetulan pakai sijago merah 8:57:20 PM

Kang Anton 8:57:47 PM

ini apa lagi om @RizqiSayidina

udah saya ganti token nya jadi yang panjang 8:58:03 PM

Helmy Agta 8:58:18 PM

{
"ok": true,
"result": {
"id": 521545750,
"is_bot": true,
"first_name": "helmyalfatah",
"username": "helmybot"
}
}

Bones ( P.A.D ) 8:59:10 PM

Jufi
Photo

./config (tg://bot_command?command=config).sh <--- bukan ini


manggilnya?

Epsi ‫ رزﻗﻲ‬Sayidina 8:59:15 PM

Jufi
apa karna koneksi ya ?
Kalau di browser bisakah pakai URL tersebut ?

Bones ( P.A.D ) 9:00:02 PM


./[Link] <--- bukan ini manggilnya?
Bukan.

Itu untuk memanggil script.

Yang kita lakukan adalah memasukkan variabel dalam script ke


sesi bash.

Pakai source

Helmy Agta 9:00:22 PM


{ "ok": true, "result": { "id": 521545750, "is_bot": true, "first_…
Nah lancar jaya.

Helmy Agta 9:00:42 PM

haha ok om

[Link] 15/65
1/29/2018 Telegram Web
Zifor Syahid 9:00:49 PM

Danny
Pelan2 Om
ane ringkeskan apa yang perlu dilakukan om..
1. buat bot di botfather, bikin token

misal token saya :


443025953:AAHER4vxdNfbIB0h1QVVy9Pk03i4hu0Y8XM

(ngga papa buat bareng baren :) )

2. trus bikin config

di terminal :
nano ~/.config/botbelajar/[Link] ([Link]

ntar kebuka nano nya tulis :


token='443025953:AAHER4vxdNfbIB0h1QVVy9Pk03i4hu0Y8XM'

3. load config

diterminal:
source ~/.config/botbelajar/[Link] ([Link]

4. bikin url api

diterminal:
tele_url="[Link]
([Link]

5. panggil api

diterminal :
curl -s "${tele_url}/getMe (tg://bot_command?
command=getMe)"

atau
curl -s "${tele_url}/getMe (tg://bot_command?
command=getMe)" | json_reformat

(maaf ringkesan yang nggak ringkes)

Helmy Agta 9:01:30 PM

Zifor Syahid
ane ringkeskan apa yang perlu dilakukan om.. 1. buat bot di b…
gud

si_kabayan edited 9:01:35 PM

Epsi ‫ رزﻗﻲ‬Sayidina
Mantaaafzzz.... JSON ini dapat dirapikan dengan json_re…
Kenapa ga pake jq aja langsung?
% curl -s "${tele_url}/getMe" | jq

Atau bisa ganti curl dengan httpie


% http "${tele_url}/getMe"

Epsi ‫ رزﻗﻲ‬Sayidina 9:01:59 PM

Zifor Syahid
ane ringkeskan apa yang perlu dilakukan om.. 1. buat bot di b…
Bijak. Top Markotop.

Bolehkah pakai token ini, untuk teman2 yang lain untuk


debugging ?

Kang Anton 9:02:04 PM

/getMe (tg://bot_command?command=getMe)

Zifor Syahid 9:02:16 PM

Epsi ‫ رزﻗﻲ‬Sayidina
Bijak. Top Markotop. Bolehkah pakai token ini, untuk teman2 …
monggo om

[Link] 16/65
1/29/2018 Telegram Web
Epsi ‫ رزﻗﻲ‬Sayidina 9:02:44 PM

si_kabayan
Kenapa ga pake jq aja langsung? % curl -s "${tele_url}/getM…
Sabar kang.

Di sini tidak semuanya mastah.


Ada yang cepat.
Ada yang lambat.

Makanya saya beri yang sederhana.

Jufi 9:02:46 PM

Epsi ‫ رزﻗﻲ‬Sayidina
Kalau di browser bisakah pakai URL tersebut ?
oke om sudah , ternyata token ane kurang 1 huruf

Epsi ‫ رزﻗﻲ‬Sayidina 9:02:57 PM

Jufi
oke om sudah , ternyata token ane kurang 1 huruf
Syukur.

Antonio Clay joined the group

Kang Anton 9:04:18 PM

udah gini ngapain lagi om @RizqiSayidina ???

Danny 9:04:19 PM

Zifor Syahid
ane ringkeskan apa yang perlu dilakukan om.. 1. buat bot di b…
Thanks: )

Epsi ‫ رزﻗﻲ‬Sayidina 9:04:28 PM

Adisa Argani joined the group

Kang Anton 9:05:09 PM

Epsi ‫ رزﻗﻲ‬Sayidina 9:07:34 PM

Pelan-pelan ya...
Para suhu mastah harap bersabar.

Terkadang kita perlu simpan variable bash ke file.


Lebih baik begitu daripada bolak-balik melakukan request ke
internet.

Caranya dalah dengan melakukan redirect.

% curl -s "${tele_url}/getMe" > [Link]

Nantinya kita bisa lihat isi file tersebut dengan perintah cat .

[Link] 17/65
1/29/2018 Telegram Web
% cat [Link] | json_reformat
{
"ok": true,
"result": {
"id": 513194798,
"is_bot": true,
"first_name": "Cupu Bot",
"username": "cupu_cupu_bot"
}
}

Kang Anton 9:07:57 PM

Photo

Mantafzzz. sudah berhasil

9:08:38 PM

Sekarang kita berpindah ke API yang lain yaitu getUpdates 9:09:30 PM


(pakai s).

% curl -s "${tele_url}/getUpdates" | json_reformat


{
"ok": true,
"result": [

]
}

Dari sudut pandang JSON ada dua path yaitu 9:10:32 PM

.ok

dan

.result

Di sini fungsinya jq (JSON Query). 9:11:53 PM

Untuk berjalan di path JSON.


Sebagaimana berjalannya DOM di path HTML.
(semoga analoginya tepat)

% curl -s "${tele_url}/getUpdates" | jq -r ".ok"


true

9:12:22 PM

Yuga 9:12:45 PM

Kang Anton
Photo

Good

Epsi ‫ رزﻗﻲ‬Sayidina 9:13:15 PM

Bagaimana ?

[Link] 18/65
1/29/2018 Telegram Web
Masih terlalu cepatkah ?
Atau dapatkah dilanjutkan ?

Aku bersedia menunggu.

Helmy Agta 9:13:36 PM

lanjutkan om

Asem Bused 9:13:44 PM

Epsi ‫ رزﻗﻲ‬Sayidina
Bagaimana ? Masih terlalu cepatkah ? Atau dapatkah dilanjutk…
lanjut pak .

Helmy Agta 9:13:55 PM

curl -s "${tele_url}/getUpdates (tg://bot_command?


command=getUpdates)" | jq -r ".ok"
true

Epsi ‫ رزﻗﻲ‬Sayidina 9:14:48 PM

Sekarang buka bot masing-masing dan tulis sesuatu.

Tulis apa saja boleh.

Lalu lakukan ' getUpdates lagi.

Kalau di tempatku begini. 9:15:49 PM

Setelah menulis hello world .

% curl -s "${tele_url}/getUpdates" | jq -r ".result"


[
{
"update_id": 408173037,
"message": {
"message_id": 122,
"from": {
"id": 507894652,
"is_bot": false,
"first_name": "Epsi",
"last_name": "Sayidina",
"username": "RizqiSayidina",
"language_code": "en-US"
},
"chat": {
"id": 507894652,
"first_name": "Epsi",
"last_name": "Sayidina",
"username": "RizqiSayidina",
"type": "private"
},
"date": 1516742659,
"text": "Hello World"
}
}
]

Helmy Agta 9:16:42 PM

[
{
"update_id": 776707999,
"message": {
"message_id": 2,
"from": {
"id": 458902151,
"is_bot": false,
"first_name": "Helmy",
"last_name": "Agta",
"username": "kutux",
"language_code": "en-US"
},
"chat": {
"id": 458902151,
"first_name": "Helmy",
"last_name": "Agta",

[Link] 19/65
1/29/2018 Telegram Web
"username": "kutux",
"type": "private"
},
"date": 1517061610,
"text": "who"
}
}
]

Epsi ‫ رزﻗﻲ‬Sayidina 9:17:04 PM

Perhatikan aku sudah pakai path .result

| jq -r ".result"

Helmy Agta 9:17:26 PM


[ { "update_id": 776707999, "message": { "message_id": 2, "f…
Syukur kawan. Lancar jaya. 🏻

Helmy Agta 9:17:36 PM

alhamdulillah om hehe

Epsi ‫ رزﻗﻲ‬Sayidina 9:17:46 PM

Arba joined the group

Epsi ‫ رزﻗﻲ‬Sayidina 9:18:11 PM

Warna warni euy si jq

Helmy Agta 9:18:56 PM

wkwk

Epsi ‫ رزﻗﻲ‬Sayidina 9:19:09 PM

Perhatikan di atas ada path .result[].[Link] .

curl -s "${tele_url}/getUpdates" | jq -r ".result[].


[Link]"

Helmy Agta 9:19:48 PM

Photo

Hehee... seneng khan.. berasa @heker .

[Link] 20/65
1/29/2018 Telegram Web
Helmy Agta 9:20:08 PM

Epsi ‫ رزﻗﻲ‬Sayidina
Hehee... seneng khan.. berasa @heker .
waduuh wkkwkw

Zifor Syahid 9:20:27 PM

Epsi ‫ رزﻗﻲ‬Sayidina
Sekarang buka bot masing-masing dan tulis sesuatu. Tulis ap…
btw buka bot masing masing itu maksudnya botfather atau link
bot kita sendiri?

Epsi ‫ رزﻗﻲ‬Sayidina 9:21:19 PM

Menampilkan tidaklah cukup, yang kita perlukan adalah


memasukkan ke variable. Dengan memakai command
substitution $(...) lagi.

chat_id=$(curl -s "${tele_url}/getUpdates" | jq -r
".result[0].[Link]")

Zifor Syahid 9:21:34 PM


btw buka bot masing masing itu maksudnya botfather atau lin…
Bot kita sendiri yang baru dibikin di @botfather.

Helmy Agta 9:21:45 PM


waduuh wkkwkw
Aku juga gitu koooq ... haha

Aku tunggu, jangan sampai ada yang tertinggal. 9:22:11 PM

Asem Bused 9:22:46 PM

maaf pak tanya sedikit melenceng.


misal kita abis install sebuah package.
nah biasanya shell nya belum ngenal package yang baru di install.
trus update nya gmn ya tanpa harus buka tutup shell ?

Epsi ‫ رزﻗﻲ‬Sayidina 9:23:52 PM

Asem Bused
maaf pak tanya sedikit melenceng. misal kita abis install sebu…
Biasanya langsung kenal, karena paket yang di-install, dicari di-
path.

Path ini bukan dicari per sisi bash, namun per sesi command line.

Zifor Syahid 9:24:32 PM

baru install jq om? ~sama

Asem Bused 9:24:34 PM

Epsi ‫ رزﻗﻲ‬Sayidina
Biasanya langsung kenal, karena paket yang di-install, dicari d…
oh maaf saya salah tanya nya berarti. biar auto complete (tab)
nya langsung keluar

Zifor Syahid 9:25:29 PM


baru install jq om? ~sama
iya pak, sama image magick biar bisa posting instagram #eh
(tg://search_hashtag?hashtag=eh)

Epsi ‫ رزﻗﻲ‬Sayidina 9:25:36 PM

Asem Bused
maaf pak tanya sedikit melenceng. misal kita abis install sebu…

Asem Bused 9:26:55 PM


iya pak, sama image magick biar bisa posting instagram #eh
Maklum malam minggu harus keren. Biasa mah ituh.

Kalau paman sengaja memberi sign ada kegiatan kugram malam

[Link] 21/65
1/29/2018 Telegram Web
minggu. Jadi bukan kencan atau hal lain.

#kode (tg://search_hashtag?hashtag=kode)

Fahmi Nurcahya 9:27:45 PM

Hehe maaf mau nanya json nya ko gamau ya 9:27:59 PM

Epsi ‫ رزﻗﻲ‬Sayidina 9:28:04 PM

Fahmi Nurcahya
Photo

Distro apa kang ?

Asem Bused 9:28:10 PM

Asem Bused
oh maaf saya salah tanya nya berarti. biar auto complete (tab…
jadi gimana ya pak ?

Fahmi Nurcahya 9:28:13 PM

Di termux wkwk

Nuzul Aswin joined the group

Zifor Syahid 9:28:30 PM

Fahmi Nurcahya
Di termux wkwk
nggak ada json_reformat nya bang

Epsi ‫ رزﻗﻲ‬Sayidina 9:29:03 PM

Fahmi Nurcahya
Di termux wkwk
Kalau jq ?

Zifor Syahid 9:29:53 PM

coba jq bisa nggak?

Epsi ‫ رزﻗﻲ‬Sayidina 9:29:54 PM

jq ada di termux.

Ganti saja json_reformat pakai jq

Fahmi Nurcahya 9:31:01 PM

Ok om siap

Epsi ‫ رزﻗﻲ‬Sayidina 9:32:08 PM

Zifor Syahid
coba jq bisa nggak?
Kalau di linux sih bisa pakai | jq -r ".ok"

Fahmi Nurcahya 9:32:25 PM


Ok om siap
Bisakah kawan ?

Kembali ke path, langsung dicoba 9:33:15 PM

% curl -s "${tele_url}/getUpdates" | jq -r ".result


[].[Link]"
507894652

Fahmi Nurcahya 9:33:58 PM

Cuma ngeganti json jadi jq doang om?

Zifor Syahid 9:34:19 PM

Fahmi Nurcahya
Cuma ngeganti json jadi jq doang om?
iya

Epsi ‫ رزﻗﻲ‬Sayidina

[Link] 22/65
1/29/2018 Telegram Web
Command subs 9:34:22 PM

chat_id=$(curl -s "${tele_url}/getUpdates" | jq -r
".result[0].[Link]")

lalu tampilkan

% echo $chat_id
507894652

Fahmi Nurcahya 9:34:39 PM


Cuma ngeganti json jadi jq doang om?
| jq -r ".ok"

Fahmi Nurcahya 9:35:26 PM


Cuma ngeganti json jadi jq doang om?
| jq ""

9:35:43 PM

Fahmi Nurcahya 9:35:50 PM

Epsi ‫ رزﻗﻲ‬Sayidina
Pelan-pelan ya... Para suhu mastah harap bersabar. Terkadan…
Monggo dilanjut om , saya tertinggal disini

Epsi ‫ رزﻗﻲ‬Sayidina 9:37:03 PM

Sembari menunggu. OOT sebentar.

Sebetulnya ini bukan tutorial tentang Telegram Bot.

Kita bisa melakukan hal yang sama di Tumblr, atau Instagram.


Hanya dulu aku bikinnya di Python.

Besok baru kita lanjut ke script. 9:38:44 PM

Ini juga sebentar lagi selesai koq.

Kalau Bot ini aku juga baru bisa, belajar dari pak Hasan di 9:39:49 PM
@botphp

Bagaimana semua.. sudah keluar pesan di chat_bot nya ke 9:40:28 PM


terminal ?

Aku mau lanjut ke feedback 9:41:43 PM

Hola a todos .... ? 9:44:43 PM

Asem Bused 9:45:12 PM

Epsi ‫ رزﻗﻲ‬Sayidina
Hola a todos .... ?
udah pak...

lagi nutupin tab firefox. kebanyakan. hahahah 9:45:44 PM

Epsi ‫ رزﻗﻲ‬Sayidina 9:47:04 PM

Setelah kita mendapat chat_id, kita bisa langsung memberi


feedback bot dengan sendMessage.

[Link] 23/65
1/29/2018 Telegram Web
% curl -s "${tele_url}/sendMessage?chat_id=${chat_i
d}" \
--data-urlencode "text=Thank you for visiting" | j
son_reformat
{
"ok": true,
"result": {
"message_id": 123,
"from": {
"id": 547870369,
"is_bot": true,
"first_name": "epsi_bot",
"username": "epsi_bot"
},
"chat": {
"id": 507894652,
"first_name": "Epsi",
"last_name": "Sayidina",
"username": "RizqiSayidina",
"type": "private"
},
"date": 1516743765,
"text": "Thank you for visiting"
}
}

9:47:39 PM

Periksa handphone masing-masing 9:48:06 PM

9:48:12 PM

Kita pakai --data-urlencode untuk "text=Thank you for 9:50:23 PM


visiting" , karena kalau pakai url mesti ada encoding terlebih
dahulu ?chat_id=123&text=Thank%20you%20for%20visiting .

Asem Bused 9:50:44 PM

hore bisa ......

Epsi ‫ رزﻗﻲ‬Sayidina 9:51:27 PM

Bagaimana kawan-kawan yang lain ?

Mudah bukan..

Mau saya tutup sesi malam ini, sebentar lagi.

Asem Bused 9:52:03 PM

Epsi ‫ رزﻗﻲ‬Sayidina
Bagaimana kawan-kawan yang lain ? Mudah bukan.. Mau say
keren2 pak.

Epsi ‫ رزﻗﻲ‬Sayidina 9:52:52 PM

Supaya update tidak membaca data yang lama, maka kita beri
perintah offset sesuai dengan update_id yang ada di JSON path
tadi.

[Link] 24/65
1/29/2018 Telegram Web
% curl -s "${tele_url}/getUpdates?offset=408173039"
{"ok":true,"result":[]}

DaunMintUser 9:53:02 PM

Maaf,saya mau out karena blm paham dg pembicaraan mas"ny

Epsi ‫ رزﻗﻲ‬Sayidina 9:54:01 PM

Asem Bused
keren2 pak.
Kamsia Kamsia. Syukron. Maaciiih...

Ada pertanyaankah dari teman-tema yang lain ?

DaunMintUser 9:54:30 PM
Maaf,saya mau out karena blm paham dg pembicaraan mas"ny
🏼

Asem Bused 9:57:29 PM

Epsi ‫ رزﻗﻲ‬Sayidina
Supaya update tidak membaca data yang lama, maka kita ber…
update_id itu yang mana ya pak ?

oh udah ketemu 9:58:21 PM

Epsi ‫ رزﻗﻲ‬Sayidina 9:59:57 PM

Sesi akan paman tutup pukul 20.00.


Paman kembalikan forum ke @emaland .

Dan dilanjutkan dengan tanya jawab bebas.


Silahkan tanya walaupun sudah di luar jadwal kulgram.

Sesi akan dimulai lagi besok malam, membuat script berdasarkan


diskus kita malam ini.

Mulai dari sha-bang sampai Makefile.

Berisi pula cara membikin


* Salam sapa kepada anggota baru seperti yang biasa dilakukan
mbak Miranda Salma yang cantiq.
* Text logger untuk arsip diskusi.
* HTML logger untuk arsip diskusi, resolve avatar URL.

Sampai jumpa besok malam. 🏼

Pukul 22.00. Typo. 10:00:07 PM

maland admin 10:01:26 PM

untuk log akan dibuat yang merasa ketinggalan nanti bisa di


download lagi yaa ,

Sapu Jagad 10:02:24 PM

maland
untuk log akan dibuat yang merasa ketinggalan nanti bisa di …
Siap min

amDhAN joined the group

Asky キラ 10:58:55 PM

njirr... ngirim bot yg udah di buat ke teman malah di spam.


ngirim2 gif. tpi caranya liat file gambar itu gimana ya oM?

Epsi ‫ رزﻗﻲ‬Sayidina 11:02:24 PM

Asky キラ
njirr... ngirim bot yg udah di buat ke teman malah di spam. …
Resolve URL image berdasarkan ID nya.

Sebentar...

Asky キラ 11:03:50 PM
njirr... ngirim bot yg udah di buat ke teman malah di spam. …

[Link] 25/65
1/29/2018 Telegram Web
How does it works ?

Hot to get Avatar URL.

First, we need the ID of the user, that we can get from each
JSON.

Call getUserProfilePhotos API using that ID, to retrieve


the file_id.

Call getFile API using that file_id, to retrieve the file_path.

Compose the file URL, based on Telegram API


using token, file_id and file_pat

Asky キラ 11:07:02 PM
njirr... ngirim bot yg udah di buat ke teman malah di spam. …
Kalau bingung ikut kulgram yang besok.

Aku bikin script untuk observe getUpdates.

Atau sederhananya begini:

Epsi ‫ رزﻗﻲ‬Sayidina:
Sekarang kita berpindah ke API yang lain yaitu getUpdates
(pakai s).

% curl -s "${tele_url}/getUpdates (tg://bot_command?


command=getUpdates)" | json_reformat > [Link]

Lalu buka [Link] pakai text editor.

Acil Repeater joined the group

Epsi ‫ رزﻗﻲ‬Sayidina 11:07:53 PM

Dari path itu cari... mesti kreatif ngulik sendiri nih...

Asky キラ 11:11:48 PM

nunggu kuliah ajalah om. mata udah pening.

muhzikri 11:36:35 PM

maland
untuk log akan dibuat yang merasa ketinggalan nanti bisa di …
dimana um? maapkeun baru nongol~

Isro Hidayat 11:58:18 PM

Epsi ‫ رزﻗﻲ‬Sayidina
Sesi akan paman tutup pukul 20.00. Paman kembalikan foru…
makasih pak, ditunggu kulgramnya besok

Sunday, January 28, 2018

Sugandi Slamet 12:45:48 AM

Epsi ‫ رزﻗﻲ‬Sayidina
Kalau di tempatku begini. Setelah menulis hello world. % cur…
wah keren bisa jadi gini ya

ada rangkuman sha-bang kah.. 12:46:56 AM


apa itu sha-bang
apa itu subs $(...)
fungsi buat apa heheheh
mgkin aja yang lain pada tiru2 tp gak mengerti maksudnya
kayak saya ....

terimakasih kulgramnya sangat berkelas dan terurut banget top 12:47:33 AM


pokoknya paman

dhang gara 12:48:19 AM

[Link]
([Link]

[Link] 26/65
1/29/2018 Telegram Web
Bash Notes for Professionals book
([Link]

dhang gara 12:49:26 AM


[Link]
The Bash Notes for Professionals book is compiled from Stack
Overflow Documentation, the content is written by the beautiful
people at Stack Overflow. Text content is released under
Creative Commons BY-SA. See credits at the end of this book
whom contributed to the various chapters. Images may be
copyright of their respective owners unless otherwise specified

Book created for educational purposes and is not affiliated with


Bash group(s), company(s) nor Stack Overflow. All trademarks
belong to their respective company owners

Sugandi Slamet 12:50:53 AM

dhang gara
The Bash Notes for Professionals book is compiled from Stac…
wah apa itu artinya ane makanya kangkung gak mudeng bahasa
inglish2

dhang gara 12:51:24 AM


[Link]
maksi om kayaknya kemarin udah download ini

dhang gara 12:53:39 AM

Sugandi Slamet
maksi om kayaknya kemarin udah download ini
buku kayak gini mungkin butuh di pin,

Sugandi Slamet 12:54:47 AM

dhang gara
buku kayak gini mungkin butuh di pin,
Gpp om tp lebih interaktif kalo kulgram

Ada nikmat tersendiri mendengar kulgram atau membagi ilmu 12:55:12 AM


lewat kulgram

Bgus si bukunya 193 halaman isinya mantab banget pokokmen 12:57:24 AM

Epsi ‫ رزﻗﻲ‬Sayidina 4:39:20 AM

Sugandi Slamet
ada rangkuman sha-bang kah.. apa itu sha-bang apa itu subs …
Ini buku wajib bash.

[Link] ([Link]

Sugandi Slamet 4:40:44 AM


ada rangkuman sha-bang kah.. apa itu sha-bang apa itu subs …
[Link]
([Link]

Fadlan joined the group

Epsi ‫ رزﻗﻲ‬Sayidina 4:57:48 AM

Sugandi Slamet

[Link] 27/65
1/29/2018 Telegram Web
ada rangkuman sha-bang kah.. apa itu sha-bang apa itu subs …
[Link]
([Link]

emon キリン joined the group

Dudi Gurnadi K invited Rudyanto D. Saputra

Isro Hidayat 8:31:57 AM

dhang gara
[Link]

Andreas Widi joined the group

lookingforyourname joined the group

Rizki joined the group

Dwi Zulfikar Fuadi 10:48:56 AM

Epsi ‫ رزﻗﻲ‬Sayidina
Kalau di tempatku begini. Setelah menulis hello world. % cur…
om, ini sih nulis "hello world" nya dimana ya?

baru sempet nyoba hehehe 10:49:27 AM

Epsi ‫ رزﻗﻲ‬Sayidina 10:50:32 AM

Dwi Zulfikar Fuadi


om, ini sih nulis "hello world" nya dimana ya?
Di telegram dalam smartphone.

Dwi Zulfikar Fuadi 10:52:33 AM

oke..oke

Epsi ‫ رزﻗﻲ‬Sayidina 10:52:56 AM


Kalau di tempatku begini. Setelah menulis hello world. % cur…
ini harus pake jq ya? ga bisa pake json_refotmat?

Epsi ‫ رزﻗﻲ‬Sayidina 11:00:58 AM

Dwi Zulfikar Fuadi


ini harus pake jq ya? ga bisa pake json_refotmat?
Kalau melacak path harus pakai json query

11:01:10 AM

Dwi Zulfikar Fuadi 11:03:31 AM

oh gitu toh..

makasih om, tak coba lanjut lagi 11:04:12 AM

11:09:32 AM

ya elah, mau install harus update dulu, kuota limit lagi wkwkwk

Adisa Argani 11:13:53 AM

Dwi Zulfikar Fuadi


Photo

NGUYEN 11:14:26 AM

Dwi Zulfikar Fuadi


Photo

waduh gan, gimana mau ngehacking internet aja terbatas kuota.

[Link] 28/65
1/29/2018 Telegram Web
si_kabayan 11:15:58 AM

Itu paket tambahan doang


Coba apt nya pake parameter no-recommends
Lupa lagi nama tepatnya, jajal -r atau -R saja

Dwi Zulfikar Fuadi 11:18:36 AM

NGUYEN
waduh gan, gimana mau ngehacking internet aja terbatas ku…
sebenernya sih ada mas, tapi...lg hemat

si_kabayan 11:19:33 AM
Itu paket tambahan doang Coba apt nya pake parameter no-…
lengkapnya gimana mas commandnya?

Marchel Ace joined the group

si_kabayan 11:24:49 AM

apt-get install --no-install-recommends jq

Dwi Zulfikar Fuadi 11:31:46 AM

Dwi Zulfikar Fuadi


Photo

Masih sama kayakgini mas

si_kabayan 11:36:05 AM

My bad, ane yang salah 11:36:49 AM


libonig4 ternyata emang bukan paket tambahan

PM 12:37:14 PM

Antoni Haikal joined the group

Sugandi Slamet 1:11:15 PM

Mangan2

Epsi ‫ رزﻗﻲ‬Sayidina 2:23:30 PM

Persiapan nanti malam:

1. Baca kulgram kemarin malam.

2. Pasang jq 2:23:40 PM

3. Baca TLDP Bash 2:23:52 PM

Adisa Argani 2:25:19 PM

4. (optional) Join @heker

Tommy joined the group

Dwi Zulfikar Fuadi 6:16:42 PM

woh..ada lagi toh

Epsi ‫ رزﻗﻲ‬Sayidina 6:45:16 PM

Adisa Argani
4. (optional) Join @heker
(3) optional
(4) wajib

Kebalik mas

[Link] 29/65
1/29/2018 Telegram Web
Asky キラ 6:50:37 PM

mas @heker jarang update.

Epsi ‫ رزﻗﻲ‬Sayidina 7:53:34 PM

Sudah mulai ramai nih .

Asky キラ 7:54:20 PM

pertamax.... 🏎

Epsi ‫ رزﻗﻲ‬Sayidina 7:55:41 PM

Sudah boleh dimulaikah.

Jamku menunujukkan pukul 19.56

Asky キラ 7:58:10 PM

belanja cemilan dulu.

Epsi ‫ رزﻗﻲ‬Sayidina 7:58:27 PM

Selamat malam teman-tema semua, kita berjumpa lagi malam ini,


dengan tema pemrograman BASH secara terstruktur.

Kasus yang kita ambil adalah mengenai Telegram bot. Sengaja


paman pilihkan, karena codingnya cukup pendek, dan tidak
bertele-tele.

Sehingga dapat menjadi contoh real-life project.

Silahkan buka
* Terminal bash
* Text editor
Ayo kita mulai.

Asky キラ 7:58:36 PM
belanja cemilan dulu.
Mangga atuh kang

gojigeje joined the group

Epsi ‫ رزﻗﻲ‬Sayidina 8:01:44 PM

Mulai dari dasar.

Di keluarga linux, dan unix, suatu script ditandai dengan karakter


#! atau lebih dikenal dengan nama sha-bang.

Di bash dapat kita tulis script sebagai berikut:

[Link]

#!/usr/bin/env bash
ls -l ~

Atau

#!/usr/bin/bash
ls -l ~

Sistem hanya dapat tahu kalau ini adalah executable bilamana 8:04:12 PM
telah diatur

% chmod +x [Link]

Dan nama script di linux tidak harus diakhiri dengan akhiran .sh .

Editor akan paham ini adalah script bilamana di awal ada sha-
bang.

Sekian mengenai sha-bang.

Ada yang jelas ?

[Link] 30/65
1/29/2018 Telegram Web
Rafsanzani Suhada 8:05:03 PM

Hadiiiirrrrr

Epsi ‫ رزﻗﻲ‬Sayidina 8:05:18 PM

Kalau menjalankan script di terminal

% ./[Link]

Ini dasar sekali, kurasa ham[pir semua sudah paham.

Ada pertanyaan ?

Fahmi Nurcahya 8:05:32 PM

cukup jelas

Epsi ‫ رزﻗﻲ‬Sayidina 8:05:37 PM

Rafsanzani Suhada
Hadiiiirrrrr
Terima... kasiiiiiih

Langsung masuk ke script ya. 8:05:55 PM

Buka text editor.

Kalau aku bikin directory di 8:06:28 PM

/home/epsi/Documents/cupubot/bash/

Rafsanzani Suhada 8:06:54 PM

Epsi ‫ رزﻗﻲ‬Sayidina
Langsung masuk ke script ya. Buka text editor.
Sudah...

Epsi ‫ رزﻗﻲ‬Sayidina 8:07:21 PM

Berdasarkan tutorial kemarin, paman bikin script ini:

#!/usr/bin/env bash

### -- config --

# $token variable here in [Link]


config_file=~/.config/cupubot/[Link]

if [ ! -f $config_file ];
then
echo "Config not found!" && exit 0
else
source $config_file
fi

tele_url="[Link]

### -- main --

updates=$(curl -s "${tele_url}/getUpdates")
count_update=$(echo $updates | jq -r ".result | leng
th")

for ((i=0; i<$count_update; i++)); do


update=$(echo $updates | jq -r ".result[$i]")
echo "$update\n"
done

Bie Schopath joined the group

Epsi ‫ رزﻗﻲ‬Sayidina 8:08:53 PM

Simpan dengan nama [Link], lalu jalankan.

% ./[Link]

Mengenai config sudah dibahas kemarin, tempat untuk token. 8:09:33 PM

[Link] 31/65
1/29/2018 Telegram Web
Intinya sih, semua yang ditulis di console kemarin malam, kita 8:10:08 PM
jadikan script supaya tidak berulang-ulang kita tulis.

Yang kemarib belum ada di console hanyalah loop dengan gaya 8:10:53 PM
bahasa C.

for ((i=0; i<$count_update; i++)); do


...
done

Sekarang, buka telegram bot yang kemarin kita bikin. Lalu 8:11:50 PM
jalankan script.

Maaf. Tulis sesuatu di chat bot. Bisa apa saja. 8:12:09 PM

8:12:42 PM

Tulis sesuatu di chat bot, lalu jalankan script.

Sampai di sini ada yang jelas ? 8:13:19 PM

Ada tanggapan ? 8:14:35 PM

Atau lanjut saja.

F2R 8:15:20 PM

Next

Epsi ‫ رزﻗﻲ‬Sayidina 8:15:33 PM

F2R
Next
Terimakasih banyak dukungannya.

F2R 8:17:57 PM

Epsi ‫ رزﻗﻲ‬Sayidina
Terimakasih banyak dukungannya.
Sip om

Epsi ‫ رزﻗﻲ‬Sayidina 8:18:25 PM

Pada saat kita sedang in the mood


untuk coding, baris
pemrograman yang kita bikin, akan meningkat dengan jalannya
waktu.

BASH memang diciptakan untuk shell, dan bukan bahasa


pemrograman yang lengkap, karena itu harus kita sendir yang dar
awal berpikir untuk rapih.

Ini masalah mindset. Bukan teknik pemrograman.

Di awal memang boleh saja quick and dirty, namun selanjutnya


mesti rapih.

Resiko dari tidak rapih adalah, program tidak dapat dipelihara. 8:19:29 PM

Ketika kita baca coding yang kita bikin, di tahun depannya, kita
bingung sendiri, kemarin bikin apaan.

Kalau script awal tadi memang sifatnya __quick and dirty 8:20:06 PM

Kalau script awal tadi memang sifatnya quick and dirty, hanya 8:22:15 PM
sebatas memindah dari console ke script.

Sekarang kita bikin ada section. Ada bagian2. Dan masukkan


bagian yang panjang dalam fungsi.

[Link] 32/65
1/29/2018 Telegram Web

[Link]

#!/usr/bin/env bash

### -- config --

# $token variable here in [Link]


config_file=~/.config/cupubot/[Link]

if [ ! -f $config_file ];
then
echo "Config not found!" && exit 0
else
source $config_file
fi

tele_url="[Link]

### -- task --

function process_observe() {
local i update
local updates=$(curl -s "${tele_url}/getUpdate
s")
local count_update=$(echo $updates | jq -r ".res
ult | length")

for ((i=0; i<$count_update; i++)); do


update=$(echo $updates | jq -r ".result
[$i]")
echo "$update\n"
done
}

### -- controller --

function do_observe() {
# no loop
process_observe
}

### -- main --

do_observe

Lalu aku tambahkan bagian controller, supaya lebih kekinian,


dengan pola coding masa kini.

Ada yang jelas 🏼? 8:23:31 PM

Setelah ini kita ubah sectio2 tersebut ke bentuk modilar dalam


script terpisah.

Mau lanjut atau ada pertanyaan ?

Mumpung scriptnya belum memakai logika yang kompleks.

Fungsi script ini masih sebatas mengambil data JSON dari 8:24:53 PM
Telegram API dengan method getUpdates.

Karena kita mesti sering2 menganalisa JSON. Maka script dasar


ini menjadi perlu.

Setelah ini kita ubah section2 tersebut ke bentuk modular dalam 8:25:17 PM
script terpisah.

Apakah boleh dilanjut ?

Asky キラ 8:25:20 PM

bisa jelaskan sedikit bagian ini om?

### — controller — 8:25:22 PM

[Link] 33/65
1/29/2018 Telegram Web
function do_observe() {
# no loop
process_observe
}

### — main —

do_observe

Epsi ‫ رزﻗﻲ‬Sayidina 8:26:08 PM

Menjalankannya mash sama saja

% ./[Link]

Outputnya juga sama.

Asky キラ 8:27:00 PM
### — controller — function do_observe() { # no loop proce…
Pertanyaan bagus

Sebetulnya bisa saja langsung pakai

process_observe

Dan tidak perlu bertele-tele.

Asky キラ 8:28:09 PM
### — controller — function do_observe() { # no loop proce…
Namun ketika script sudah panjang kita perlu seksi tersendiri.
Misalnya ini

#!/usr/bin/env bash

### -- task controller --

function do_observe() {
process_observe
}

function loop_reply() {
while true; do
process_reply
sleep 1
done
}

Ada yang pakai loop ada yang tidak

Asky キラ 8:29:09 PM
### — controller — function do_observe() { # no loop proce…
Atau ini untuk contoh yang lebih panjang

[Link] 34/65
1/29/2018 Telegram Web
#!/usr/bin/env bash

### -- task controller --

function do_observe() {
process_observe
}

function loop_reply() {
while true; do
process_reply
sleep 1
done
}

function loop_newmember() {
while true; do
process_newmember
sleep 1
done
}

function do_logger_text() {
# empty logger file
[[ -f $log_file_text ]] && rm $log_file_text

process_logger_text
}

function do_logger_html() {

# empty logger file


[[ -f $log_file_html ]] && rm $log_file_html

cat << EOF >> $log_file_html


<html>
<head>
<title>Log</title>
<meta charset="utf-8">
</head>
<body>
<table>
EOF

process_logger_html

cat << EOF >> $log_file_html


</table>
</body>
</html>
EOF

Asky キラ 8:29:59 PM
bisa jelaskan sedikit bagian ini om?
Cukup jelaskah ?

Asky キラ 8:30:12 PM

wahh udah masuk html.

Epsi ‫ رزﻗﻲ‬Sayidina 8:30:44 PM

Asky キラ
wahh udah masuk html.
Itu nanti belakangan waktu bikin html logger.

Itu khan hanya contoh controller script saja.

Asky キラ 8:31:52 PM
### — controller — function do_observe() { # no loop proce…
Jadi do_observe hanyalah sekedar fungsi untuk memanggil task
process_observe .

[Link] 35/65
1/29/2018 Telegram Web
### -- controller --

function do_observe() {
# no loop
process_observe
}

Lanjut ya... 8:32:02 PM

Asem Bused 8:32:06 PM

duh ketinggalan gara2 nonton yutub. ngejar dulu

Epsi ‫ رزﻗﻲ‬Sayidina 8:33:11 PM

Asem Bused
duh ketinggalan gara2 nonton yutub. ngejar dulu
Aku juga hampir telat gegara bayar cicilan 🏼.

Asky キラ 8:33:20 PM

lanjut om.

Asem Bused 8:33:36 PM


duh ketinggalan gara2 nonton yutub. ngejar dulu
baru nambah 2 config. hehe

jadi masih dekat lah. 8:33:41 PM

Epsi ‫ رزﻗﻲ‬Sayidina 8:34:32 PM

Sekarang mari kita bagi, section2 di atas ke dalam script2


terpisah. Kita perlu empat file.

[Link]
[Link]
[Link]
[Link]

Dengan memisah menjadi berkas kecil-kecil, akan lebih mudah


memahami cara kerjanya.

Asky キラ 8:35:24 PM

saya gk sempet baca abs guide. huhh...

Epsi ‫ رزﻗﻲ‬Sayidina 8:37:33 PM

Yang pertama adalah main script.

#!/usr/bin/env bash
# This is a telegram bot in bash

### -- module --

DIR=$(dirname "$0")
. ${DIR}/[Link]
. ${DIR}/[Link]
. ${DIR}/[Link]

### -- main --

do_observe

Main script harus memakai sha-bang , sedangkan script yang


lain tidak harus memakai sha-bang atau #! .

Main script harus memili mode executable, sedangkan script yang


dipanggil tidak perlu memiliki mode executable.

Bilamana perlu tambahkan license di awal.

# Copyright: E. Rizqi N. Sayidina <[Link]@


[Link]>
# License: The MIT License (MIT)

[Link] 36/65
1/29/2018 Telegram Web
Yang mungkin menarik adalah 8:38:28 PM

DIR=$(dirname "$0")

Supaya tidak searah.

Ada yang paham $DIR ini untuk apa ?

Berikutnya adalah config . 8:39:55 PM

[Link]

#!/usr/bin/env bash
# no need sha-bang for the script to run,
# but needed, so file manager can detect its type.

### -- config --

# $token variable here in [Link]


config_file=~/.config/cupubot/[Link]

if [ ! -f $config_file ];
then
## exit success (0)
echo "Config not found!" && exit 0
else
source $config_file
fi

tele_url="[Link]

Semua global variable dan pembacaan pengaturan script


diletakkan di sini.

Lalu controller . 8:40:53 PM

[Link]

#!/usr/bin/env bash

### -- task controller --

function do_observe() {
process_observe
}

Terakhir task dari observe itu sendiri. 8:42:02 PM

[Link]

#!/usr/bin/env bash

function process_observe() {
local i update
local updates=$(curl -s "${tele_url}/getUpdate
s")
local count_update=$(echo $updates | jq -r ".res
ult | length")

for ((i=0; i<$count_update; i++)); do


update=$(echo $updates | jq -r ".result
[$i]")
echo "$update\n"
done
}

Sekarang codingnya terlihat pendek-pendek dan lebih mudah 8:42:29 PM


dibaca. (dan ditanya)

Adakah yang jelas 🏼♂ ? 8:42:50 PM

Silahkan bertanya.

[Link] 37/65
1/29/2018 Telegram Web
Kalau sudah modular, akan mudah menambahkan fungsi-fungsi 8:45:56 PM
lain.

Karena kerangka codingnya sudah ada.

Asem Bused 8:46:13 PM

widih banyak script nya .... bntr2 pak. sekalian ngebiasain pake
vim

bedanya source sama . apa ya pak ? 8:47:17 PM

Epsi ‫ رزﻗﻲ‬Sayidina 8:49:02 PM

Asem Bused
bedanya source sama . apa ya pak ?
CMIIW. Ini sendek pengetahuanku saja yaks.

Di script, hasilnya sama.

Namun di console yang hasilnya berbeda.

Kalau di console. Variable `.`tidak masuk sesi. 8:49:34 PM

Kalau source masuk.

Kalau paman salah, mohon koreksi dari para mastah di sini. Dan 8:50:03 PM
terimakasih sebelumnya.

Fahmi Nurcahya 8:50:56 PM

Epsi ‫ رزﻗﻲ‬Sayidina
Maaf. Tulis sesuatu di chat bot. Bisa apa saja.
yang ini kelewat, gpp kan

Epsi ‫ رزﻗﻲ‬Sayidina 8:51:07 PM

Cukup jelaskah mengenai modular ?

Mau lanjut nih.

Fahmi Nurcahya 8:51:48 PM


yang ini kelewat, gpp kan
.. tapi jadinya gak bisa run script

Bagaimana baiknya.. kutunggu kah ?

Asem Bused 8:52:08 PM

masih kurang paham skema pemisahan file nya saya pak.


biasanya object oriented / MVC koq rasanya beda .....

Fahmi Nurcahya 8:52:10 PM

Lanjut aja

Epsi ‫ رزﻗﻲ‬Sayidina 8:52:11 PM

Aku ikut musyawarah di sini.

Asem Bused 8:53:15 PM


masih kurang paham skema pemisahan file nya saya pak. bias…
Tepat sekali.

Ini memang bukan MVC.


BASH juga bukan di-desain untuk itu.

Aku sekedar kekinian saja.


Biar keren pakai istilah itu.

Asem Bused 8:54:41 PM


masih kurang paham skema pemisahan file nya saya pak. bias…
Kalau lihat source code di github, biasanya bash dijadikan satu
single file.

Mereka memang orang2 cerdas yang bisa bikin coding satu single
file dengan 200 baris.

Kalau aku sih tidak mampu.

[Link] 38/65
1/29/2018 Telegram Web

Aku sadar otakku terbatas, maka kubikin modular, supaya mudah


memahami.

Sugandi Slamet 8:55:41 PM

Epsi ‫ رزﻗﻲ‬Sayidina
Sistem hanya dapat tahu kalau ini adalah executable bilamana…
Nah ini pertanyaan ane kmrin jelas pak siap lanjut

Asem Bused edited 8:56:30 PM

Epsi ‫ رزﻗﻲ‬Sayidina
Kalau lihat source code di github, biasanya bash dijadika…
gaya ngoding orang beda2 sih pak. tapi keren untuk dapat
melihat berbagai gaya koding banyak orang lewat github

Epsi ‫ رزﻗﻲ‬Sayidina 8:56:35 PM

Kekurangan dari script yang single file tersebut, adalah, orang


lain tidak mudah memahami, apa yang dimaksud coder.

Kita jangan mau klah sama orang asing.

Kalau lebih terstruktur, kita bisa kerja team.

Kita bisa bikin aneka tools2 bash sendiri.

Dan sebetulya orang2 kita tidak kalah cerdas.

Sugandi Slamet 8:57:03 PM


Nah ini pertanyaan ane kmrin jelas pak siap lanjut
Sama-sama

Epsi ‫ رزﻗﻲ‬Sayidina 8:57:56 PM


Kalau lihat source code di github, biasanya bash dijadikan sat…
Typo... 2000 baris seperti pacaur .

Yang ujung2nya unmaintained. Karena yang paham codingnya


hanya beliau.

Unmaintaned karena beliau sibuk tidak sempat ikut speifikasi 8:59:02 PM


pacman versi yang baru.

Namun tidak di-over-handlecder lain karena tidak ada yang


paham.

Lanjut ya... 8:59:25 PM

Jadi ghibah, ngomongin orang nih. Maaf-maaf.

Sekarang kita akan me-reply telegram bot. Jadi bukan hanya 9:01:29 PM
observe saja. Ada beberapa file yag kita butuh.

[Link]
[Link]
[Link]

Asky キラ 9:02:26 PM

Epsi ‫ رزﻗﻲ‬Sayidina
Sekarang kita akan me-reply telegram bot. Jadi bukan hanya …
file ini masih di DIR ~/document/bot ?

Epsi ‫ رزﻗﻲ‬Sayidina 9:03:01 PM

Mulai dari beerkas utama. config tidak berubah.

[Link]

[Link] 39/65
1/29/2018 Telegram Web
#!/usr/bin/env bash

### -- module --

DIR=$(dirname "$0")
. ${DIR}/[Link] # no change
. ${DIR}/[Link]
. ${DIR}/[Link] # no need
. ${DIR}/[Link]

### -- main --

do_reply

Asky キラ 9:03:27 PM
file ini masih di DIR ~/document/bot ?
Di path mana saja boleh.

Senyamannya.

Lalu tambahkan fungsi do_reply`di `controller . 9:04:27 PM

[Link]

#!/usr/bin/env bash

### -- task controller --

function do_observe() {
process_observe
}

function do_reply() {
process_reply
}

Sekarang, semua hasil kulgram telegram bot di console kemarin 9:05:44 PM


malam dapat disarikan ke dalam fungsi ini. Cukup satu fungsi
pendek sahaja.

[Link]

#!/usr/bin/env bash

function process_reply() {
local i update message_id chat_id
local updates=$(curl -s "${tele_url}/getUpdate
s")
local count_update=$(echo $updates | jq -r ".res
ult | length")

for ((i=0; i<$count_update; i++)); do


update=$(echo $updates | jq -r ".result
[$i]")

message_id=$(echo $update | jq -r ".message.


message_id")
chat_id=$(echo $update | jq -r ".[Link]
[Link]")

result=$(curl -s "${tele_url}/sendMessage" \
--data-urlencode "chat_id=${chat_i
d}" \
--data-urlencode "reply_to_message
_id=${message_id}" \
--data-urlencode "text=Thank you f
or your message."
);
done
}

Ada yang jelas 🏼♂ ? 9:06:51 PM

Silahkan bertanya sebelum finishing mengenai modular ?

[Link] 40/65
1/29/2018 Telegram Web

Nanti lanjut sampai Makefile.

Coba tulis sesuatu d chat bot yang dibikin kemarin lalu. 9:09:25 PM

Lalu jalanan scriptnya.

% ./[Link]

Memang di script kelihatan kosong. Namun hasilnyaterlihat di


smartphone atau telegram client.

9:09:38 PM

Jalankan script

9:10:00 PM

Umpan balik (feedback)

Asky キラ 9:10:15 PM

utk chmod +x banyak file gimana pakde?

Epsi ‫ رزﻗﻲ‬Sayidina 9:10:57 PM

Asky キラ
utk chmod +x banyak file gimana pakde?
$ chmod +x path_to_dir\*

Asky キラ 9:10:58 PM

cuman di spasi aja ya ?

Epsi ‫ رزﻗﻲ‬Sayidina 9:11:25 PM

$ chmod +x *.bash

istilahnya clobbering 9:11:38 PM

Yang dibikin exectuable cukup `main fil`e nya saja. 9:12:26 PM

Tidak perlu semua.

Yang dibikin executable cukup main file nya saja. 9:12:54 PM

Tidak perlu semua. 🏼

Sekarang penyelesaian. Di script tadi belum pakai loop, maka 9:14:50 PM


pesan yang dibalas hanya satu.

Untuk membalas banyak pesan perlu pakai loop. Kita perlu


perubahan pada tiap2 script.

[Link]
[Link]
[Link]
[Link]

Seperti biasa mulai dari berkas utama. 9:16:20 PM

[Link] 41/65
1/29/2018 Telegram Web
[Link]

#!/usr/bin/env bash

### -- module --

DIR=$(dirname "$0")
. ${DIR}/[Link]
. ${DIR}/[Link]
. ${DIR}/[Link] # no need
. ${DIR}/[Link]

### -- main --

loop_reply

Ganti do_reply dengan loop_reply .

Lalu di config tambahkan baris ini: 9:19:10 PM

[Link]

tele_url="[Link]

### -- last update --


last_id_file=~/.config/cupubot/[Link]
last_id=0

if [ ! -f $last_id_file ];
then
touch $last_id_file
echo 0 > $last_id_file
else
last_id=$(cat $last_id_file)
# echo "last id = $last_id"
fi

Fungsi dari last_id ini untuk mengatur offset dari path dari
ipdate_id yang terakhir yang dikeluarkan oleh API getUpdates .

Intinya supaya data lama tidak perlu dipanggil keluar lagi dalam
hasil JSON-nya.

Asem Bused 9:20:19 PM

Epsi ‫ رزﻗﻲ‬Sayidina
Sekarang, semua hasil kulgram telegram bot di console kemar…
pak ini reply ke semua chat ya ?

Asky キラ 9:20:50 PM

tanya
memang agak lama pak, bot-nya balas pesan?

Sugandi Slamet 9:20:59 PM

Epsi ‫ رزﻗﻲ‬Sayidina
Kalau menjalankan script di terminal % ./[Link] Ini dasar …
Kalo jalanin sh [Link] ([Link] bisa kan pak bedanya dgn
./file (tg://bot_command?command=file).sh

Epsi ‫ رزﻗﻲ‬Sayidina 9:21:09 PM

Asem Bused
pak ini reply ke semua chat ya ?
1. Semua chat di bot.

2. Atau semua chat di group.

Supaya tidak me-reply semua chat di group, ada lanjutan dari


skrip ini.

Asky キラ 9:21:36 PM
tanya memang agak lama pak, bot-nya balas pesan?

[Link] 42/65
1/29/2018 Telegram Web
Agak lama memang

Epsi ‫ رزﻗﻲ‬Sayidina 9:22:10 PM


Agak lama memang
Satu atau dua detik ... cmiiw

Sugandi Slamet 9:23:33 PM


Kalo jalanin sh [Link] bisa kan pak bedanya dgn ./[Link]
Kalau itu membuka script dalam sesi baru sh .

Aku kurang paham bedanya.


Mungkin mastah2 lain di sini lebih paham.

Asky キラ 9:23:38 PM

Epsi ‫ رزﻗﻲ‬Sayidina
1. Semua chat di bot. 2. Atau semua chat di group. Supaya ti…
lanjut pak. kalo perlu, sampe si robot bisa di ajak komunikasi.
hehe

Sugandi Slamet 9:24:17 PM

Epsi ‫ رزﻗﻲ‬Sayidina
Kalau itu membuka script dalam sesi baru sh. Aku kurang pah…
Di dalam buku yg tadi malam saya baca ada beberapa
menjalankan script bash

Sh [Link] ([Link] ./file (tg://bot_command? 9:24:37 PM


command=file).sh dan 3 lainnya kurang hafal

Lg di jalan soalnya hehe 9:24:48 PM

Epsi ‫ رزﻗﻲ‬Sayidina 9:25:14 PM

Lalu controller -nya diubah

[Link]

#!/usr/bin/env bash

### -- task controller --

function do_observe() {
process_observe
}

function loop_reply() {
while true; do
process_reply
sleep 1
done
}

Hapus seluruh fungsi do_reply , lalu bikin baru fungsi


loop_reply .

Sugandi Slamet 9:25:30 PM


Lg di jalan soalnya hehe
gpp. semua orang puya kegiatan

Dwi Zulfikar Fuadi 9:25:34 PM

[Link] 43/65
1/29/2018 Telegram Web
Kok /start nya juga kereply ya om?

Asem Bused 9:26:17 PM

Sugandi Slamet
Kalo jalanin sh [Link] bisa kan pak bedanya dgn ./[Link]
kalo setauku
./file (tg://bot_command?command=file).sh itu seperti exec
[Link] ([Link] jadi ngeksekusi file tersebut jadi perlu
permission executable.
kalo sh nggak usah pake permission mau soalnya ngeksekusi
script dengan intepreter sh
*CMIIW

Sugandi Slamet 9:26:55 PM

Asem Bused
kalo setauku ./[Link] itu seperti exec [Link] jadi ngeksekusi fil…
Oh

Epsi ‫ رزﻗﻲ‬Sayidina 9:27:02 PM

Dwi Zulfikar Fuadi


Photo

Pertanyaan bagus.

Ini feature yang akan kita bikin.

Nanrti akan ada script untuk \id .

Jadi tidak semua pesan dibalas.

Bie Schopath 9:27:15 PM

Sugandi Slamet
Kalo jalanin sh [Link] bisa kan pak bedanya dgn ./[Link]
Mungkin menurut saya ./file (tg://bot_command?command=file)
itu universal di Linux mas buat execute file apa saja.
Yang menentukan itu headernya seperti #!/bin/bash

Jalanin script php pun bisa kalau headernya #!/usr/bin/php atau


#!/usr/src/php tergantung binary nya diletakannya sih.

Mungkin kalau ada salah mohon dikoreksi

Epsi ‫ رزﻗﻲ‬Sayidina 9:27:25 PM

Asem Bused
kalo setauku ./[Link] itu seperti exec [Link] jadi ngeksekusi fil…
Oh iya..beneeer.

Sugandi Slamet 9:27:30 PM

Asem Bused
kalo setauku ./[Link] itu seperti exec [Link] jadi ngeksekusi fil…
Maksi pak penjelasnnya

Epsi ‫ رزﻗﻲ‬Sayidina 9:28:09 PM

Bie Schopath
Mungkin menurut saya ./file itu universal di Linux mas buat ex…
Trims juga sudah bantu2.

Sebab banyak hal2 yang aku gak tau juga.

Sugandi Slamet 9:28:49 PM

Bie Schopath
Mungkin menurut saya ./file itu universal di Linux mas buat ex…
Ok mas sekali lagi makasi untuj tambahannya

Ok lanjuy 9:28:57 PM

Bie Schopath 9:29:01 PM

Sama2 mas, salam kenal. Ikut nimbrung ya

Sugandi Slamet 9:29:19 PM

Gpp saling berbagi itu lebih baij

[Link] 44/65
1/29/2018 Telegram Web
Epsi ‫ رزﻗﻲ‬Sayidina 9:29:42 PM

Sekarang, mohon maaf agak panjang, berikut script reply nya.

05-task-reply

#!/usr/bin/env bash

function process_reply() {
# global-project : last_id
# global-module : _
local i update message_id chat_id text

local updates=$(curl -s "${tele_url}/getUpdates?


offset=$last_id")
local count_update=$(echo $updates | jq -r ".res
ult | length")

[[ $count_update -eq 0 ]] && echo -n "."

for ((i=0; i<$count_update; i++)); do


update=$(echo $updates | jq -r ".result
[$i]")
last_id=$(echo $update | jq -r ".update_id")

message_id=$(echo $update | jq -r ".message.


message_id")
chat_id=$(echo $update | jq -r ".[Link]
[Link]")

get_feedback_reply "$update"

result=$(curl -s "${tele_url}/sendMessage" \
--data-urlencode "chat_id=${chat_i
d}" \
--data-urlencode "reply_to_message
_id=${message_id}" \
--data-urlencode "text=$return_fee
dback"
);

last_id=$(($last_id + 1))
echo $last_id > $last_id_file

echo -e "\n: ${text}"


done
}

function get_feedback_reply() {
# global-module : return_feedback
local update=$1

text=$(echo $update | jq -r ".[Link]")


local first_word=$(echo $text | head -n 1 | awk
'{print $1;}')

return_feedback='Good message !'


case $first_word in
'/id')
username=$(echo $update | jq -r ".messag
[Link]")
return_feedback="You are the mighty @${u
sername}"
;;
*)
return_feedback='Thank you for your mess
age.'
;;
esac
}

Sudah bisa handle /id , namun belum bisa handle /start .

Setidaknya ada gambaran bagaimana untuk memulai


melengkapinya.

[Link] 45/65
1/29/2018 Telegram Web
Jalankan saja script 9:31:07 PM

% ./[Link]

Lalu lihat hasilnya

Sugandi Slamet 9:31:32 PM

Epsi ‫ رزﻗﻲ‬Sayidina
Persiapan nanti malam: 1. Baca kulgram kemarin malam.
#@mulai_2

Epsi ‫ رزﻗﻲ‬Sayidina 9:31:34 PM

Script, meniru gaya @phpbot nya pak Hasan.

9:32:04 PM

Hasil di telegram client

Ada yang jelas 🏼♂ 🏼? 9:32:44 PM

Aku mau lanjut ke penangan paramater argumen di dalam script.

Sugandi Slamet 9:33:27 PM

Jelas pak

Bie Schopath 9:33:55 PM

Aku izin nambahin kawanku ya mas

Epsi ‫ رزﻗﻲ‬Sayidina 9:34:22 PM

Ini baru setengah materi.

Aku bersedia menyelesaikan malam ini.


Sangat senang malah.

Bilamana perlu diteruskan minggu depan juga gpp.

Namun semua tergantung musyawarah dan pemilik forum


@maeland.

Mohon izin lanjut ya. Malam ini sampai Makefile.

Sugandi Slamet 9:34:22 PM

Bie Schopath
Aku izin nambahin kawanku ya mas
Nambahin apa pak silahkan

Epsi ‫ رزﻗﻲ‬Sayidina 9:34:37 PM

Bie Schopath
Aku izin nambahin kawanku ya mas
Boleee

Di script reply bot terkahir ada tiga hal baru. 9:35:19 PM

[Link] 46/65
1/29/2018 Telegram Web
Sugandi Slamet 9:35:29 PM

Lanjut sampai mwmbuat suatu balasan yg keren. . . Atu kalo


minggu depan bisa save ke database malah asik lagi pak

Khunerable joined the group

Epsi ‫ رزﻗﻲ‬Sayidina 9:35:33 PM

1. Satu: loop

while true; do
...
done

Arya Narotama joined the group

Khunerable 9:35:45 PM

permisi, salam kenal

Asem Bused 9:35:45 PM

Epsi ‫ رزﻗﻲ‬Sayidina
Sekarang, mohon maaf agak panjang, berikut script reply nya…
saya cermati dulu script nya ....

Sugandi Slamet 9:36:08 PM

Khunerable
permisi, salam kenal
Salam knal

Arya Narotama 9:36:21 PM

Hi

Sugandi Slamet 9:37:02 PM

Arya Narotama
Hi
Hi to

Epsi ‫ رزﻗﻲ‬Sayidina 9:37:10 PM

2. Wrapping tiap2 proses dalam fungsi. Dalam fungsi tersebut ada


loop lagi yang melhat tiap2 hasil keluaran JSON.

function parse_reply() {
...
for ((i=0; i<$count_update; i++)); do
...
done
}

Arya Narotama 9:37:30 PM


Hi
Hola Amigo

Khunerable 9:37:42 PM

izin nyimak ya mas.. mau belajar

[Link] 9:37:57 PM

Dwi Zulfikar Fuadi


Photo

walah anak ini mau membuat bot

Asky キラ 9:38:41 PM
tanya memang agak lama pak, bot-nya balas pesan?
kalo mau cepet pasang di web mas , make webhook

Sugandi Slamet 9:38:41 PM

[Link]
walah anak ini mau membuat bot
Wew?? Bapak

Epsi ‫ رزﻗﻲ‬Sayidina 9:39:00 PM

[Link] 47/65
1/29/2018 Telegram Web
3. Tiga

Fungsi feedback

Saat ini hanya bisa handle

a. command: /id (tg://bot_command?command=id)

b. atau pesan lain

function get_feedback_reply()
...
}

Bisa dikembangkan sendiri. Karena sudah ada pola contoh untuk


ditiru.

[Link] 9:39:05 PM

Sugandi Slamet
Wew?? Bapak
iya itu anak saya mas wkwkwk , hasil bayi tabung

Sugandi Slamet 9:39:07 PM

[Link]
kalo mau cepet pasang di web mas , make webhook
Ini ngelibdur g baca dr atas

Epsi ‫ رزﻗﻲ‬Sayidina 9:39:56 PM

Dwi Zulfikar Fuadi


Photo

Terimakasih sudah berpartisipasi.


Senang juga ada yang memberi screenshoot.

Aku terhibur

[Link] 9:40:03 PM

eh wkwk saya fikir biar respon botnya cepet :'v kalo mau respon
bales botnya cepet di pasang di web ,, metode webhook , udah
ah kabur wkwk

Dwi Zulfikar Fuadi 9:41:02 PM

[Link]
walah anak ini mau membuat bot
iya mas, lg belajar sedikit dikit

[Link] 9:41:48 PM

Dwi Zulfikar Fuadi


iya mas, lg belajar sedikit dikit
semangat mas :)

Asky キラ 9:41:52 PM

Epsi ‫ رزﻗﻲ‬Sayidina
Sekarang, mohon maaf agak panjang, berikut script reply nya…
saya coba run script ini koq gk respon ya pak?

Dwi Zulfikar Fuadi 9:42:26 PM

[Link]
semangat mas :)
siap guru

Asky キラ 9:42:32 PM

[Link]
semangat mas :)
bot agen pulsanya mana om?

Epsi ‫ رزﻗﻲ‬Sayidina 9:42:43 PM

[Link]
eh wkwk saya fikir biar respon botnya cepet :'v kalo mau resp…

[Link] 48/65
1/29/2018 Telegram Web
Betul sekali pak webhook.
Mohon maaf saya lupa jelaskan mengenai webhook ini.

Seperti saya bilang sejak kemarin. Da saya ulang lagi di awal.


Tujuan kulgram ini bukan mengenai telegram bot itu sendiri,
namun bagaimana membuat script bash.

Mohon maaf mastah yaaa.


Saya juga masih belajar koq.

[Link] 9:42:45 PM

Asky キラ
bot agen pulsanya mana om?
ada nih wkwkw , masa iya mau di masukin kesini wkwk

Epsi ‫ رزﻗﻲ‬Sayidina 9:43:07 PM


Betul sekali pak webhook. Mohon maaf saya lupa jelaskan me…
saya juga masih belaja kok , sama sama belajar mas hehe

Asky キラ 9:44:13 PM

[Link]
ada nih wkwkw , masa iya mau di masukin kesini wkwk
buat referensi aja om.

Mujibur Rohman joined the group

Hadi Hidayat Hammurabi joined the group

Epsi ‫ رزﻗﻲ‬Sayidina 9:45:11 PM

Akan lebih baik kalau script yang kita bikin ada panduan help nya.
Setidaknya akan tampak lebih berkelas. Seperti contoh ini.

% cd ~/Documents/cupubot/bash

% ./[Link] --version
cupubot v0.001

% ./[Link] --help
usage: cupubot [options]
operations:
general
-v, --version display version information
-h, --help display help information

[Link] 9:45:34 PM
saya juga masih belaja kok , sama sama belajar mas hehe
ya kukasih nama cupu. hihihi 🏼

9:45:45 PM

usage

[Link] 9:45:46 PM

Epsi ‫ رزﻗﻲ‬Sayidina
ya kukasih nama cupu. hihihi 🏼
wahaha siapp masss

Epsi ‫ رزﻗﻲ‬Sayidina 9:48:43 PM

BASH ini sudah matang, namun gaya berpikirnya berbeda dengan


bahasa pemrograman. Ada beberapa konsep yang sedikit susah
dipahami oleh pemula, umumnya adalah variable2 internal,
misalnya IFS dan OPTIND . Namun kalau sudah paham, kita tahu
kalau bash cukup powerful, matang di console.

Malam ini kita akan melakukan parsing argumen dari script,


menggunakan OPTIND .

[Link] 49/65
1/29/2018 Telegram Web

Deki Akbar joined the group

Epsi ‫ رزﻗﻲ‬Sayidina 9:49:52 PM

Kita hanya membutuhkan dua script lagi

[Link]
[Link]

Dan perubahan di script [Link]

Deki Akbar 9:50:12 PM

malem semuanya,,, perknalkan saya anggota baru,,, salam knal


smuanya

Epsi ‫ رزﻗﻲ‬Sayidina 9:50:38 PM

Berikut script utama.

[Link]

#!/usr/bin/env bash

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd


)"

# module: main
. ${DIR}/[Link]
. ${DIR}/[Link]
. ${DIR}/[Link]
. ${DIR}/[Link]

# module: task
. ${DIR}/tasks/[Link]
. ${DIR}/tasks/[Link]

### -- main --

get_options_from_arguments "$@"

Sugandi Slamet 9:51:06 PM

Deki Akbar
malem semuanya,,, perknalkan saya anggota baru,,, salam kn…
Salam kak

Epsi ‫ رزﻗﻲ‬Sayidina 9:51:10 PM

Deki Akbar
malem semuanya,,, perknalkan saya anggota baru,,, salam kn…
Apa kabar mas.. baik2 sajakah si sana ?

Deki Akbar 9:51:43 PM

saya mau nanya nih tentang bash .... baru blajar juga,,,, gimana
caraanya si script bisa basa format kaya gini
./kepo (tg://bot_command?command=kepo) <keyword> dsisilain
dia juga bisa kaya gini ./kepo (tg://bot_command?
command=kepo) -h

Epsi ‫ رزﻗﻲ‬Sayidina 9:52:01 PM


Apa kabar mas.. baik2 sajakah si sana ?
alhamdlilah om hehehe

Epsi ‫ رزﻗﻲ‬Sayidina 9:52:15 PM

Deki Akbar
saya mau nanya nih tentang bash .... baru blajar juga,,,, gima…
Sedang kulgram mas.

Boleh setelah kulgramkah tanyanya ?

Berikut isi scriptnya. Yang ini sangat sederhana. 9:53:10 PM

[Link]

[Link] 50/65
1/29/2018 Telegram Web
#!/usr/bin/env bash

function message_usage() {
cat <<-EOF
usage: cupubot [options]

operations:
general
-v, --version display version information
-h, --help display help information

EOF
}

function message_version() {
local version='v0.001'
echo "cupubot $version"
}

Deki Akbar 9:53:34 PM

script saya

Epsi ‫ رزﻗﻲ‬Sayidina 9:53:49 PM


Sedang kulgram mas. Boleh setelah kulgramkah tanyanya ?
oh iya maaf om gk tau ada kulgram...

maaf... 9:53:53 PM

Sugandi Slamet 9:55:29 PM

Deki Akbar
oh iya maaf om gk tau ada kulgram...
Gpp nanti setelah selesai kak sabar

Saya jg bru blajar 9:55:37 PM

Epsi ‫ رزﻗﻲ‬Sayidina 9:56:12 PM

Lalu script options-nya. Paman mulai dari yang sederhana pula.

[Link]

#!/usr/bin/env bash

function get_options_from_arguments() {
# ! : indirect expansion
while [[ -n "${!OPTIND}" ]]; do
case "${!OPTIND}" in
version)
message_version
exit;;
esac

shift $OPTIND
OPTIND=1
done
}

Ada yang jelas ? 9:56:45 PM

Aku sendiri butuh waktu lama supaya paham .

Deki Akbar 9:57:39 PM


saya mau nanya nih tentang bash .... baru blajar juga,,,, gima…
Sebetulnya ini On Topic banget.

Seperti ada malaikat datang begitu.

[Link] 51/65
1/29/2018 Telegram Web
Deki Akbar 9:57:57 PM
Photo

Screenshot ini sangat cocok untuk tema kulgram saat ini.

Deki Akbar 9:58:59 PM

Epsi ‫ رزﻗﻲ‬Sayidina
Screenshot ini sangat cocok untuk tema kulgram saat ini.
iya dr td siang susah nyari solusi dan barusan nemu grup ini di
github

Epsi ‫ رزﻗﻲ‬Sayidina 9:59:59 PM

Ini keluaran $OPTIND

$OPTIND itu sendiri berisi indeks dari argumen berikutnya. 10:00:58 PM

Nah bingung khan.

${OPTIND} adalah array. 10:03:54 PM

Dalam hal ini argumennya adalah version , indexnya 1 , jadi


argumen berikutnya saat awal adalah 1 .

${!OPTIND} adalah value dari index tersebut, yang berarti


version .

Di akhir loop, terdapat shift , berarti geser array ke berikutnya.


Karena berikutnya ksong, maka loop berhenti.

Kira-kira begitu cara kerjanya.

Ada yang jelas 🏼♂ ?

Sudah pukul 20.00. 10:04:36 PM


Saya bersedia lanjut.

Zifor Syahid 10:04:36 PM

Epsi ‫ رزﻗﻲ‬Sayidina
Berdasarkan tutorial kemarin, paman bikin script ini: #!/usr/…
walah telat jauh ane.. .. #ngebut (tg://search_hashtag?
hashtag=ngebut).. ngeeng

Epsi ‫ رزﻗﻲ‬Sayidina 10:06:13 PM

Lalu bagaimana dengan opsi lain ?

Misalnya

% cupubot version
% cupubot -v
% cupubot --v

Bagaimana ?

Asem Bused 10:06:36 PM

yang mau cuma version pak .

saya duluan ya pak. besok saya ngebut sisanya ..... 10:07:32 PM

Epsi ‫ رزﻗﻲ‬Sayidina 10:07:36 PM

Kebetulan saya sudah bikin kerangkanya.

[Link]

[Link] 52/65
1/29/2018 Telegram Web
#!/usr/bin/env bash

# handling command
function handle_command_plain() {
local command=$1

case "$command" in
version)
message_version
exit;;
esac
}

# handling -command
function handle_command_opt() {
local command=$1

case "$command" in
-)
handle_command_optarg "$OPTARG"
;;
h)
message_usage
exit;;
v)
message_version
exit;;
*)
# Invalid Option
message_usage
exit;;
esac
}

# handling --command
function handle_command_optarg() {
local command=$1

case "$command" in
version)
message_version
exit;;
help)
message_usage
exit;;
observe)
do_observe
exit;;
reply)
loop_reply
exit;;
*)
# Invalid Option
message_usage
exit;;
esac
}

function get_options_from_arguments() {
# get argument length
[[ $# -eq "0" ]] && message_usage && exit;

# ! : indirect expansion
while [[ -n "${!OPTIND}" ]]; do
handle_command_plain "${!OPTIND}"

while getopts "vh-:" OPT; do


handle_command_opt "$OPT"
done

shift $OPTIND
OPTIND=1
done

# Invalid Option
message_usage

[Link] 53/65
1/29/2018 Telegram Web
exit
}

Berhubung waktu terbatas. 10:08:35 PM

Saya beri bacaan saja.

# reading
# [Link]
([Link]

Dari script di atas, mestinya dapat dikembangka sendiri.

Kita lanjut ke Makefile

Deki Akbar 10:09:07 PM


saya mau nanya nih tentang bash .... baru blajar juga,,,, gim…
Apakah pertanyaanya sudah terjawab sekarang

? 10:09:39 PM

Paman terangkan sebentar 10:10:11 PM

Yang perlu kita ketahui adalah 10:11:12 PM

while [[ -n "${!OPTIND}" ]]; do


...
shift $OPTIND
OPTIND=1
done

Ada yang jelas 🏼♂ ?

% man optind 10:11:30 PM

[Link] 10:11:45 PM
optind-variable-work-in-the-shell-builtin-getopts
([Link]
optind-variable-work-in-the-shell-builtin-getopts)

([Link]
the-optind-variable-work-in-the-shell-builtin-getopts)
Stackoverflow
How does the OPTIND variable work in the shell builtin
getopts
([Link]
does-the-optind-variable-work-in-the-shell-builtin-
getopts)
My shell script is quite simple, as the following:

while getopts "abc:" flag; do


echo "$flag" $OPTIND $OPTARG
done
And I do some testin...

Lalu ini juga perlu kita ketahui. 10:12:21 PM

while getopts "vh-:" OPT; do


case "$OPT" in
...
esac
done

Asky キラ 10:13:56 PM

makin dalam makin cenat cenut.

Epsi ‫ رزﻗﻲ‬Sayidina 10:14:39 PM

getopts mencari argumen yang diawali dengan tanda - .

[Link] 54/65
1/29/2018 Telegram Web
Dengan adanya vh-: artinya ada tiga argumen yang dapat
diterima yaitu:

-v
-h
--opsi

Tanda : berarti ada opsi tambahan. Oleh karena itu ada pilihan
ini.

--opsi

Asky キラ 10:14:54 PM
makin dalam makin cenat cenut.
Sebentar lagi selesai. Sabar kang.

Deki Akbar 10:15:34 PM

Epsi ‫ رزﻗﻲ‬Sayidina
Sebentar lagi selesai. Sabar kang.

Epsi ‫ رزﻗﻲ‬Sayidina 10:16:09 PM

Lalu ada fungsi ini untuk mengurus --opsi

# handling --command
function handle_command_optarg() {
local command=$1

case "$command" in
version)
message_version
exit;;
help)
message_usage
exit;;
observe)
do_observe
exit;;
reply)
loop_reply
exit;;
*)
# Invalid Option
message_usage
exit;;
esac
}

Jadilah kita punya pilihan argumen 10:16:53 PM

--version
--help
--observe
--reply

Kalau digabung semua, maka pilihan argumen yang diterima dari 10:18:38 PM
script adalah

% cupubot-bash version
% cupubot-bash -v
% cupubot-bash -h
% cupubot-bash --version
% cupubot-bash --help
% cupubot-bash --observe
% cupubot-bash --reply

Ada yang jelas 🏼♂ ?

On Topic sekali dengan pertanyaan kang @DekiAkbar 10:19:27 PM

Boleh lanjut Makefile kah ? 10:19:55 PM

[Link] 55/65
1/29/2018 Telegram Web
Sudah selesai bagian penanganan parameter argument di script. 10:20:25 PM

Deki Akbar 10:20:39 PM

lanjut

Epsi ‫ رزﻗﻲ‬Sayidina 10:21:14 PM

Deki Akbar
lanjut
Terimakasih, semoga sudah dapat dibaca polanya.

Biasanya Makefile digunakan untuk kompilasi program bahasa C 10:25:06 PM


dan cukup horror bagi pemula.

Namun sebetulnya sangat sederhana.

Bahkan kita bisa uji coba Makefile, untuk deploy script yang kita
bikin ke dalam OS. Jadinya script kita dapat dipanggil secara
system wide .

Tetunya lebih nyaman memanggil dari path mana saja sebai


berikut:

% cupubot --help

Dibandingkan haru bolak-balik baca path.

% ~/Documents/cupubot/bash/[Link] --help

Untuk sebetulnya yag kita perlukan adalah meng-copy berkas ke 10:26:22 PM


/usr/local/bin secara otomatis.

Jadi ada source berkas file. 10:27:22 PM


Dan ada path, destination tempat file akan diletakkan.

Sekarang mari kita lihat source-nya dahulu. 10:27:51 PM

% ls
Makefile cupubot-bash modular-tutorial
[Link] [Link] [Link]
[Link] [Link] tasks

10:28:12 PM

Perhatikan ada drectory task yang isinya: 10:29:18 PM

% ls -l ./tasks/*
-rw-r--r-- 1 epsi users 3530 Jan 28 08:35 ./tasks/l
ogger_html.bash
-rw-r--r-- 1 epsi users 2029 Jan 28 08:41 ./tasks/l
ogger_text.bash
-rw-r--r-- 1 epsi users 2018 Jan 28 12:45 ./tasks/n
ew_member.bash
-rw-r--r-- 1 epsi users 325 Jan 28 07:52 ./tasks/o
[Link]
-rw-r--r-- 1 epsi users 1839 Jan 28 08:14 ./tasks/r
[Link]

Atau begini lebih jelasnya 10:29:45 PM

ls ./tasks/*
./tasks/logger_html.bash ./tasks/[Link]
./tasks/logger_text.bash ./tasks/[Link]
./tasks/new_member.bash

Di situ ada berkas baru selain [Link] yaitu cupubot-bash 10:32:08 PM


yang isinya sebagaimana berikut:

[Link] 56/65
1/29/2018 Telegram Web

cupubot-bash

#!/usr/bin/env bash
# redirect script to library

DIR=$(dirname "$0")
DIR=${DIR}/../lib/cupubot
. ${DIR}/[Link]

cupubot-bash inilah satu2nya berkas yang diletakkan ke


/usr/local/bin . Sisanya ke /usr/local/lib .

maland pinned « Selamat malam tem… »

Epsi ‫ رزﻗﻲ‬Sayidina 10:32:52 PM

Langsung saja kita bikin Makefile

Makefile

PREFIX ?= /usr/local
bindir = $(PREFIX)/bin
libdir = $(PREFIX)/lib

Itu baru awalnya. 10:33:48 PM

Kita perlu mendefiniskan arah dan tujuan.

/usr/local/bin: cupubot-bash

/usr/local/lib: *.bash

Makefile cukup jelas. 10:34:42 PM

Baris ini tidak perlu dterangkan lebih lanjut.

install:
@echo "Installing..."

# Scripts
@install -D -m755 ./cupubot-bash $(DESTDIR)$(bind
ir)/cupubot-bash

# Libs
@mkdir -p $(DESTDIR)$(libdir)/cupubot/tasks
@install -D -m644 ./*.bash $(DESTDIR)$(libdir)/cu
pubot
@install -D -m644 ./tasks/*.bash $(DESTDIR)$(libd
ir)/cupubot/tasks

Menjalankan perlu pakai sudo 10:35:26 PM

% sudo make install


Password:
Installing...
# Scripts
# Libs

10:35:57 PM

`% sudo make install`

Sekarang mari kita lihat hasilnya di /usr/local . 10:36:48 PM

[Link] 57/65
1/29/2018 Telegram Web
% ls /usr/local/bin/cupu* /usr/local/lib/cupubot/*
/usr/local/bin/cupubot-bash
/usr/local/lib/cupubot/[Link]
/usr/local/lib/cupubot/[Link]
/usr/local/lib/cupubot/[Link]
/usr/local/lib/cupubot/[Link]
/usr/local/lib/cupubot/[Link]

/usr/local/lib/cupubot/tasks:
logger_html.bash new_member.bash [Link]
logger_text.bash [Link]

10:37:10 PM

Begitu pula uninstall , lebih pendek scriptnya. 10:37:48 PM

Makefile

uninstall: 10:37:56 PM
@echo "Uninstalling..."

# Scripts
@rm $(DESTDIR)$(bindir)/cupubot (tg://bot_command?
command=cupubot)-bash

# Libs
@rm -r $(DESTDIR)$(libdir)/cupubot (tg://bot_command?
command=cupubot)
`

Kita jalankan, seperti biasa. 10:38:30 PM

% sudo make uninstall


Uninstalling...
# Scripts
# Libs

10:38:38 PM

Saat ini, setelah make install , script kita sudah dapat dipanggil 10:39:44 PM
dari mana saja.

% cupubot-bash --help
usage: cupubot [options]
operations:
general
-v, --version display version information
-h, --help display help information

10:40:03 PM

Yang perlu diperhatikan adalah di main bash yaitu perubahan 10:42:13 PM


dari

DIR=$(dirname "$0")

ke

[Link] 58/65
1/29/2018 Telegram Web
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pw
d )"

Karena script utama ada di /usr/local/bin , maka harus cd


dahulu, untuk mendpatakan lokasi /usr/local/lib .

Demikian kulgramnya sudah selesai. 10:44:52 PM

Masih ada beberapa materi, speeti menyapa anggota baru di


group diskus telegram, lalu text logger dan html logger.

Sebaiknya dilanjutkan lain waktu bersama topik lanjutan, yaitu


porting dari BASH ke ZSH, dan juga ke FISH. Yang aterinya
belum sempat kubikin.

Jadi kita bertemu lagi dalam kondisi kepala yang lebih fresh.

Bagaimana pak admin @maeland ? 10:45:43 PM

Apakah boleh ditutup, lalu dilanjutkan sesi tanya jawab 🏼♂


?

Sugandi Slamet 10:47:51 PM

Epsi ‫ رزﻗﻲ‬Sayidina
Photo

boleh tanya ini terminal apa ya kok keren ada bahasa jepangnya
Ichi ni san go dll

[Link] 10:48:10 PM

Epsi ‫ رزﻗﻲ‬Sayidina
Demikian kulgramnya sudah selesai. Masih ada beberapa ma…
Terimakasih mas atas ilmu yang telah diberikan, sukses terus ya

Epsi ‫ رزﻗﻲ‬Sayidina 10:48:21 PM

Sugandi Slamet
boleh tanya ini terminal apa ya kok keren ada bahasa jepang…
Itu hanya lemonbar kang.

[Link] 10:48:31 PM
Terimakasih mas atas ilmu yang telah diberikan, sukses terus…
Sama-sama.

Deki Akbar 10:48:47 PM

Epsi ‫ رزﻗﻲ‬Sayidina
Bagaimana pak admin @maeland ? Apakah boleh ditutup…
makasih kang membantu banget, skrg boleh saya bertanya?

Epsi ‫ رزﻗﻲ‬Sayidina 10:50:05 PM

Dengan demikian paman tutup sesi kulgram hari ini, pada pukul
22.50. Lalu forum saya kembalikan ke admin @maeland.

Dan lanjut sesi tanya jawab.

Terimakasih sebesar-besarnya atas kehadiran semua partisipan


yang membuat kulgram lebih interaktif.

Deki Akbar 10:50:13 PM


makasih kang membantu banget, skrg boleh saya bertanya?
Boleeee

Zifor Syahid edited 10:50:17 PM

Asem Bused
kalo setauku ./[Link] itu seperti exec [Link] jadi ngekse…
ikutan njawab ini.. sama sih pake setahu ane aja

./ itu untuk memastikan file executable berada adalah


pada folder aktif alias dimana kita berada

misal [Link] udah di jadikan executable

[Link] 59/65
1/29/2018 Telegram Web
tanpa ./ coba di jalankan, hasilnya adalah command not
found karena file executablenya nggak di folder /bin
(tg://bot_command?command=bin) atau /usr/bin

tapi kalo kita tulis langsung pathnya, misal aja kalo di ane
/home/ghost/tools/ziefbot/[Link]

maka file tereksekusi.


tapi kan nyebelin kalo harus nulis pathnya juga kalo cuma
eksekusi satu file

semoga manfaat

Epsi ‫ رزﻗﻲ‬Sayidina 10:52:14 PM

Deki Akbar
Photo

Ini kah ?

Harr edited 10:52:28 PM

Epsi ‫ رزﻗﻲ‬Sayidina
Dengan demikian paman tutup sesi kulgram hari ini, pa…
Josss.. Sepertinya bukan @maeland pak, tapi @emaland..
Jadi gak keluar" deh beliaunya

Epsi ‫ رزﻗﻲ‬Sayidina 10:53:02 PM

Harr
Josss.. Sepertinya bukan @maeland pak, tapi @emaland.. Ja…
Maaf... ini kibord, yang bukan peganganku.. aku kurang teliti

maland admin 10:53:19 PM

silahkan jika ada tanya jawab bisa dilanjutkan dan untuk log
akan dibikin dan kalian bisa membacanya lagijika ada yang
ketinggalan terimakasih

Deki Akbar 10:53:33 PM

Epsi ‫ رزﻗﻲ‬Sayidina
Boleeee
untuk ./myscript (tg://bot_command?command=myscript) —
help atau ./myscript (tg://bot_command?command=myscript) -h
kan bisa pakai getopts ya,,, nah kalo saya mau juga script saya
jalan bila di kasih perintah ./myscript (tg://bot_command?
command=myscript) keyword,,,,nah dalam hal ini keyword itu
bisa berubah ubah,,,

Epsi ‫ رزﻗﻲ‬Sayidina 10:54:07 PM

Deki Akbar
untuk ./myscript —help atau ./myscript -h kan bisa pakai get…
${OPTIND}

Deki Akbar 10:54:26 PM


untuk ./myscript —help atau ./myscript -h kan bisa pakai get…
`

# handling command 10:54:30 PM


function handle_command_plain() {
local command=$1

case "$command" in
version)
message_version
exit;;
esac
}
`

maland 10:55:07 PM
silahkan jika ada tanya jawab bisa dilanjutkan dan untuk log …
Terimakasih um @emaland atas kesempatan yang
membahagikan untuk membawa kulgram ini.

Yuhuuu

[Link] 60/65
1/29/2018 Telegram Web
Deki Akbar 10:55:31 PM

Epsi ‫ رزﻗﻲ‬Sayidina
# handling command function handle_command_plain() { lo…
ini untuk handling verion kan kang?

Epsi ‫ رزﻗﻲ‬Sayidina 10:56:26 PM

Deki Akbar
untuk ./myscript —help atau ./myscript -h kan bisa pakai get…
Sebetulnya vcontoh ini untuk handling version.

Namun bisa sesuai kekreatifan kita, text dalam variable bisa apa
saja.

Duh.. kibord ku koq... sourcenya hilang lagi. 10:56:51 PM

# handling command 10:56:59 PM


function handle_command_plain() {
local command=$1

case "$command" in
version)
message_version
exit;;
esac
}

function get_options_from_arguments() { 10:57:27 PM


# get argument length
[[ $# -eq "0" ]] && message_usage && exit;

# ! : indirect expansion
while [[ -n "${!OPTIND}" ]]; do
handle_command_plain "${!OPTIND}"

while getopts "vh-:" OPT; do


handle_command_opt "$OPT"
done

shift $OPTIND
OPTIND=1
done

# Invalid Option
message_usage
exit
}

Deki Akbar 10:58:11 PM


ini untuk handling verion kan kang?
Mainkan di $command yang ada di dalam fungsi
handle_command_plain() .

Deki Akbar 11:02:01 PM

sebentar om saya coba dulu

hehe 11:02:05 PM

Epsi ‫ رزﻗﻲ‬Sayidina 11:03:12 PM

Deki Akbar
sebentar om saya coba dulu
[Link]
rns/cupubot/blob/master/loop/bash/[Link]
([Link]
rns/cupubot/blob/master/loop/bash/[Link])

([Link]

rns/cupubot/blob/master/loop/bash/[Link])
GitHub
epsi-rns/cupubot ([Link]
rns/cupubot/blob/master/loop/bash/[Link])
cupubot - Cupubot is a telegram bot for learning purpose, or
lame people.

[Link] 61/65
1/29/2018 Telegram Web

Sugandi Slamet 11:06:29 PM


boleh tanya ini terminal apa ya kok keren ada bahasa jepang…
Jumat lalu sudah ada kulgram lemonbar di @dotfiles_id,
diunduh saja kang log PDF nya .

Sugandi Slamet 11:13:12 PM

terimakasih atas kulgramnya paman

Epsi ‫ رزﻗﻲ‬Sayidina 11:13:31 PM

Sugandi Slamet
terimakasih atas kulgramnya paman
Sama-sama

Sugandi Slamet 11:13:39 PM

Epsi ‫ رزﻗﻲ‬Sayidina
Jumat lalu sudah ada kulgram lemonbar di @dotfiles_id, diun…
iya pak terimakasih pak nanti saya coba lemonbar

Epsi ‫ رزﻗﻲ‬Sayidina 11:14:08 PM

Tadi aku lupa source dari seluruh Makefile.

##
# cupubot-bash
# Cupubot is a Telegram bot. Just another learning
project
##

PREFIX ?= /usr/local
bindir = $(PREFIX)/bin
libdir = $(PREFIX)/lib

# default target
all: doc

doc:
@echo "Nothing to do..."

# auxiliary
install:
@echo "Installing..."
# Scripts
@install -D -m755 ./cupubot-bash $(DESTDIR)$(bind
ir)/cupubot-bash
# Libs
@mkdir -p $(DESTDIR)$(libdir)/cupubot/tasks
@install -D -m644 ./*.bash $(DESTDIR)$(libdir)/cu
pubot
@install -D -m644 ./tasks/*.bash $(DESTDIR)$(libd
ir)/cupubot/tasks

uninstall:
@echo "Uninstalling..."
# Scripts
@rm $(DESTDIR)$(bindir)/cupubot-bash
# Libs
@rm -r $(DESTDIR)$(libdir)/cupubot

clean:
@echo "Cleaning..."

.PHONY: install uninstall clean

Sugandi Slamet 11:14:35 PM


terimakasih atas kulgramnya paman
Aku yang terimakasih, jadi lebih hidup kulgramnya.

Sugandi Slamet 11:15:14 PM

ok sekarang tinggal praktek tadi bru refresing sama keluarga...


skrang udah di hadapan leptop...
saya coba dulu ya pak nanti kalo ada yang di tanyakan bolehkah
bertanya :D

[Link] 62/65
1/29/2018 Telegram Web
Epsi ‫ رزﻗﻲ‬Sayidina 11:15:34 PM

Sugandi Slamet
ok sekarang tinggal praktek tadi bru refresing sama keluarga…
Bolehlah.

Zifor Syahid 11:20:34 PM

makasih om.. dari dulu bingung mo nambahin argumen di


bash kek gimana wkwkkw

dikampus nggak diajarin bikin script pake argumen #eh 11:21:06 PM


(tg://search_hashtag?hashtag=eh)

Epsi ‫ رزﻗﻲ‬Sayidina 11:22:43 PM

GIF

Zifor Syahid 11:23:45 PM


makasih om.. dari dulu bingung mo nambahin argumen di b
Ada lagi yang bikin bingung, yaitu:

IFS

Namun kalau sudah ada contoh ya jelas juga koq.

Asky キラ 11:35:53 PM

badass... rasanya kyk lagi bikin file exe.

Monday, January 29, 2018

Epsi ‫ رزﻗﻲ‬Sayidina 1:00:13 AM

Asky キラ
badass... rasanya kyk lagi bikin file exe.
Kalau mau lengkap bisa tambah

1. man file, multi language


2. bash/zsh completion
3. ... silahkan tambah lagi kalau ada gagasan.

Riki Candra joined the group

Hadi Hidayat Hammurabi 2:10:37 AM

Ada web framework buat shell gak ya? Keren juga nih

Epsi ‫ رزﻗﻲ‬Sayidina 3:24:51 AM

Hadi Hidayat Hammurabi


Ada web framework buat shell gak ya? Keren juga nih
Mending main bahasa yang lain aja kali yaks.

Hadi Hidayat Hammurabi 3:28:29 AM


Ada web framework buat shell gak ya? Keren juga nih
Ada yang bikin di github.

Ada yang mau bahas sysvinit ? 3:29:19 AM

Pakai bash semua tuh .

Praktikumnya pakai docker. 3:33:55 AM

Jadi semua bisa tahu ini model lama isinya bash semua.

Init 3:34:03 AM

Epsi ‫ رزﻗﻲ‬Sayidina

[Link] 63/65
1/29/2018 Telegram Web
Epsi ‫ رزﻗﻲ‬Sayidina 4:02:42 AM
Kalau mau lengkap bisa tambah 1. man file, multi language 2.…
4. Daemonize dengan init.

Mr Hc joined the group

Mr Hc 8:20:05 AM

Asalmualaikum

8:20:08 AM

M. R joined the group

Epsi ‫ رزﻗﻲ‬Sayidina 8:22:37 AM

Mr Hc
Asalmualaikum
As-salāmu 'alaykum ‫اﻟﺴﻼم ﻋﻠﯿﻜﻢ‬

Mr Hc 8:23:07 AM

Mohon bimbingan bang

8:23:17 AM

Epsi ‫ رزﻗﻲ‬Sayidina 8:24:04 AM

Mr Hc
Mohon bimbingan bang
Scroll saja tiga hari terakhir. Ada dua materi.

Mr Hc 8:24:51 AM

Siap bang ini lg panjat jempol

Hehheh 8:24:52 AM

8:24:55 AM

dhang gara 9:24:14 AM

Mr Hc
Siap bang ini lg panjat jempol
hati2, bisa panas meski nggak ada api.

Yusuf Calvin joined the group

Yusuf Calvin 10:06:51 AM

assalamualaikum

salken 10:06:55 AM

Ramdan Nurul joined the group

Makmurriansyah Donii joined the group

Riyan Maulana joined the group

Anak Kambing joined the group

[Link] 64/65
1/29/2018 Telegram Web
Abdul Djalil Djayali 1:41:15 PM

Wa'alaikum salaam bang

Hari Prasetia 1:45:07 PM

ya

Rizqi Maulana joined the group

Rizqi Maulana 2:09:02 PM


RM
assalammualaikum

Sugandi Slamet 4:34:07 PM

halo paman

saya coba yang terakhir bikin Makefile kok error 4:34:20 PM

knp ya paman 4:34:26 PM

ndak jadi udah bisa hahah :D 4:35:28 PM

Hendra 4:44:49 PM

permisi om edo @emaland ,


untuk kulgram sebelumnya membuat bot apakah sudah ada yang
membuat log nya
gak sempet ikut , penyakit tgl tua

Pada Suatu Hari 5:29:56 PM

Wa'alaikum salam..

[Link] 5:34:55 PM

Rizqi Maulana
assalammualaikum
walaikum salam stah

Ilham Wicaksono 6:46:47 PM

pro

6:46:52 PM

Dark Network ID joined the group

[Link] 65/65

Anda mungkin juga menyukai