Ketika saya menulis bot untuk sekolah d / z dan mengubah database

Halo, warga negara Khabrovsk!
Hari ini saya akan mencoba memberi tahu Anda bagaimana seorang siswa dapat menulis bot untuk menyimpan pekerjaan rumah untuk VK.
Perhatian
Saya akan segera menarik perhatian pada kenyataan bahwa untuk proyek-proyek serius tidak mungkin untuk membangun infrastruktur seperti ini , seluruh proyek ini dibuat hanya untuk hiburan dan penghancuran waktu, dan untuk presentasi di semua jenis konferensi proyek sekolah.

Komentar
11/17/2019 15:55
Mereka menulis kepada saya dalam pesan pribadi bahwa di seluruh artikel itu tidak terlalu jelas apa pekerjaan rumah yang mereka bicarakan.
Saya akan segera mengklarifikasi bahwa semua tugas yang saya bicarakan dalam artikel diisi seperti dalam buku harian biasa, dan tugas-tugas lama "menghilang".
Ini adalah bagaimana pengguna menerima tugas-tugas yang harus dia lakukan.


Bot ditulis dalam PHP, dan demi percobaan saya memutuskan untuk menerima pembaruan tidak menggunakan webhooks CallBack API, tetapi menggunakan LongPoll.

Karena fakta bahwa saya tidak pernah menulis bot menggunakan metode ini untuk menerima pembaruan, saya tersiksa oleh keraguan samar-samar tentang apakah saya bisa menulis bot ini dalam PHP, tetapi pada akhirnya semuanya berhasil. Sekarang saya akan beralih ke bagaimana ide saya muncul dan bagaimana saya menerapkannya.

Yang pertama, secara umum, adalah ide untuk menulis bot untuk menyimpan pekerjaan rumah di dalamnya. Nah, bagaimana cara menyimpannya. Sesuatu seperti catatan, tetapi di dalam VK, karena saya jarang masuk ke catatan, dan itu tidak nyaman bagi saya.

Untuk menerapkan bot dangkal dengan pekerjaan rumah, saya membuat satu tabel dalam database, di mana nama item, pekerjaan rumah itu sendiri dan jumlah semua kebahagiaan ini ditetapkan. Ini tidak terlalu menarik untuk dijelaskan, jadi saya akan menghilangkan poin ini, tetapi saya akan memberikan diagram ER yang kuat tentang bagaimana database terlihat di awal.

gambar

Lalu saya berpikir, mengapa tidak memberi orang lain kesempatan untuk menggunakan bot. Yah, dia memberi orang kesempatan ini. Saya mengubah database sedikit, tetapi tabel di mana semua ini berputar hampir tidak berubah.

gambar

Dari bagan ER, Anda dapat memahami bahwa setiap pengguna milik grup. Pintu masuk ke grup yang ada dilakukan oleh token, dan untuk setiap yang baru dihasilkan token yang unik. Dan tugas itu sendiri juga milik satu atau kelompok lain, sehingga pengguna tidak melihat kekacauan dari tugas mereka dan orang lain.

Saya menambahkan kode, tidak ada yang menarik di sini, pada prinsipnya, tidak. Saya baru saja membuatnya sehingga tugas-tugas lama tidak akan muncul, agar tidak menghapus semuanya secara manual, tetapi, saya pikir, menulis kueri SELECT dalam SQL cukup sederhana.

Dan sekarang saatnya untuk bersenang-senang: Saya mulai menambahkan fungsi yang akan memperlambat keseluruhan antrian pesan, jadi saya memutuskan untuk meletakkannya di skrip yang terpisah, karena saya tidak dapat melakukan multithread saat ini, tetapi saya memilih LongPoll. (Dan apakah ada penggunaan PHP seperti itu?)

Dan fungsi-fungsi ini: mengirim pesan ke semua anggota grup dan menghasilkan kode QR di mana kunci untuk bergabung dengan grup dienkripsi.

Untuk melakukan ini, saya baru saja membuat tabel lain dalam database, di mana saya memasukkan teks pengiriman dan kepada siapa itu dimaksudkan. Basis akhirnya mengambil formulir ini.

gambar

Dan pembuatan kode QR umumnya dibuat dalam proses terpisah, yang juga menerima pembaruan dari VK tentang pesan keluar, dan melihat pesan mana yang berisi kunci ke grup.

Sejauh ini, semuanya terlihat kurang lebih memadai, tetapi kemudian saya memutuskan model relasional dengan memasukkan JSON ke dalam basis data.

JSON apa yang bisa saya masukkan ke dalam database? Saya memasukkan parameter lampiran, yang saya terima dari VK, dan kemudian memprosesnya saat mengirim pesan, agar tidak memuat proses utama.

Hasilnya, semuanya terlihat seperti ini.

gambar

Tentang metode yang sama, maka saya menambahkan lampiran file ke tugas di bot. Tugas ditambahkan segera, dan file-file tersebut secara bertahap dilampirkan jika sesuai dengan format dan sesuai dengan ukuran untuk Telegram Bot Api. Saya mengunggah file ke Telegram melalui sekelompok bot dan menyimpan id file.

Saya menyimpan file-file di Telegram karena fakta bahwa server tempat saya menyimpan semua ini tidak memiliki banyak ruang, dan memperluas bagi saya sangat sulit secara finansial.

Seluruh database mulai terlihat seperti ini:

gambar

Tapi sekarang saya punya tugas: bagaimana saya akan mengembalikan file kepada pengguna? Lalu saya membuat logika yang hampir sama dengan penambahan file.

gambar

Kemudian bot lain ditambahkan untuk Cart, tapi saya belum akan menjelaskannya.

Pada dasarnya, saya pikir struktur basis datanya tidak buruk, tetapi saya tidak suka sesuatu di sini. Mungkin akan berguna bagi beberapa pendatang baru untuk melihat bagaimana Anda dapat merancang struktur basis data selama pengembangan ide, dan akan menarik bagi saya untuk mendengarkan kritik pada organisasi basis saya dan mengambil sesuatu untuk digunakan.

Artikel ini kecil, tetapi dapat menurunkan kritik.
Klats 1
"Penuh sampai jam 5 sore di mejaku!"
Saya akan memposting semua kode sumber bot pada git setelah membela proyek, dan bukan dosa menulis artikel.

Klats 2
Beberapa ide yang berhubungan dengan bekerja dengan file disarankan kepada saya dalam obrolan Habr di gerobak, saya sering terlihat di sana.

Klats 3
Anda dapat menyodok bot langsung di sini . Saya akan dengan senang hati memberikan umpan balik.

Source: https://habr.com/ru/post/id475406/


All Articles