All pastes #710166 Raw Edit

kestaz

public python v1 · immutable
#710166 ·published 2007-09-25 08:44 UTC
rendered paste body
import pygtkimport gtkimport reimport socketimport select import gobjectchannels = [] ''' simple gui driven irc client .. use for any purpose ;) '''''' written by kestaz'''global sglobal nickdef destroy(widget, data=None):        global s     s.send("QUIT\n")    s.close()     gtk.main_quit()def paspaustas_enter(widget, notebook, textview):       global s     global channels    global nick     txt = widget.get_text()     widget.set_text("")         m = re.search("/join\s\#(.+)", txt)        if m != None:        s.send("JOIN #"+ m.group(1) + "\n")        sukurti_tab(notebook, "#" + m.group(1))    else:         m = re.search("(.+)", txt)                  for k in channels:            if k[2] == widget:                                textbuffer = textview.get_buffer()                eil = "<" + nick + "> " + str(txt) + '\n'                 textbuffer.insert(textbuffer.get_end_iter(), eil)                  s.send("PRIVMSG " + k[0] + " :" + str(txt) + "\n") ;                break                        return True def sukurti_langa():    window = gtk.Window(gtk.WINDOW_TOPLEVEL)        window.set_title("irk - just another UNIX irc client!")     window.set_default_size(800, 400)         return windowdef sukurti_tab(notebook, name):    table = gtk.Table(20,20, True)        scrolled_window = gtk.ScrolledWindow()    scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_ALWAYS)       scrolled_window.show()     box = gtk.VBox(True, 0)     box.pack_start(scrolled_window, True, True, 0 )         scrolled_textview = gtk.ScrolledWindow()        scrolled_textview.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)    scrolled_textview.show()        txtview = gtk.TextView()        txtview.set_editable(False)    scrolled_window.add_with_viewport(txtview)          txtview.set_wrap_mode(gtk.WRAP_WORD)     entry = gtk.Entry()          entry.connect("activate", paspaustas_enter, notebook, txtview)     label = gtk.Label(name)     model = gtk.ListStore(gobject.TYPE_STRING)        """    iter = model.append()    model.set(iter,0,  "")     """    view = gtk.TreeView(model)         scrolled_textview.add_with_viewport(view)    render = gtk.CellRendererText()     view.insert_column_with_attributes(-1, "Users", render, text=0)    view.show()        table.attach(box,0, 17, 0,18 )        table.attach(entry, 0,17, 18,20)        table.attach(scrolled_textview, 17,20, 0, 20)    txtview.show()         box.show()    entry.show()             table.show()    label.show()    notebook.append_page(table, label)        channels.append([name, txtview, entry, view, []])def jungimas(e, k):            global channels         global nick    line = e.recv(1024)    if len(line) > 0:       eilutes = line.split("\n")       for k in eilutes:             m = re.match(":(.+) \d+ (.+) = #(.+) :(.+)", k)              if m != None:                                  for kanalai in channels:                     if kanalai[0] == '#' + m.group(3):                                                     saras = m.group(4).split(' ')                                                   for v in saras:                                                          if v != '\r':                                kanalai[4].append(v)                                                  saras = kanalai[4]                          model = gtk.ListStore(gobject.TYPE_STRING)                         for k in saras:                            if k != nick:                                iter = model.append()                                model.set(iter,0,  k)                                                  kanalai[3].set_model(model)             else:                m = re.match(":(.+) \d+ (.+) #(.+) :(.+)", k)                 if m != None:                                        for kanalai in channels:                        if kanalai[0] == '#' + m.group(3):                            textbuffer = kanalai[1].get_buffer()                            eil = m.group(4)                            textbuffer.insert(textbuffer.get_end_iter(), eil)                                 m = re.match(":(.+)!(.+)@(.+) PRIVMSG #(.+) :(.+)", k)                if m != None:                    for  kanalai in channels:                        if kanalai[0] == '#' + m.group(4):                            textbuffer = kanalai[1].get_buffer()                            eil = "<"+m.group(1)+"> " + m.group(5)                            textbuffer.insert(textbuffer.get_end_iter(), eil)                 m = re.match("PING :(.+)", k)                if m != None:                    s.send("PONG :" + m.group(1))                m= re.match(":(.+)!(.+)@(.+) JOIN :#(.+)", k)                 if m != None:                                        for kanalai in channels:                                                if kanalai[0] == '#' + m.group(4)[0:-1]:                                                        saras = kanalai[4]                                                        if nick != m.group(1):                                saras.append(m.group(1))                                model = gtk.ListStore(gobject.TYPE_STRING)                                for k in saras:                                    if k != nick:                                        if k != "":                                            iter = model.append()                                            model.set(iter,0,k)                                 kanalai[3].set_model(model)                                textbuffer = kanalai[1].get_buffer()                                eil = m.group(1) + " has joined to " + m.group(4) + '\n'                                textbuffer.insert(textbuffer.get_end_iter(), eil)       textbuffer = channels[0][1].get_buffer()       textbuffer.insert(textbuffer.get_end_iter(), line)               return Truedef jungtis_prie_serverio(name, port, vardas):      global channels        global s    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)           s.connect((name, port))          s.send('NICK ' + vardas + '\n')    s.send('USER ' + 'unixkid' + ' ' + name+ ' blah :' + 'kestaz' + '\n')         gobject.io_add_watch(s, gobject.IO_IN, jungimas)     nick = "kestaz`120"window = sukurti_langa()notebook = gtk.Notebook() window.add(notebook)sukurti_tab(notebook, "Status") notebook.show() window.show()window.connect("destroy", destroy)jungtis_prie_serverio("irc.le.lt", 6667, nick)gtk.main()