projects
/
8sync.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
irc: Convert handle-line to a message handler.
[8sync.git]
/
doc
/
8sync-new-manual.org
diff --git
a/doc/8sync-new-manual.org
b/doc/8sync-new-manual.org
index 3c81bc8499d9bb665d73ba2db8276a28866a77c2..2545b1643e0f1323cc90accf2e5eaec58b790218 100644
(file)
--- a/
doc/8sync-new-manual.org
+++ b/
doc/8sync-new-manual.org
@@
-103,8
+103,8
@@
Now we need to add our bot. Initially, it won't do much.
#+BEGIN_SRC scheme
(define-class <my-irc-bot> (<irc-bot>))
#+BEGIN_SRC scheme
(define-class <my-irc-bot> (<irc-bot>))
- (define-method (handle-line (irc-bot <my-irc-bot>)
speaker channel
- line emote?)
+ (define-method (handle-line (irc-bot <my-irc-bot>)
message
+
speaker channel
line emote?)
(if emote?
(format #t "~a emoted ~s in channel ~a\n"
speaker line channel)
(if emote?
(format #t "~a emoted ~s in channel ~a\n"
speaker line channel)
@@
-117,6
+117,11
@@
This is an 8sync actor.
(8sync uses GOOPS to define actors.)
We extended the handle-line generic method, so this is the code that
will be called whenever the IRC bot "hears" anything.
(8sync uses GOOPS to define actors.)
We extended the handle-line generic method, so this is the code that
will be called whenever the IRC bot "hears" anything.
+This method is itself an action handler, hence the second argument
+for =message=, which we can ignore for now.
+Pleasantly, the message's argument body is passed in as the rest of
+the arguments.
+
For now the code is pretty basic: it just outputs whatever it "hears"
from a user in a channel to the current output port.
Pretty boring!
For now the code is pretty basic: it just outputs whatever it "hears"
from a user in a channel to the current output port.
Pretty boring!
@@
-174,8
+179,8
@@
Let's get it to echo whatever we say back to us.
Change handle-line to this:
#+BEGIN_SRC scheme
Change handle-line to this:
#+BEGIN_SRC scheme
- (define-method (handle-line (irc-bot <my-irc-bot>)
speaker channel
- line emote?)
+ (define-method (handle-line (irc-bot <my-irc-bot>)
message
+
speaker channel
line emote?)
(<- (actor-id irc-bot) 'send-line channel
(format #f "Bawwwwk! ~a says: ~a" speaker line)))
#+END_SRC
(<- (actor-id irc-bot) 'send-line channel
(format #f "Bawwwwk! ~a says: ~a" speaker line)))
#+END_SRC
@@
-241,8
+246,8
@@
Indeed, we do have such a method, so we /could/ rewrite handle-line
like so:
#+BEGIN_SRC scheme
like so:
#+BEGIN_SRC scheme
- (define-method (handle-line (irc-bot <my-irc-bot>)
speaker channel
- line emote?)
+ (define-method (handle-line (irc-bot <my-irc-bot>)
message
+
speaker channel
line emote?)
(irc-bot-send-line irc-bot channel
(format #f "Bawwwwk! ~a says: ~a" speaker line)))
#+END_SRC
(irc-bot-send-line irc-bot channel
(format #f "Bawwwwk! ~a says: ~a" speaker line)))
#+END_SRC
@@
-269,8
+274,8
@@
Whee, that looks like fun!
To implement it, we're going to pull out Guile's pattern matcher.
#+BEGIN_SRC scheme
To implement it, we're going to pull out Guile's pattern matcher.
#+BEGIN_SRC scheme
- (define-method (handle-line (irc-bot <my-irc-bot>)
speaker channel
- line emote?)
+ (define-method (handle-line (irc-bot <my-irc-bot>)
message
+
speaker channel
line emote?)
(define my-name (irc-bot-username irc-bot))
(define (looks-like-me? str)
(or (equal? str my-name)
(define my-name (irc-bot-username irc-bot))
(define (looks-like-me? str)
(or (equal? str my-name)
@@
-306,8
+311,8
@@
If you're getting the sense that we could make this a bit less wordy,
you're right:
#+BEGIN_SRC scheme
you're right:
#+BEGIN_SRC scheme
- (define-method (handle-line (irc-bot <my-irc-bot>)
speaker channel
- line emote?)
+ (define-method (handle-line (irc-bot <my-irc-bot>)
message
+
speaker channel
line emote?)
(define my-name (irc-bot-username irc-bot))
(define (looks-like-me? str)
(or (equal? str my-name)
(define my-name (irc-bot-username irc-bot))
(define (looks-like-me? str)
(or (equal? str my-name)
@@
-929,8
+934,8
@@
Edit the respond section to see what channel it's really sending
things to:
#+BEGIN_SRC scheme
things to:
#+BEGIN_SRC scheme
- (define-method (handle-line (irc-bot <my-irc-bot>)
speaker channel
- line emote?)
+ (define-method (handle-line (irc-bot <my-irc-bot>)
message
+
speaker channel
line emote?)
;; [... snip ...]
(define (respond respond-line)
(<- (actor-id irc-bot) 'send-line (pk 'channel channel)
;; [... snip ...]
(define (respond respond-line)
(<- (actor-id irc-bot) 'send-line (pk 'channel channel)
@@
-959,8
+964,8
@@
to looks like our own username that we respond back to the sender.
(We can remove the pk now that we know what's going on.)
#+BEGIN_SRC scheme
(We can remove the pk now that we know what's going on.)
#+BEGIN_SRC scheme
- (define-method (handle-line (irc-bot <my-irc-bot>)
speaker channel
- line emote?)
+ (define-method (handle-line (irc-bot <my-irc-bot>)
message
+
speaker channel
line emote?)
;; [... snip ...]
(define (respond respond-line)
(<- (actor-id irc-bot) 'send-line
;; [... snip ...]
(define (respond respond-line)
(<- (actor-id irc-bot) 'send-line