diff options
author | Adrian Kummerlaender | 2016-03-16 23:01:20 +0100 |
---|---|---|
committer | Adrian Kummerlaender | 2016-03-16 23:01:20 +0100 |
commit | 910954b4a71c45e680ed834a45d6cfecbdeb928c (patch) | |
tree | 689daae8b7c12e615d7442a8eb2484554d2942b5 /example | |
parent | 05fa1103796cdbda30afb7be1e569674d6076f87 (diff) | |
download | Telebot-910954b4a71c45e680ed834a45d6cfecbdeb928c.tar Telebot-910954b4a71c45e680ed834a45d6cfecbdeb928c.tar.gz Telebot-910954b4a71c45e680ed834a45d6cfecbdeb928c.tar.bz2 Telebot-910954b4a71c45e680ed834a45d6cfecbdeb928c.tar.lz Telebot-910954b4a71c45e680ed834a45d6cfecbdeb928c.tar.xz Telebot-910954b4a71c45e680ed834a45d6cfecbdeb928c.tar.zst Telebot-910954b4a71c45e680ed834a45d6cfecbdeb928c.zip |
Implement conversation-manager pattern framework function
The _conversation-manager_ pattern previously tested in the _guess_ example game should be useful for other kinds of use cases and as such was moved into the module.
`make-conversation-manager` maintains an internal hash table of per-conversation (i.e. chat-ids) closures constructed by the provided constructor function.
Thus bot implementations such as the _guess_ game example only need to instantiate a conversation-manager, call it via e.g. `poll-updates` and implement the actual conversation logic in a custom conversation closure.
Telebot's framework function names are now consistently separated by minuses instead of capital letters.
Diffstat (limited to 'example')
-rw-r--r-- | example/echo.scm | 10 | ||||
-rw-r--r-- | example/guess.scm | 62 |
2 files changed, 29 insertions, 43 deletions
diff --git a/example/echo.scm b/example/echo.scm index 2e190a7..90d0af5 100644 --- a/example/echo.scm +++ b/example/echo.scm @@ -25,8 +25,8 @@ chat_id: chat_id text: text))) -(telebot:pollUpdates token - (lambda (u) - (if (telebot:is-message? u) - (begin (print-message u) - (echo-message u))))) +(telebot:poll-updates token + (lambda (u) + (if (telebot:is-message? u) + (begin (print-message u) + (echo-message u))))) diff --git a/example/guess.scm b/example/guess.scm index e1b419c..fd200fa 100644 --- a/example/guess.scm +++ b/example/guess.scm @@ -1,51 +1,37 @@ (require-extension telebot (prefix telebot telebot:)) -(use srfi-69) -(use extras) -(use data-structures) - (define (resolve-query query tree) (fold (lambda (x y) (alist-ref x y)) tree query)) -(define token (car (command-line-arguments))) -(define conversations (make-hash-table)) - -(define (send chat_id text) - (print chat_id " <- \"" text "\"") - (telebot:sendMessage token - chat_id: chat_id - text: text)) +(define (make-sender token chat_id) + (lambda (text) + (print chat_id " <- \"" text "\"") + (telebot:sendMessage token + chat_id: chat_id + text: text))) -(define (make-conversation chat_id) - (let ((chat_id chat_id) - (answer (random 100))) - (send chat_id - "Hi there! I just generated a random number for you to guess!") - (lambda (text) - (let ((guess (string->number text))) +(define (make-conversation token chat_id) + (let* ((chat_id chat_id) + (send (make-sender token chat_id)) + (answer (random 100))) + (send "Hi there! I just generated a random number for you to guess!") + (lambda (update) + (let* ((text (resolve-query '(message text) update)) + (guess (string->number text))) + (print chat_id " -> \"" text "\"") (if (number? guess) (cond ((= guess answer) - (begin (send chat_id "Correct! Feel free to guess the next number.") + (begin (send "Correct! Feel free to guess the next number.") (set! answer (random 100)))) - ((< guess answer) (send chat_id "Too small. Try again.")) - ((> guess answer) (send chat_id "Too large. Try again."))) - (send chat_id - "This is not a number - please provide your guess in base 10.")))))) - -(define (handle-message m) - (let ((chat_id (resolve-query '(message from id) m)) - (text (resolve-query '(message text) m))) - (print chat_id " -> \"" text "\"") - (if (hash-table-exists? conversations chat_id) - ((hash-table-ref conversations chat_id) text) - (hash-table-set! conversations - chat_id - (make-conversation chat_id))))) + ((< guess answer) (send "Too small. Try again.")) + ((> guess answer) (send "Too large. Try again."))) + (send "This is not a number - please provide your guess in base 10.")))))) -(randomize) -(telebot:pollUpdates token - (lambda (u) (if (telebot:is-message? u) - (handle-message u)))) +(let* ((token (car (command-line-arguments))) + (converse (telebot:make-conversation-manager token + make-conversation))) + (randomize) + (telebot:poll-updates token converse)) |