Membuat dasar untuk bot akan terdiri dari langkah-langkah berikut:
- Membuat bot di VK
- Pembuatan kunci API
- Membuat program bot melalui LongPoolVK
Untuk siapa artikel ini?
Artikel ini dirancang untuk programmer pemula. Metode kerja program ini sangat sederhana dan siapa pun yang mengetahui sintaksis Python dan tahu sedikit OOP akan dapat mengimplementasikannya untuk kebutuhan mereka. Tetapi pada prinsipnya, bahkan tanpa mengetahui prinsip-prinsip OOP, saya pikir Anda dapat belajar cara menambahkan fungsi sederhana atau setidaknya dalam kasus ekstrim menggunakan sumber-sumber yang sudah jadi dari GitHub.
Apa yang ada di artikel ini?
Menciptakan dasar bot. Setelah itu, dapat diprogram sesuka Anda. Otomatis beberapa rutin atau digunakan sebagai teman bicara.
Perbaikan (versi bot yang sedikit rumit). Saya memutuskan untuk pertama-tama memperkenalkan kode prosedural bot yang sederhana, dan kemudian sedikit menyulitkannya dengan menambahkan fungsi yang secara signifikan meningkatkan kinerja bot.
Menambahkan fungsi transfer cuaca. Kami akan mengajarkan bot untuk memberi tahu kami cuaca.
Membuat bot di VK
Kami akan mulai dengan membuat bot, yaitu grup di VK.
Untuk melakukan ini, buka "grup" โ "buat komunitas."
Pilih semua jenis komunitas dan masukkan nama, tema grup.
Pada halaman pengaturan yang terbuka, pilih "Bekerja dengan API"
Selanjutnya, Anda perlu membuat kunci API.
Kemudian pilih parameter yang Anda butuhkan dengan akses untuk kunci API Anda.
Kemungkinan besar, Anda harus mengkonfirmasi tindakan dalam VK menggunakan ponsel Anda. Kemudian salin kunci API yang dihasilkan di suatu tempat ke file. Kami masih membutuhkannya.
Maka Anda perlu mengizinkan pesan. Untuk melakukan ini, buka "pesan" dan nyalakan.
Mari kita lanjutkan ke bagian program bot
Kami tidak akan mengimplementasikannya melalui permintaan ke VC, atau lebih tepatnya, kami hanya menggunakan perpustakaan VkLongPool, yang akan melakukannya untuk kami.
Ini membutuhkan perpustakaan vk_api. Instal melalui pip:
python -m pip instal vk_api
Tetapi secara pribadi, saya bekerja dengan lingkungan virtual Anaconda. Ini sering menyebabkan masalah selama pekerjaan pertama. Biasanya masalahnya adalah bahwa sistem tidak mengenali perintah python. Dan masalah ini diselesaikan dengan menambahkannya ke PATH.
Mari kita beralih ke kode itu sendiri:
Kami mengimpor modul yang diperlukan:
import vk_api from vk_api.longpoll import VkLongPoll, VkEventType
Kemudian kodenya:
def write_msg(user_id, message): vk.method('messages.send', {'user_id': user_id, 'message': message})
Fungsi write_msg menerima id pengguna VK <user_id>, di mana ia akan mengirim pesan dan pesan itu sendiri.
def write_msg(user_id, message): vk.method('messages.send', {'user_id': user_id, 'message': message})
Masuk sebagai komunitas dan menyiapkan longpool:
Di dalamnya, kami akan memeriksa acara secara siklus. Dan kita bisa mendapatkan tipe acara dengan event.type.
Setelah itu, setelah menerima pesan dari pengguna, kami akan dapat mengiriminya surat yang sesuai menggunakan fungsi write_msg yang sudah dibuat.
Jadi, kami membuat bot yang sangat sederhana di VK dengan implementasi sederhana yang sama. Dan logika bot bisa diprogram sesuai keinginan.
Daftar kode GHSekarang mari kita mulai dengan pemrograman yang lebih nyata.
Buat kelas VkBot di file vk_bot.py, yang akan melayani kita sebagai bot.
class VkBot: def __init__(self, user_id): print(" !") self._USER_ID = user_id self._USERNAME = self._get_user_name_from_vk_id(user_id) self._COMMANDS = ["", "", "", ""]
Dan tambahkan metode di sana dengan mana Anda bisa mendapatkan nama pengguna melalui vk id.
def _get_user_name_from_vk_id(self, user_id): request = requests.get("https://vk.com/id"+str(user_id)) bs = bs4.BeautifulSoup(request.text, "html.parser") user_name = self._clean_all_tag_from_str(bs.findAll("title")[0]) return user_name.split()[0]
Ini dilakukan dengan menggunakan beatifulsoup4.
Instal jika tidak:
python -m pip instal bs4
Ada cukup artikel di dalamnya yang layak untuk dipelajari. Dengan menggunakannya, kami akan membuat beberapa metode lagi:
Ubah parameter _get_weather ke kota yang diinginkan, kemudian metode ini dapat dipanggil dengan kota, dan secara default akan menjadi nilai yang Anda tentukan.
Dengan menggunakan metode ini, kita bisa mendapatkan waktu dan cuaca. Metode ini dipotong dari proyek bot utama saya. Anda harus mengaturnya dalam paket dan kelas yang terpisah, menggunakan warisan. Tetapi demi contoh pekerjaan, saya memutuskan untuk memasukkan semua ini ke dalam satu kelas bot, yang tentu saja buruk.
Kami membuat metode utama new_message, yang akan memproses pesan pengguna dan mengembalikan respons:
def new_message(self, message):
Sekarang kembali ke file yang dapat dieksekusi:
Impor kelas bot kami:
from vk_bot import VkBot
Mari kita ubah loop utama kami:
print("Server started") for event in longpoll.listen(): if event.type == VkEventType.MESSAGE_NEW: if event.to_me: print('New message:') print(f'For me by: {event.user_id}', end='') bot = VkBot(event.user_id) write_msg(event.user_id, bot.new_message(event.text)) print('Text: ', event.text)
Artinya, sekarang kami akan mengirimkan pesan yang diterima ke objek bot, yang akan mengembalikan jawaban yang diinginkan kepada kami.
Komplikasi program ini hanya diperlukan jika Anda ingin lebih meningkatkan fungsionalitas bot:
Buat paket dan kelas terpisah untuk setiap fungsi _get_time dan _get_weather. Atur warisan dari kelas umum. Dan mendefinisikan setiap fungsi baru dalam kelas yang terpisah, yang terbaik, tentu saja, juga untuk dibagi menjadi beberapa paket.
Tambahkan kamus dengan kunci ID pengguna dan nilai objek bot. Jadi, tidak perlu membuat objek bot setiap kali dalam satu siklus. Selain itu, ini akan memastikan penggunaan beberapa pengguna sekaligus dalam desain yang kompleks.
Jadi, memilih arsitektur kode yang baik, Anda dapat membuat bot multi-fungsi.
Misalnya, saya mengajar bot saya untuk memutar musik di komputer, membuka situs sambil duduk di telepon. Kirim resep untuk sarapan, makan siang, makan malam.
Anda dapat mengedit bot sendiri.
Bot dari artikelProyek bot utama (lanjutan) di GHSaya akan senang dengan ide Anda. Untuk pertanyaan apa pun, tulis.