6 minutes reading time
Hôm nay là ngày 3/9, là một ngày nghỉ, vì sáng nay dậy trời sáng quá, hay là lúc gần trưa trời có mưa hay gì đấy, đại khái là vì cảm thấy thời tiết không ủng hộ nên mình nghỉ thêm 3/9. Nên viết văn nhảm.
Sooo, Hôm nay chúng ta sẽ làm một con Bot Telegram đúng chuẩn khung xương, không cần đọc quá nhiều tài liệu bên lề đâu các bạn nhỏ.
Đây không toàn toàn tính là một project, nó chỉ là một bài test của mình vào việc tích hơp Telegram vào hệ thống công ty. Thật ra thì về cơ bản hệ thống hoàn toàn có thể tích hợp thành công nếu sửa đổi đôi chút.
Các phần chính sẽ như sau:
Như chúng ta đã biết hiện nay Telegram là một nền tảng chat rất được ưa chuộng trong cộng đồng công nghệ, vì chuyện bảo mật (có thể), khả năng tùy biến cao cũng như không giới hạn của nó. Tại đây chúng ta sẽ làm một con bot hay cơ bản gọi là tương tác API với Telegram. Các phần cần lưu ý:
Bot telegram được tạo bằng việc tương tác với @BotFather trong telegram. Ừ search google đi. Cố lên
Tạo xong chúng ta sẽ lấy được token của bot. Còn không tạo được thì bạn nhỏ nên về trồng cá và nuôi thêm rau đi.
Như đã nói lòi bản họng ở trên chúng ta có 2 cơ chế Update và Webhook. Nhưng vì lười nên mình nói Update thôi.
Tương tác với Bot chúng ta cơ bản là tương tác với server chứa bot (dĩ nhiên), vai trò của code chúng ta viết coi như là cung cấp thêm tầng business cho bot để tùy biến nó theo yêu cầu của bản thân. Nói cách khác bạn chỉ là một mắt xích trong hệ thống, bỏ đi cũng không sao, nó vô dụng hệt như cuộc đời của bạn vậy.
Rồi vào đề:
I, Việc đầu tiên để kiểm tra và lấy dữ liệu của một con bot chúng ta cần phải thử kết nối và nhận token của nó. Phương pháp là sử dụng brower hoặc dễ hơn thì dùng postman để check get dữ liệu mới.
Url sẽ là : https://api.telegram.org/bot Và nếu trình bạn không quá gà chỉ cần cỡ búa đôi thôi thì kết quả nó sẽ thế này. Đấy. Chúng ta đã lấy được dữ liệu rồi.. II, Lấy được rồi thế gửi thì sao. Đơn giản Url : https://api.telegram.org/bot CHAT_ID lấy từ getUpdates ý các bạn nhỏ ạ. Trong bài này mình dùng Python, không phải vì mình thuộc Slytherin mà vì nó deploy dễ, viết nhanh, đơn giản. Về ý tưởng code thì con bot này do cơ chế là update lên sẽ liên tục check update_id của bot. Nếu update_id thay đổi có nghĩa là dữ liệu mới.. dĩ nhiên Def nhẹ con fuc lấy thông tin lần update cuối. Tất nhiên là con bot có nhỏ sao thì tác vụ của nó ở đây cần thiết phải có DB. Tất nhiên vì nó nhỏ nên mình dùng luôn TinyDB. Ây khoan đã, sao mình phải phân tích sạch code nhở, ngắn vãi ra ý. thôi code đây copy đi rồi phân tích. **** Lưu ý:
#IV, Vào code nào. Vì lười nên mình sẽ nói sơ sơ qua thôi nhá. Vì tới đây nó clear lắm rồi.
#func get update
=
=
=
= -1
return #get last record
# PSObotAttendance
=
=
=
#db insert
#db insert group
#search db response json
=
return
#search db response json
=
return
#update_db
#get chat bot current chat id
#get group chat id
=
return
#get id
=
return
#get group chat title
=
return
#get chat current text
=
=
return
#func get update
=
=
=
= -1
return #get last record
#fuc lest bot send mess
=
=
return
#fuc get time messager
=
=
return
#fuc get name
=
=
=
=
= ++
return
#fuc scv
=
+=
#main func chat
= #get last update def update id
= #check if last update
#wait for new update
=
= 0 # state = 0 - not working / state = 1 - working
#state = search(current_user_id)[0]
=
=
=
=
=
=
#scv_append(group,fields)
=
=
=
#fields = [name, time, 'checkout']
#scv_append(group, fields)
+= 1 #wait for new update
/sw-load.js?v=e5ae5a1ed170f4499ac6292e7164b68528c51f6d6518cd75a49e6a6b737831d5728da21fc14dcbc7a91328e53858c6ff7195cc3fc8b25f0feeaef2af151d6686 /fireball.gif?v=569e393374f2af74d6c575090904aaf51e641e5eb5ea89ae7c7de01f7293abc165b3a7e8685690a8b951c778603fec98ae6822ff2f7ea86a536776966cb65d5d /favicon.ico?v=1a6495bbd14c74c75aa77e28420ce82a63372b28cd38c952b98403d8d112a9f76589bea299982ca27048215e661245f9d07294bddee7da377aaee76eee70c622 /favicon-16x16.png?v=7267c6f502a03c1e4df9d8136dcc6cd9e67e0b9644941d22ed34e4fe747580f95a65f77a183bb967c1ec60eecd0c298b2670d89a67a647391fb7d1501bcf0982 /favicon-32x32.png?v=5e23bffe691055b88067cbc8d11b96ce2a8dc5e25e49367803766a3cadbcfc7f05a62079bfa558d5e234c6a7455d21fc2960b196bda5cbd591bd4c2dbe67920d /icon-192x192.png?v=3820c1b1e6d755d2b7c2a04a65f0f1feef793b297f7ee995947137ccd8f73ec304457f6ce1df987a9a0a13ed7dacd203225505b832ccd2318b530ae53a55cebc /icon-512x512.png?v=de62ae905479fd813300d286ed1d2fe6bb6f6292623a5d918691642f6dd09a68943c69ed2a95a1820076919e69ff4fda668bb79e610ebc1d3200fedd7f634443 /apple-touch-icon.png?v=4718a090c66653794b3622234784e821a504ee526b6518f20cd10f6b27907566690892339830ede2ef9cb5fedb8a9796f02fb2610de868500c0720c1083013b7 /main.css?v=deafe9327da907780e2167b0c4b65cbafc26273324db10789fa06d4d9c2afced3cf2b5cb42a280190f42fc741f8a9c49bc830f0deb686be6acf12c3b0dbea86e /nerd-fonts.css?v=4b2ec75c55a664da78189dc20d4017cf5bc817cf3b60218a2446ba269ca4fd42c117352d5276363965f35fae32891efce751e0626b5281bae627f40d804a5679 /unstyle.css?v=b14bd48a2efbd463d973763aa3184c69aa02164c0891acacc9eab49ddd275f98f0050b4c31d2093e4671e7abe04f9459a041f0064384a90d97b8ff21b6824825 /langs.css?v=12474958ee314a9fde4704e1f5a032dc632d41f9461faca326ac284297766c4ceb07b45fec7fbc09fa72b0f21dcc64f0c31e64fc2e5e838b1d30f5fe540afd78 /syntax-theme-light.css?v=ccdddc2d2d88953c6d7d0376777b8409028ef625a7321dfa41619547b4f5eddbe89aa95ff5e7e2620da0ea13fbabebe2fd544620bc7e81e3294776b3425df48a /syntax-theme-dark.css?v=dfede4879841e4a58e5fc71115aa5f5b82e206d85eb771ff4e5a40a1d82621570aad2458f637365ae4370d9a1cf5070edc9765f7c2d4506e12e2ba3c6081ffd5 /sw-style.css?v=a0fa1e87fa2bb3e03d18cefc81ef5c8cfa58c6aa6eea0af223fa155e088bc5af22d32d3ee785ebd3fc26b4c49b70f0bd423f7d592a419a24e6d1e2cb720b7e05 /posts/page/2/ /posts/page/3/ /categories/ /categories/IT/ /categories/LIFE/ /tags/ /tags/Linux/ /tags/aircontrol/ /tags/cloud/ /tags/docker/ /tags/embedded/ /tags/git/ /tags/homelab/ /tags/kubernetes/ /tags/life/ /tags/oracle/ /tags/project/ /tags/review/ /tags/story/ /tags/system/ /tags/telegram/ /tags/zimaboard/ /posts/linuxstarter1/ /posts/review1/ /posts/iotproj1/ /posts/k8s1/ /posts/married/ /posts/terraform1/ /posts/cloud1/ /posts/dockeradv3/ /posts/dockeradv2/ /posts/dockeradv1/ /posts/homelab1/ /posts/git3/ /posts/embed1/ /posts/docker5/ /posts/itstory3/ /posts/docker4/ /posts/docker3/ /posts/docker2/ /posts/docker1/ /posts/telegrambot1/ /posts/git2/ /posts/git1/ /posts/itstory2/ /posts/virtualization1/ /posts/itstory1/ /whoami/ /posts/ trennui.jpg?v=d00c279cd8f340368f795c33d98a0541f5c39d1c19792ff6b863c6eec96ae1bb4795ea66ebeed5be73c5e2eb40ff3b5a57ea8ba359a173e9c485adf40806a728 caykhotrennui.jpg?v=69fe39128884c96777dc0e2b1b820246a84ec584ba62a7e1eee0c0bd3817f722e4397dbcc85078ffae08da3f4d7094bb66d650a3d67d2e300cf1a06ab18f0848 caytrennui.jpg?v=d27dddf71903dd4a733902097d3cb7ba3d72fd3f8a0ed1728549ae93fecb861d521f5c1bb9087c472e6af8563eacdec484d2c0a8f08f0c2225d1fffa2e8d6329 /icon-192x192.png?v=3820c1b1e6d755d2b7c2a04a65f0f1feef793b297f7ee995947137ccd8f73ec304457f6ce1df987a9a0a13ed7dacd203225505b832ccd2318b530ae53a55cebc /glitch.css?v=0b9b7f8691385df5b832251e9cf4c56d68cbcfc98c6e4c27e015f6fb29d2f0c18c358c98c0e7e0a1da9f263d6b355b811e49aac099b70889090912a5040f754a /sitemap.xml /search_index.en.json /search.js /elasticlunr.min.js?v=b9be63b71422cbfde9f14310b397d9a7092f2946bffec11811a831398ace978c1c592e9a578f1fa32041e6c0dde68657fe58d3c30b0eaa758c63c5fd45117336">