0

我怎样才能对我用 Python 制作的 IRC 客户端进行一些改进。改进之处在于:我怎样才能输入用户可以键入HOST、PORT、NICK、INDENT 和 REALNAME字符串和消息的内容?这是程序的代码:

简单机器人.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。谢谢。

4

5 回答 5

2

你已经有了你想要它做的事情的蓝图。你正在做的:

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

没有理由您不能调整该方案以接受PORT,NICK等的输入。

此外,虽然 1 不是很 Pythonic。是的,它有效,但实际上没有理由不使用True. 这没什么大不了的,但它使代码更具可读性。

于 2009-07-13T17:51:36.977 回答
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
>>> 
于 2009-07-13T18:15:52.277 回答
1

不是直接的答案,但您应该检查twistedIRC中的实现,这是一个用 Python 编写的事件驱动网络引擎,包括对in 的支持。irctwisted.words.protocols.irc

于 2009-07-13T18:04:39.943 回答
1

如果您尝试执行操作以响应用户输入,那么该cmd模块可能会帮助您:

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

于 2009-07-13T18:19:30.883 回答
0

如果您是 Python 的新手,IRC 客户端是一项艰巨的任务,尤其是如果您以前没有使用过其他语言的类似客户端。

我建议您查看线程,以便您可以将 IRC 处理程序放在一个单独的线程上,并在另一个线程上接收用户输入(如果您在同一个线程上执行这两个操作,一个会阻塞另一个,造成不好经验。)

不过,要回答您的问题,在控制台中从用户那里获取输入的最简单方法是使用in = raw_input(),但正如我所说,它不会与同一线程上的套接字很好地交互。

于 2009-07-13T18:15:05.587 回答