Hari ini saya akan mengajari Anda cara memprogram a bot ayat IRC. Pertama-tama, bagi mereka yang tidak tahu, bot adalah program yang menghubungkan ke saluran IRC dan berinteraksi dengannya, yang memungkinkan kita, misalnya, untuk memoderasi saluran tanpa bahwa kita terhubung dan dengan demikian menghindari spam, atau yang mengenali serangkaian pesanan dan mengeksekusi kode yang sesuai.
Meskipun sudah ada bot yang siap, sejujurnya saya adalah salah satu dari mereka yang suka membuat program mereka sendiri untuk dipelajari dan kami sangat puas setelah melihatnya berhasil ^^
Karena itu, mari kita lanjutkan ke tutorial.
Untuk memprogram bot kita membutuhkan file editor teks biasa cualquiera (nano, gedit, medit, dll) dan penerjemah python (2.6 atau 2.7 akan diperlukan, tidak bekerja dengan python 3.x).
Pertama kita mengimpor file modul yang dibutuhkan, dalam hal ini kita hanya membutuhkan dua:
[kode] #! / usr / bin / env python# - * - pengkodean: utf-8 - * -
soket impor
impor string
[/ kode]
Sekarang kita lanjutkan ke configurar bot:
[kode] HOST=»irc.desdelinux.bersih"PORT = 6667
NICK = »CalicoBot»
IDENT = »CalicoBot»
REALNAME = »CalicoBot»
CHAN = »# Beranda»
readbuffer = »»
[/ kode]
Saya akan menjelaskan setiap variabel:
- HOST: URL server yang akan kami hubungkan
- PELABUHAN: Port server. Secara default adalah 6667.
- NICK, IDENT dan REALNAME: Mereka sesuai dengan nama panggilan bot, identifikasi dan nama aslinya.
- CHAN: Saluran yang akan dimasuki bot
- penyangga baca: Dalam variabel ini data yang dikirim oleh server akan disimpan.
Setelah bot kami dikonfigurasi, kami melanjutkan ke koneksi
[kode] s = socket.socket ()s.connect ((HOST, PORT))
s.send ("NICK% s \ r \ n"% NICK)
s.send ("USER% s% s bla:% s \ r \ n"% (IDENT, HOST, REALNAME))
s.send ("GABUNG:% s \ r \ n"% CHAN)
[/ kode]
Baris pertama tidak memiliki banyak misteri, baris kedua menciptakan koneksi server dan tiga yang terakhir mengirim data bot ke server untuk melanjutkan proses masuk.
Setelah terhubung kita akan membuat file Lingkaran tak terbatas kemana kita akan pergi menerima dan mengirim data dari / ke server:
[kode] sementara 1:readbuffer = readbuffer + s.recv (1024)
temp = string.split (readbuffer, "\ n")
readbuffer = temp.pop ()
untuk baris dalam suhu:
line = string.rstrip (baris)
line = line.split (CHAN + ':')
jika baris [0]. temukan ("PING")! = -1:
pingid = baris [0] .split () [1] s.send ("PONG% s \ r \ n"% pingid)
[/ kode]
Dari semua baris yang tertulis di atas, saya hanya akan mengomentari yang penting.
dengan line = line.split (CHAN + ':') yang kami lakukan adalah membagi apa yang dikirim server kepada kami mari kita dapatkan sesuatu dari saluran.
Misalnya baris berikut menunjukkan bahwa seseorang menulis sesuatu di saluran:
:son_link!sonlink@127.0.0.1 PRIVMSG #Home :Hola ^^
Yang pertama adalah nama panggilan pengguna dan data koneksi (dipisahkan oleh!), Perintah (dalam hal ini menunjukkan bahwa dia menulis), saluran dan terakhir, setelah titik dua, pesan dikirim. Saya tidak akan menjelaskan lebih banyak perintah karena itu tidak termasuk dalam tutorial ini.
Garis penting lainnya adalah garisnya adalah setelah jika. Server sering kali mengirimkan perintah PING untuk memeriksa apakah pengguna masih terhubung. Dalam hal ini, bot mengirimkan perintah PONG dengan ID yang dikirim PING untuk menunjukkan ke server bahwa ia masih terhubung.
Dengan ini kita sudah memiliki basis bot. Sekarang saya akan melanjutkan untuk menjelaskan bagaimana membuat bot merespon sesuai dengan apa yang kita inginkan untuk perintah tertentu, apakah itu dari IRC itu sendiri atau dari pengguna.
Menanggapi perintah IRC:
PING dan PRIVMSG adalah contoh perintah IRC. Ada banyak perintah, tetapi seperti yang saya katakan sebelumnya, itu adalah sesuatu yang tidak akan saya bahas secara detail.
Misalnya, kita dapat membuat bot menyapa pengguna yang terhubung:
name = line [0] .split ('!') [0] .split (':') [1] if name! = NICK dan name.find (HOST) == -1:
s.send ("PRIVMSG% s: Selamat datang @% s ^^ \ n"% (CHAN, nama))
[/ kode]
Pertama kami memeriksa apakah server mengirimkan perintah BERGABUNG yang menunjukkan bahwa seseorang terhubung ke server. Kemudian kita ekstrak nick tersebut, kita periksa bahwa nick tersebut bukan url IRC (jika tidak segera setelah kita menjalankan bot itu akan menyapa url) dan akhirnya kami mengirimkan pesan salam.
Perintah bot:
Sekarang bagaimana cara membuat bot saya menanggapi perintah saya sendiri? Mari kita lihat contoh dengan lebih baik:
[kode] jika baris [1] == '$ versi':s.send («PRIVMSG% s: CalicoBot 0.1.2 (c) 2012 Son Link \ n»% CHAN)
[/ kode]
Dalam contoh ini jika seseorang menulis $ versi bot akan menampilkan pesan yang menunjukkan nama, versi, dan pembuatnya. Kode lengkap dari contohnya adalah ini:
[kode] soket imporimpor string
HOST = »localhost»
PORT = 6667
NICK = »CalicoBot»
IDENT = »CalicoBot»
REALNAME = »CalicoBot»
CHAN = »# Beranda»
readbuffer = »»
s = socket.socket ()
s.connect ((HOST, PORT))
s.send ("NICK% s \ r \ n"% NICK)
s.send ("USER% s% s bla:% s \ r \ n"% (IDENT, HOST, REALNAME))
s.send ("GABUNG:% s \ r \ n"% CHAN)
sedangkan 1:
readbuffer = readbuffer + s.recv (1024)
temp = string.split (readbuffer, "\ n")
readbuffer = temp.pop ()
untuk baris dalam suhu:
garis cetak
line = string.rstrip (baris)
line = line.split (CHAN + ':')
jika baris [0]. temukan ("PING")! = -1:
pingid = baris [0] .split () [1] s.send ("PONG% s \ r \ n"% pingid)
jika baris [0]. temukan ('JOIN')! = -1:
name = line [0] .split ('!') [0] .split (':') [1] if name! = NICK dan name.find (HOST) == -1:
s.send ("PRIVMSG% s: Selamat datang @% s ^^ \ n"% (CHAN, nama))
jika len (baris) <1:
jika baris [1] == '$ versi':
s.send («PRIVMSG% s: CalicoBot 0.1.2 (c) 2012 Son Link \ n»% CHAN)
[/ kode]
Saya harap Anda menyukai tutorial ini, dan tentu saja, saya meninggalkan Anda tautan ke kode bot saya sehingga Anda dapat melihat kodenya secara lengkap dan Anda dapat melihat lebih baik cara kerjanya. (meskipun saya telah menghapus beberapa perintah untuk penggunaan pribadi).
Heh, saya tidak bisa melewatkan Bot omong kosong yang Anda tumpangi di IRC 😛 Artikel yang sangat menarik.
Penjelasan yang sangat sederhana dan jelas.
Bagaimana jika, kode python kehilangan semua indentasi.
Ini sudah diselesaikan ^^
Artikel yang sangat bagus dan betapa mudahnya menyambung ke IRC untuk memprogram bot :)…
Ini mengingatkan saya pada saat-saat ketika kami merasa seperti programmer menulis skrip untuk mIRC dalam obrolan di MSN atau MSNGroups.
Menarik, saya menyimpannya 😀
sangat baik!
Sangat berguna, terima kasih Son_Link!
Salam!
Bersulang…
mengikuti garis Anda dan menguji satu-satunya hal yang berhasil adalah
soket impor
impor string
HOST = »localhost»
PORT = 6667
NICK = »CalicoBot»
IDENT = »CalicoBot»
REALNAME = »CalicoBot»
CHAN = »# Beranda»
readbuffer = »»
s = socket.socket ()
s.connect ((HOST, PORT))
s.send ("NICK% srn"% NICK)
s.send ("USER% s% s bla:% srn"% (IDENT, HOST, REALNAME))
s.send ("GABUNG:% srn"% CHAN)
mengubah saluran dan nick sekarang di bawah ini membuat saya kesalahan sintaks
Saya bertanya kepada kenalan lain dan mereka memberi tahu saya bahwa itu tidak terlihat seperti python
Saya tidak tahu apa yang saya lakukan salah atau mengapa saya menyalin semuanya dan menempelkannya ke python dan memberikannya masuk dan terhubung ke saluran tetapi setelah 250 detik saluran menghapusnya karena tidak ada tanggapan dari pong ...
Versi Python apa yang Anda gunakan?
Ini hanya bekerja dengan python 2.6 dan 2.7, bukan dengan 3.x
Saya akan mengubah entri untuk membuatnya lebih jelas.
Kode lengkap tidak berfungsi untuk saya, paragraf terakhir adalah yang gagal dan saya tidak dapat menemukan kesalahan. Jika saya menghapus bagian itu, itu menghubungkan dan bekerja dengan sempurna. Diuji dengan Python 2.7.3 pada Windows 7.
PS: Dalam kasus saya, saya terhubung ke server dengan kata sandi dan menambahkan baris ini:
LULUS = »Passdelbot»
s.send ("LULUS% s \ r \ n"% PASS)
Hai Son Link, terima kasih banyak untuk artikelnya, sangat menarik, saya tidak bisa menanggapi perintah yang dikirim. Program tidak akan masuk ke if dan saya tidak tahu alasannya: "if len (line)> 1:"
Saya menunggu jawaban Anda.
terima kasih
Saya baru saja menambahkan tautan ke kode lengkap bot karena mengubah beberapa simbol dan kode menunjukkan kode html-nya.
Pokoknya saya akan mencoba menunjukkan semuanya dengan benar