Улучшение IRC-клиента в Python - PullRequest
0 голосов
/ 13 июля 2009

Как я могу сделать некоторые улучшения в моем клиенте IRC, сделанном на Python. Улучшение: Как я могу поместить что-то, что пользователь может ввести в строку 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.Thanks.

Ответы [ 5 ]

2 голосов
/ 13 июля 2009

То есть вы хотите, чтобы пользователь контролировал точную информацию о соединении, которую использует клиент 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
>>> 
2 голосов
/ 13 июля 2009

У вас уже есть план того, что вы хотите, чтобы он делал. Вы делаете:

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

Нет причин, по которым вы не могли адаптировать эту схему для приема ввода PORT, NICK и т. Д.

Кроме того, хотя 1 не очень Pythonic. Да, это работает, но на самом деле нет причин не использовать True. Это не имеет большого значения, но делает код немного более читабельным.

1 голос
/ 13 июля 2009

Если вы пытаетесь выполнить действия в ответ на пользовательский ввод, возможно, модуль cmd поможет вам:

Если вас интересует сам протокол IRC, может пригодиться это руководство по использованию сокетов для написания IRC-клиента на python:

1 голос
/ 13 июля 2009

Не прямой ответ, но вы должны проверить реализацию IRC в twisted , управляемом событиями сетевом движке, написанном на Python, который включает поддержку irc в twisted.words.protocols.irc.

0 голосов
/ 13 июля 2009

Если вы новичок в Python, IRC-клиент - довольно сложная задача, особенно если вы раньше не работали с аналогичными клиентами на других языках.

Я бы порекомендовал вам посмотреть на многопоточность, чтобы вы могли поместить свой обработчик IRC в отдельный поток и получать пользовательский ввод в другом потоке (если вы выполняете оба в одном потоке, один блокирует другой, делая за плохой опыт.)

Чтобы ответить на ваш вопрос, самый простой способ получить ввод от пользователя в консоли - использовать in = raw_input(), но, как я уже сказал, он не будет хорошо взаимодействовать с сокетом в той же теме.

...