Hari ini saya akan mengajar anda cara memprogram a bot perenggan IRC. Pertama sekali, bagi mereka yang tidak tahu, bot adalah program yang menghubungkan ke saluran IRC dan berinteraksi dengannya, yang membolehkan kita, misalnya, untuk menyederhanakan saluran tanpa bahawa kita berhubung dan dengan itu mengelakkan spam, atau bahawa ia mengenali serangkaian pesanan dan melaksanakan kod yang sesuai.
Walaupun sudah ada bot yang siap dibina, saya sejujurnya adalah salah seorang yang suka membuat program mereka sendiri untuk belajar dan kepuasan yang sangat besar yang diberikan kepada kami setelah melihatnya berfungsi ^^
Dengan itu, mari kita beralih ke tutorial.
Untuk memprogram bot, kami memerlukan penyunting teks biasa cualquiera (nano, gedit, medit, dll) dan jurubahasa python (2.6 atau 2.7 akan diperlukan, tidak berfungsi dengan python 3.x).
Pertama kita mengimport modul yang diperlukan, dalam kes ini kita hanya memerlukan dua:
[code] #! / usr / bin / env python# - * - pengekodan: utf-8 - * -
soket import
rentetan import
[/kod]
Sekarang kita teruskan ke mengkonfigurasi bot:
[kod] HOST=»irc.desdelinux.net»PELABUHAN = 6667
NICK = »CalicoBot»
IDEN = »CalicoBot»
REALNAME = »CalicoBot»
CHAN = »# Rumah»
readbuffer = »»
[/kod]
Saya akan menerangkan setiap pemboleh ubah:
- HOST: URL pelayan yang akan kami sambungkan
- PELABUHAN: Port pelayan. Secara lalai adalah 6667.
- NICK, IDENT dan REALNAME: Mereka sesuai dengan nama panggilan bot, pengenalannya dan nama sebenarnya.
- CHAN: Saluran bot akan masuk
- pembaca baca: Dalam pemboleh ubah ini data yang dihantar oleh pelayan akan disimpan.
Setelah bot kami dikonfigurasi, kami terus ke sambungan itu
[code] s = socket.socket ()s.connect ((HOST, PORT))
s.send ("NICK% s \ r \ n"% NICK)
s.send ("PENGGUNA% s% s bla:% s \ r \ n"% (IDEN, HOST, REALNAME))
s.send ("SERTAI:% s \ r \ n"% CHAN)
[/kod]
Baris pertama tidak mempunyai banyak misteri, yang kedua mencipta sambungan pelayan dan tiga yang terakhir menghantar data bot ke pelayan untuk meneruskan proses masuk.
Setelah disambungkan kita akan membuat a Gelung tak terhingga di mana kita akan pergi menerima dan menghantar data dari / ke pelayan:
[kod] sementara 1:readbuffer = readbuffer + s.recv (1024)
temp = string.split (readbuffer, "\ n")
readbuffer = temp.pop ()
untuk baris dalam temp:
line = string.rstrip (garisan)
line = line.split (CHAN + ':')
jika baris [0]. cari ("PING")! = -1:
pingid = garis [0] .split () [1] s.send ("PONG% s \ r \ n"% pingid)
[/kod]
Dari semua baris yang ditulis di atas, saya hanya akan mengulas yang penting.
dengan line = line.split (CHAN + ':') apa yang kita lakukan ialah membahagikan masa pelayan menghantar kita mari dapatkan sesuatu dari saluran.
Contohnya baris berikut menunjukkan bahawa seseorang menulis sesuatu di saluran:
:son_link!sonlink@127.0.0.1 PRIVMSG #Home :Hola ^^
Yang pertama adalah nama panggilan dan data sambungan pengguna (dipisahkan oleh!), Perintah (dalam hal ini menunjukkan bahawa dia menulis), saluran dan akhirnya, setelah titik dua, mesej dihantar. Saya tidak akan menerangkan banyak lagi arahan kerana itu tidak termasuk dalam tutorial ini.
Garis penting yang lain adalah yang lain mereka mengejar jika. Pelayan selalu menghantar arahan PING untuk memeriksa sama ada pengguna masih berhubung. Dalam kes itu, bot mengirimkan perintah PONG dengan ID yang PING hantar untuk menunjukkan kepada pelayan bahawa ia masih disambungkan.
Dengan ini kita sudah mempunyai dasar bot. Sekarang saya akan terus menerangkan bagaimana membuat bot bertindak balas sesuai dengan apa yang kita inginkan pada perintah tertentu, sama ada dari IRC itu sendiri atau dari pengguna.
Membalas arahan IRC:
PING dan PRIVMSG adalah contoh arahan IRC. Terdapat banyak arahan, tetapi seperti yang saya katakan sebelumnya, ia adalah sesuatu yang tidak akan saya sampaikan secara terperinci.
Sebagai contoh, kami dapat membuat bot menyapa pengguna yang berhubung:
name = line [0] .split ('!') [0] .split (':') [1] jika nama! = NICK dan name.find (HOST) == -1:
s.send ("PRIVMSG% s: Welcome @% s ^^ \ n"% (CHAN, nama))
[/kod]
Mula-mula kita periksa sama ada pelayan menghantar arahan JOIN yang menunjukkan bahawa seseorang yang terhubung ke pelayan. Kemudian kami mengekstrak nama samaran, kami memeriksa bahawa nama samaran tersebut bukan url IRC (jika tidak begitu kami menjalankan bot itu akan menyapa url) dan akhirnya kami menghantar mesej ucapan.
Perintah bot:
Sekarang bagaimana saya membuat bot saya menyahut arahan saya sendiri? Mari kita lihat contohnya:
[code] if line [1] == 'versi $':s.send («PRIVMSG% s: CalicoBot 0.1.2 (c) Pautan Anak 2012 \ n»% CHAN)
[/kod]
Dalam contoh ini jika seseorang menulis versi $ bot akan menunjukkan mesej yang menunjukkan nama, versi dan pengarangnya. Kod lengkap contohnya ialah:
[kod] soket importrentetan import
HOST = »localhost»
PELABUHAN = 6667
NICK = »CalicoBot»
IDEN = »CalicoBot»
REALNAME = »CalicoBot»
CHAN = »# Rumah»
readbuffer = »»
s = soket. soket ()
s.connect ((HOST, PORT))
s.send ("NICK% s \ r \ n"% NICK)
s.send ("PENGGUNA% s% s bla:% s \ r \ n"% (IDEN, HOST, REALNAME))
s.send ("SERTAI:% s \ r \ n"% CHAN)
sementara 1:
readbuffer = readbuffer + s.recv (1024)
temp = string.split (readbuffer, "\ n")
readbuffer = temp.pop ()
untuk baris dalam temp:
garis cetak
line = string.rstrip (garisan)
line = line.split (CHAN + ':')
jika baris [0]. cari ("PING")! = -1:
pingid = garis [0] .split () [1] s.send ("PONG% s \ r \ n"% pingid)
jika baris [0]. cari ('SERTAI')! = -1:
name = line [0] .split ('!') [0] .split (':') [1] jika nama! = NICK dan name.find (HOST) == -1:
s.send ("PRIVMSG% s: Welcome @% s ^^ \ n"% (CHAN, nama))
jika len (garis) <1:
jika baris [1] == '$ version':
s.send («PRIVMSG% s: CalicoBot 0.1.2 (c) Pautan Anak 2012 \ n»% CHAN)
[/kod]
Saya harap anda menyukai tutorial ini, dan tentu saja, saya meninggalkan pautan ke kod bot saya supaya anda dapat melihat kodnya dengan lengkap dan anda dapat melihat cara kerjanya dengan lebih baik (walaupun saya telah membuang beberapa arahan untuk kegunaan peribadi).