Hôm nay tôi sẽ dạy bạn cách lập trình bot para IRC. Trước hết, đối với những người chưa biết, bot là một chương trình kết nối với kênh IRC và tương tác với nó, ví dụ: cho phép chúng tôi kiểm duyệt kênh mà không rằng chúng ta đã kết nối và do đó tránh được thư rác, hoặc nó nhận ra một loạt các lệnh và thực thi mã tương ứng.
Mặc dù đã có bot sẵn sàng, nhưng thành thật mà nói, tôi là một trong những người thích tạo chương trình của riêng họ để học hỏi và sự hài lòng tuyệt vời mà nó mang lại cho chúng tôi sau khi thấy nó hoạt động ^^
Như đã nói, hãy chuyển sang phần hướng dẫn.
Để lập trình bot, chúng tôi sẽ cần một trình soạn thảo văn bản thuần túy cualquiera (nano, gedit, medit, v.v.) và thông dịch viên trăn (2.6 hoặc 2.7 sẽ là cần thiết, không hoạt động với python 3.x).
Đầu tiên chúng tôi nhập mô-đun bắt buộc, trong trường hợp này, chúng tôi sẽ chỉ cần hai:
[code] #! / usr / bin / env python# - * - mã hóa: utf-8 - * -
ổ cắm nhập khẩu
nhập chuỗi
[/ code]
Bây giờ chúng ta tiến hành configurar bot:
[mã] HOST=»irc.desdelinux.mạng lưới"PORT = 6667
NICK = »CalicoBot»
IDENT = »CalicoBot»
REALNAME = »CalicoBot»
CHAN = »# Trang chủ»
readbuffer = »»
[/ code]
Tôi sẽ giải thích từng biến số:
- XƯỚNG: URL của máy chủ mà chúng tôi sẽ kết nối
- HẢI CẢNG: Cổng máy chủ. Theo mặc định, nó là 6667.
- NICK, IDENT và REALNAME: Chúng tương ứng với biệt danh của bot, nhận dạng của nó và tên thật.
- CHÂN: Kênh mà bot sẽ vào
- bộ đệm đọc: Trong biến này, dữ liệu do máy chủ gửi sẽ được lưu.
Khi bot của chúng tôi được định cấu hình, chúng tôi tiến hành kết nối
[code] 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 ("THAM GIA:% s \ r \ n"% CHAN)
[/ code]
Dòng đầu tiên không có nhiều bí ẩn, dòng thứ hai tạo ra kết nối máy chủ và ba cuối cùng gửi dữ liệu của bot đến máy chủ để tiến hành đăng nhập.
Sau khi kết nối, chúng tôi sẽ tạo một Vòng lặp vô hạn trong đó chúng ta sẽ đi nhận và gửi dữ liệu từ / đến máy chủ:
[mã] trong khi 1:readbuffer = readbuffer + s.recv (1024)
temp = string.split (bộ đệm đọc, "\ n")
readbuffer = temp.pop ()
cho dòng trong tạm thời:
line = string.rstrip (dòng)
line = line.split (CHAN + ':')
if dòng [0] .find ("PING")! = -1:
pingid = line [0] .split () [1] s.send ("PONG% s \ r \ n"% pingid)
[/ code]
Trong tất cả những dòng đã viết ở trên, tôi sẽ chỉ bình luận về những dòng quan trọng.
với line = line.split (CHAN + ':') những gì chúng tôi làm là phân chia những gì máy chủ gửi cho chúng tôi khi hãy lấy một cái gì đó từ kênh.
Ví dụ: dòng sau cho biết ai đó đã viết nội dung gì đó trên kênh:
:[email protected] PRIVMSG #Home :Hola ^^
Đầu tiên là biệt hiệu và dữ liệu kết nối của người dùng (được phân tách bằng!), Lệnh (trong trường hợp này nó chỉ ra rằng anh ta đã viết), kênh và cuối cùng, sau dấu hai chấm, tin nhắn được gửi. Tôi sẽ không giải thích nhiều lệnh nữa vì nó không nằm trong hướng dẫn này.
Các dòng quan trọng khác là những là sau nếu. Máy chủ thường xuyên gửi lệnh PING để kiểm tra xem người dùng có còn kết nối hay không. Trong trường hợp này, bot sẽ gửi lệnh PONG với một ID mà PING đã gửi để chỉ ra cho máy chủ rằng nó vẫn được kết nối.
Với điều này, chúng tôi đã có cơ sở của bot. Bây giờ tôi sẽ tiếp tục giải thích cách làm cho bot phản hồi theo những gì chúng ta muốn đối với các lệnh nhất định, cho dù chúng là từ chính IRC hay từ người dùng.
Đáp ứng các lệnh IRC:
PING và PRIVMSG là các ví dụ về lệnh IRC. Có rất nhiều lệnh, nhưng như tôi đã nói trước đây, đó là điều mà tôi sẽ không đi vào chi tiết.
Ví dụ: chúng tôi có thể làm cho bot nói lời chào với những người dùng kết nối:
name = line [0] .split ('!') [0] .split (':') [1] if name! = NICK and name.find (HOST) == -1:
s.send ("PRIVMSG% s: Chào mừng @% s ^^ \ n"% (CHAN, tên))
[/ code]
Đầu tiên, chúng tôi kiểm tra xem máy chủ có gửi lệnh hay không THAM GIA cho biết rằng ai đó đã kết nối với máy chủ. Sau đó, chúng tôi giải nén nick, chúng tôi kiểm tra nick không phải là url IRC (nếu không phải ngay sau khi chúng tôi chạy bot, nó sẽ chào url) và cuối cùng chúng tôi gửi tin nhắn chúc mừng.
Lệnh bot:
Bây giờ làm cách nào để tạo bot của tôi trả lời lệnh của riêng tôi? Tốt hơn hãy xem xét một ví dụ:
[code] if dòng [1] == '$ phiên bản':s.send («PRIVMSG% s: CalicoBot 0.1.2 (c) Liên kết Sơn 2012 \ n»% CHAN)
[/ code]
Trong ví dụ này nếu ai đó viết phiên bản $ bot sẽ hiển thị thông báo cho biết tên, phiên bản và tác giả của nó. Mã hoàn chỉnh của ví dụ này là:
[mã] nhập ổ cắmnhập chuỗi
HOST = »localhost»
PORT = 6667
NICK = »CalicoBot»
IDENT = »CalicoBot»
REALNAME = »CalicoBot»
CHAN = »# Trang chủ»
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 ("THAM GIA:% s \ r \ n"% CHAN)
trong khi 1:
readbuffer = readbuffer + s.recv (1024)
temp = string.split (bộ đệm đọc, "\ n")
readbuffer = temp.pop ()
cho dòng trong tạm thời:
dòng in
line = string.rstrip (dòng)
line = line.split (CHAN + ':')
if dòng [0] .find ("PING")! = -1:
pingid = line [0] .split () [1] s.send ("PONG% s \ r \ n"% pingid)
if dòng [0] .find ('JOIN')! = -1:
name = line [0] .split ('!') [0] .split (':') [1] if name! = NICK and name.find (HOST) == -1:
s.send ("PRIVMSG% s: Chào mừng @% s ^^ \ n"% (CHAN, tên))
nếu len (dòng) <1:
nếu dòng [1] == '$ phiên bản':
s.send («PRIVMSG% s: CalicoBot 0.1.2 (c) Liên kết Sơn 2012 \ n»% CHAN)
[/ code]
Tôi hy vọng bạn thích hướng dẫn này, và tất nhiên, tôi để lại cho bạn liên kết đến mã bot của tôi để bạn có thể xem toàn bộ mã của nó và bạn có thể thấy rõ hơn cách hoạt động của nó (mặc dù tôi đã loại bỏ một số lệnh để sử dụng cá nhân).