diff options
author | Adrian Kummerlaender | 2016-03-15 19:10:06 +0100 |
---|---|---|
committer | Adrian Kummerlaender | 2016-03-15 19:10:06 +0100 |
commit | a6dbf20faf95ae892a805b8e83c131a4733f564f (patch) | |
tree | 94f2e6c16b4ea6d6a98a725a4a30b1226849d277 | |
parent | 040875369c2ef0d10a8a0d68852ebea1b146ac85 (diff) | |
download | Telebot-a6dbf20faf95ae892a805b8e83c131a4733f564f.tar Telebot-a6dbf20faf95ae892a805b8e83c131a4733f564f.tar.gz Telebot-a6dbf20faf95ae892a805b8e83c131a4733f564f.tar.bz2 Telebot-a6dbf20faf95ae892a805b8e83c131a4733f564f.tar.lz Telebot-a6dbf20faf95ae892a805b8e83c131a4733f564f.tar.xz Telebot-a6dbf20faf95ae892a805b8e83c131a4733f564f.tar.zst Telebot-a6dbf20faf95ae892a805b8e83c131a4733f564f.zip |
Implement simple number guessing game example
-rw-r--r-- | README.md | 2 | ||||
-rw-r--r-- | example/guess.scm | 59 |
2 files changed, 61 insertions, 0 deletions
@@ -27,6 +27,8 @@ The only non-API wrapper provided by this library is `pollUpdates` which enables `example/echo.scm` implements a bot that echoes all messages back to their sender. +`example/guess.scm` implements a simple number guessing game. + ## Dependencies * [openssl](http://wiki.call-cc.org/eggref/4/openssl) diff --git a/example/guess.scm b/example/guess.scm new file mode 100644 index 0000000..c3267ff --- /dev/null +++ b/example/guess.scm @@ -0,0 +1,59 @@ +(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) + (telebot:sendMessage token + chat_id: chat_id + text: text)) + +(define (print-failed-guess chat_id answer guess) + (print "User " chat_id " guessed " guess " instead of " answer)) + +(define (make-conversation chat_id) + (let ((chat_id chat_id) + (answer (random 100))) + (lambda (text) + (let ((guess (string->number text))) + (if (equal? #f guess) + (send chat_id + "This is not a number - please provide your guess in base 10.") + (cond ((= guess answer) + (begin (send chat_id + "Correct! Feel free to guess the next number.") + (print "User " chat_id " correctly guessed " answer) + (set! answer (random 100)))) + ((< guess answer) + (begin (send chat_id + "Too small. Try again.") + (print-failed-guess chat_id answer guess))) + ((> guess answer) + (begin (send chat_id + "Too large. Try again.") + (print-failed-guess chat_id answer guess))))))))) + +(define (handle-message m) + (let ((chat_id (resolve-query '(message from id) m)) + (text (resolve-query '(message text) m))) + (if (hash-table-exists? conversations chat_id) + ((hash-table-ref conversations chat_id) text) + (begin (hash-table-set! conversations chat_id (make-conversation chat_id)) + (print "Started talking to user " chat_id) + (send chat_id + "Hi there! I just generated a random number for you to guess!"))))) + +(randomize) +(telebot:pollUpdates token + (lambda (u) (if (telebot:is-message? u) + (handle-message u)))) |