[Python] Program bot untuk IRC

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:

[kode] 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))
[/ 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 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% 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).

CalicoBot