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:
[code] 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).
Heh, saya tidak boleh ketinggalan Bot omong kosong yang anda naiki di IRC article Artikel yang sangat menarik.
Penjelasan yang sangat mudah dan jelas.
Bagaimana jika, kod python kehilangan semua lekukan.
Ia sudah diselesaikan ^^
Artikel yang sangat baik dan betapa mudahnya menyambung ke IRC untuk memprogram bot:)…
Ini mengingatkan saya pada masa-masa ketika kita merasa seperti pengaturcara menulis skrip untuk mIRC dalam sembang di MSN atau MSNGroups.
Menarik saya menyimpannya 😀
excellent!
Sangat berguna, terima kasih Son_Link!
Salam!
Sorakan…
mengikuti garis panduan anda dan menguji satu-satunya perkara yang berkesan adalah
soket import
rentetan import
HOST = »localhost»
PELABUHAN = 6667
NICK = »CalicoBot»
IDEN = »CalicoBot»
REALNAME = »CalicoBot»
CHAN = »# Rumah»
readbuffer = »»
s = soket. soket ()
s.connect ((HOST, PORT))
s.send ("NICK% srn"% NICK)
s.send ("PENGGUNA% s% s bla:% srn"% (IDEN, HOST, REALNAME))
s.send ("SERTAI:% srn"% CHAN)
menukar saluran dan nama samaran di bawah ini melontarkan saya sintaks ralat
Saya bertanya kepada kenalan lain dan mereka memberitahu saya bahawa itu tidak kelihatan seperti ular sawa
Saya tidak tahu apa yang saya buat salah atau mengapa saya menyalin semuanya dan menampalnya ke python dan memberikannya masuk dan ia menyambung ke saluran tetapi selepas 250 saat saluran itu menghapusnya kerana tidak ada tindak balas dari pong ...
Versi Python apa yang anda gunakan?
Ia hanya berfungsi dengan python 2.6 dan 2.7, bukan dengan 3.x
Saya akan mengubah suai entri agar lebih jelas.
Kod yang lengkap tidak berfungsi untuk saya, perenggan terakhir adalah yang gagal dan saya tidak dapat menemui ralat. Sekiranya saya memadamkan bahagian itu, ia bersambung dan berfungsi dengan sempurna. Diuji dengan Python 2.7.3 pada Windows 7.
PS: Dalam kes saya, saya menyambung ke pelayan dengan kata laluan dan menambah baris berikut:
LULUS = »Passdelbot»
s.send ("LULUS% s \ r \ n"% LULUS)
Hai Son Link, terima kasih banyak untuk artikel ini, sangat menarik, saya tidak dapat menjawab arahan yang dihantar. Program tidak masuk ke yang terakhir jika dan saya tidak dapat mengetahui mengapa: "if len (line)> 1:"
Saya tunggu jawapan anda.
Terima kasih
Saya baru sahaja menambah pautan ke kod bot yang lengkap kerana menukar beberapa simbol dan kod menunjukkan kod htmlnya.
Bagaimanapun saya akan berusaha untuk menunjukkan semuanya dengan betul