#newlisp

Q&A's, tips, howto's
Locked
jeremyc
Posts: 33
Joined: Wed Dec 06, 2006 3:33 am

#newlisp

Post by jeremyc »

Anyone use it any more? #newlisp's topic still says latest release 8.7.0. I've visited it the last few days and only me and ChanServ were there... ChanServ isn't much for company :-/

Jeremy

cormullion
Posts: 2038
Joined: Tue Nov 29, 2005 8:28 pm
Location: latiitude 50N longitude 3W
Contact:

Post by cormullion »

<baffled>
What's #newlisp? And whose ChanServ?
</baffled>

newdep
Posts: 2038
Joined: Mon Feb 23, 2004 7:40 pm
Location: Netherlands

Post by newdep »

You mean the IRC..? It was setup by some people from Kozoru,
on the otherhand... I myself am not a real IRC user so im mostly not there.... ;-)

Norman.
-- (define? (Cornflakes))

jeremyc
Posts: 33
Joined: Wed Dec 06, 2006 3:33 am

Post by jeremyc »

Yeah, on IRC, I should have said:

irc.freenode.net#newlisp

IRC can be pretty nice for focused groups, such as newLisp.

Jeremy

cormullion
Posts: 2038
Joined: Tue Nov 29, 2005 8:28 pm
Location: latiitude 50N longitude 3W
Contact:

Post by cormullion »

Ah OK, I googled 'irc.freenode.net#newlisp'... I've never done anything irc.

But aren't these the places where people with nothing better to do moan about things that aren't 'The One True Lisp'? I'd find the hostility rather wearisome.

jeremyc
Posts: 33
Joined: Wed Dec 06, 2006 3:33 am

Post by jeremyc »

If you've never done IRC, download an IRC client for your computer, type in irc.freenode.net as the server, and then join the channel #newlisp .. normally by typing /join #newlisp

I'm there hanging out.

Jeremy

cormullion
Posts: 2038
Joined: Tue Nov 29, 2005 8:28 pm
Location: latiitude 50N longitude 3W
Contact:

Post by cormullion »

Norman - can you explain your irc.lsp file on your site:

Code: Select all

(setq online 'true)
;; connect to irc server no error checking done
(setq server (net-connect "irc.freenode.net" 6667))

;; login and join
(net-send server "USER ircnewlisp 0 * :ircuser\r\n")
(net-send server "NICK ircuser\r\n")
(net-send server "JOIN #ircgroup-here\r\n")

;; dont use (net-error) in a while loop by default.
;; You dont want you while loop to quit on all net-errors.
(while online
        (if (net-select server "read" 1000)  
              (begin 
                  ;; do linebased receive
                  (net-receive server 'buffer 8192 "\n")
                  (print buffer)
		;; AUTO ping reply!
                  (if (regex {^PING :(.*)\r\n} buffer) 
                    (begin
                      (println "NEWLISP >>  PONG :"$1)
                      (net-send server (append "PONG :" (string $1 ) "\r\n"))
                    )
                  )
             )
        )
       (if (net-error) (println "NEWLISP >> " (net-error))) 
)
I tried it out but it didn't work.. Any clues? I changed the names, but after

#newlisp :End of /NAMES list.


it didn't seem to do anything... Should I start typing?

I've tried #newlisp with Colloquy (a MacOS client) and it worked well. But I'm intrigued by your very compact version!

newdep
Posts: 2038
Joined: Mon Feb 23, 2004 7:40 pm
Location: Netherlands

Post by newdep »

I used that script for my auto "newlisp-news" bot.. But i think thats a long time ago..
In the meantime also the IRC server have change policy's, like cant send anonymous messages etc... due to spam..

This script is actualy very RAW.. Its a step by step connect which cant handle any
failure ;-)

he best way is to retry again step by step...

here is the code of that thing, replace XXXXXXX with i.e. cormullion ->



#!/usr/bin/newlisp

(define (fetch-news)
(set 'rssbuffer '())
(set 'urldata (get-url "http://newlisp.org/rss.cgi?News"))

;; check if get-url had an error
;;(if (not (net-error))
(begin
(xml-type-tags nil 'cdata '!-- nil)
(set 'url (xml-parse urldata (+ 1 2 8 16)))

;; continue if no xml-error detected and if url is not empty
(if (and (not (xml-error)) (not (empty? url)) )
(begin

;; remove headers etc...
(until (= (first (nth 0 url)) 'rss ) (pop url))

(set 'rsschannel (nth 2 (nth 0 url)))
(set 'rsschannellen (length rsschannel))

(dotimes (y rsschannellen)
(if (list? (nth y rsschannel))
(if (= (nth 0 (nth y rsschannel)) 'item )
(push (lookup 'title (nth y rsschannel)) rssbuffer -1 ) )))
)
)
)
;;)

;; we got an error somewhere, so notify someting nice to the user..
(if (empty? rssbuffer) (push "No newLisp News available at the moment, try again later..." rssbuffer))
)


;; fetch once..
(fetch-news)
;; fetch every 5 minutes new data!
(timer 'fetch-news 300)


(setq online 'true)

;; connect to irc server no error checking done
(setq server (net-connect "irc.freenode.net" 6667))

;; login and join
(net-send server "USER newlispbot 0 * :XXXXXXX\r\n")
(net-send server "NICK newsbot\r\n")
(net-send server "JOIN #newlisp\r\n")
;;(net-send server (append "AWAY :" {Im a very sleepy bot...} "\r\n"))
;;(net-send server (append "PRIVMSG #newlisp " {:Hi, Im the newLisp RSS news robot, "/msg newsbot !news" } "\r\n"))


;; do not exit on (14 "select-failed")!
(while online

(if (net-select server "read" 1000)
(begin
;; do linebased receive
(net-receive server 'buffer 8192 "\n")
(print buffer)

;; AUTO ping reply!
(if (regex {^PING :(.*)\r\n} buffer)
(begin
(println "BOT --- PONG :"$1)
(net-send server (append "PONG :" (string $1 ) "\r\n"))
)
)


;;
;; Scan for !news
(if (regex {^:(.*)!(.*)PRIVMSG newsbot :(!news)\r\n} buffer)
(begin

(println "BOT --- PRIVMSG " $0)
(net-send server (append "PRIVMSG " $1 { :Im checking the RSS newLisp news, hold on! } "\r\n"))

;; read from pre-stored buffer by timer and send line by line!
(dolist (x rssbuffer) (net-send server (append "PRIVMSG " $1 " :" x "\r\n")) )


)
)

)
)
(if (net-error) (println "BOT --- " (net-error)))
)


(close server)
(println (net-error))
(exit)
-- (define? (Cornflakes))

Locked