Migliorare un client IRC in Python
-
13-09-2019 - |
Domanda
Come posso fare qualche miglioramento nel mio client IRC realizzato in Python. Il miglioramento è: Come posso mettere qualcosa che l'utente può digitare i host, la porta, Nick, trattino e realname stringhe e il messaggio? E qui è il codice del programma:
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])
Ricorda che sto iniziando in fase di sviluppo di Python. Qui è dove ho trovato questo codice: http://oreilly.com/pub/h/1968 Grazie.
Soluzione
Così si vuole all'utente di controllare le informazioni di connessione esatto che il client IRC usa? Per fare questo, è necessario raccogliere input da parte dell'utente prima di iniziare la connessione utilizzando il raw_input funzione.
NOTA:. Raw_input metterà a nudo un carattere di nuova riga finale
HOST = raw_input('Enter Host: ')
PORT = int(raw_input('Enter Port: '))
... per tutti i valori che si desidera l'utente sia in grado di configurare.
Esempio:
HOST = raw_input('Enter host: ')
print HOST
>>>
Enter host: stackoverflow.com
stackoverflow.com
>>>
Altri suggerimenti
Hai già il modello lì per quello che vuoi che faccia. Si sta facendo:
if(line[0]=="PING"):
Non c'è ragione non si poteva adattare tale schema per accettare l'input di PORT
, NICK
, ecc.
Inoltre, mentre 1 non è molto Pythonic. Sì funziona, ma in realtà non v'è alcuna ragione per non utilizzare True
. Non è un grosso problema, ma rende un po 'più leggibile il codice.
Se si sta cercando di portare avanti azioni in risposta all'input dell'utente, forse il modulo cmd
vi aiuterà fuori:
Se siete interessati nel protocollo IRC per sé, questo tutorial sull'utilizzo di socket per scrivere un client IRC in Python può essere utile:
Se sei nuovo di zecca per Python, un client IRC è abbastanza un'impresa, soprattutto se non avete lavorato con i clienti simili prima in altre lingue.
Io vi consiglierei di cercare su threading, in modo che si può mettere il gestore IRC su un thread separato, e ricevere l'input dell'utente su un altro thread (Se a fare entrambe sullo stesso thread, uno sarà bloccare l'altra, rendendo per una brutta esperienza.)
Per rispondere alla tua domanda, però, il modo più semplice per ottenere input da parte dell'utente nella console è quello di utilizzare in =
raw_input()
, ma come detto, non interagirà bene con la presa sullo stesso filo.