telegram.lisp 1.5 KB

123456789101112131415161718192021222324252627282930313233343536
  1. (in-package #:chatikbot)
  2. (defvar *telegram-token* nil "Telegram bot token")
  3. (defparameter +telegram-api-format+ "https://api.telegram.org/bot~A/~A")
  4. (defun %telegram-api-call (method &optional args)
  5. (let* ((params (loop for (k . v) in args collect (cons
  6. (princ-to-string k)
  7. (princ-to-string v))))
  8. (response (yason:parse
  9. (flexi-streams:octets-to-string
  10. (drakma:http-request (format nil +telegram-api-format+ *telegram-token* method)
  11. :method :post
  12. :parameters params
  13. :external-format-out :utf8)
  14. :external-format :utf8)
  15. :object-as :alist)))
  16. (unless (aget "ok" response)
  17. (error (aget "description" response)))
  18. (aget "result" response)))
  19. (defun telegram-get-updates (&key offset limit timeout)
  20. (%telegram-api-call
  21. "getUpdates"
  22. (list (cons "offset" offset)
  23. (cons "limit" limit)
  24. (cons "timeout" timeout))))
  25. (defun telegram-send-message (chat-id text &key disable-web-preview reply-to reply-markup)
  26. (%telegram-api-call
  27. "sendMessage"
  28. (list (cons "chat_id" chat-id)
  29. (cons "text" text)
  30. (cons "disable_web_page_preview" disable-web-preview)
  31. (cons "reply_to_message_id" reply-to)
  32. (cons "reply_markup" reply-markup))))