改进Python中的IRC客户端

0 投票
5 回答
1637 浏览
提问于 2025-04-15 12:52

我想对我用Python写的IRC客户端进行一些改进。具体来说,我想让用户能够输入HOST、PORT、NICK、INDENT和REALNAME这些信息,以及消息内容。以下是程序的代码:

simplebot.py

import sys
import socket
import string

HOST="irc.freenode.net"
PORT=6667
NICK="MauBot"
IDENT="maubot"
REALNAME="MauritsBot"
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))

while 1:
    readbuffer=readbuffer+s.recv(1024)
    temp=string.split(readbuffer, "\n")
    readbuffer=temp.pop( )

    for line in temp:
        line=string.rstrip(line)
        line=string.split(line)

        if(line[0]=="PING"):
            s.send("PONG %s\r\n" % line[1])

请记住,我刚开始学习Python开发。这个代码是我在这里找到的:http://oreilly.com/pub/h/1968。谢谢。

5 个回答

1

如果你想根据用户的输入来执行一些操作,可能可以试试 cmd 模块,它会对你有帮助:

如果你对IRC协议本身感兴趣,这个关于如何使用套接字在Python中编写IRC客户端的教程可能会对你有用:

2

你已经有了想要实现的蓝图。你正在做的是:

if(line[0]=="PING"):

没有理由不把这个方案改成可以接受 PORTNICK 等输入。

另外,虽然用1并不是很符合Python的风格。虽然这样也能工作,但其实用 True 更好。这样做没什么大不了的,但会让代码稍微更容易读懂。

2

所以你想让用户自己控制IRC客户端使用的连接信息?为了做到这一点,你需要在开始连接之前,先收集用户的输入,这可以通过使用raw_input函数来实现。

注意:raw_input会去掉输入末尾的换行符。

HOST = raw_input('Enter Host: ')
PORT = int(raw_input('Enter Port: '))

...对于所有你希望用户能够配置的值。

举个例子:

HOST = raw_input('Enter host: ')
print HOST

>>> 
Enter host: stackoverflow.com
stackoverflow.com
>>> 

撰写回答