From cd5a511b19082f2b66205812f461113e3e0c3b73 Mon Sep 17 00:00:00 2001 From: Sander Kolman Date: Mon, 13 Nov 2017 17:45:02 +0100 Subject: [PATCH 1/4] first specs setup as example --- project.clj | 4 ++-- src/morse/api.clj | 24 +++++++++++++++++++++++- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/project.clj b/project.clj index ecea1c8..2464f41 100644 --- a/project.clj +++ b/project.clj @@ -1,9 +1,9 @@ -(defproject morse "0.3.0-SNAPSHOT" +(defproject morse "0.4.0-SNAPSHOT" :description "Telegram Bot API" :url "https://github.com/otann/morse/" - :dependencies [[org.clojure/clojure "1.8.0" :scope "provided"] + :dependencies [[org.clojure/clojure "1.9.0-RC1"] [org.clojure/tools.macro "0.1.5"] [org.clojure/core.async "0.2.374"] [org.clojure/tools.logging "0.3.1"] diff --git a/src/morse/api.clj b/src/morse/api.clj index c2fdafc..4b5f27c 100644 --- a/src/morse/api.clj +++ b/src/morse/api.clj @@ -1,9 +1,31 @@ (ns morse.api - (:require [clojure.tools.logging :as log] + (:require [clojure.spec.alpha :as s] + [clojure.tools.logging :as log] [clj-http.client :as http] [clojure.string :as string]) (:import (java.io File))) +(s/def ::token + (s/and? string? + (partial re-matches #"^\d{9}:.{35}"))) + +(s/def ::text string?) +(s/def ::chat-id int?) +(s/def ::parse-mode #{"Markdown" "HTML"}) +(s/def ::disable-webpage-preview boolean?) + +(s/def ::getMe nil?) +(s/def ::sendMessage + (s/keys :req [::chat-id ::text] + :opt [::parse-mode ::disable-webpage-preview])) + +(s/def ::method + #{(s/tuple "getMe" ::getMe) + (s/tuple "sendMessage" ::sendMessage)}) + +(s/def ::request + (s/keys :req [::token ::method])) + (def base-url "https://api.telegram.org/bot") From 5ba98ea20ac0a8e3e87b9f57cde47a170848f971 Mon Sep 17 00:00:00 2001 From: Sander Kolman Date: Wed, 10 Jan 2018 20:01:28 +0100 Subject: [PATCH 2/4] added qcodes ns with some helper functions --- project.clj | 3 ++- src/morse/api.clj | 2 +- src/morse/qcodes.clj | 23 +++++++++++++++++++++++ 3 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 src/morse/qcodes.clj diff --git a/project.clj b/project.clj index 2464f41..e3beec1 100644 --- a/project.clj +++ b/project.clj @@ -3,10 +3,11 @@ :url "https://github.com/otann/morse/" - :dependencies [[org.clojure/clojure "1.9.0-RC1"] + :dependencies [[org.clojure/clojure "1.9.0"] [org.clojure/tools.macro "0.1.5"] [org.clojure/core.async "0.2.374"] [org.clojure/tools.logging "0.3.1"] + [org.clojure/spec.alpha "0.1.143"] [clj-stacktrace "0.2.8"] [cheshire "5.5.0"] [clj-http "2.1.0"]] diff --git a/src/morse/api.clj b/src/morse/api.clj index 4b5f27c..a7116b1 100644 --- a/src/morse/api.clj +++ b/src/morse/api.clj @@ -6,7 +6,7 @@ (:import (java.io File))) (s/def ::token - (s/and? string? + (s/and string? (partial re-matches #"^\d{9}:.{35}"))) (s/def ::text string?) diff --git a/src/morse/qcodes.clj b/src/morse/qcodes.clj new file mode 100644 index 0000000..31a9773 --- /dev/null +++ b/src/morse/qcodes.clj @@ -0,0 +1,23 @@ +(ns morse.qcodes + (:require [compojure.core :refer [make-route]] + [clojure.core.async :as a] + [ring.middleware.json :refer [wrap-json-response wrap-json-body]] + [morse.api :as api] + [morse.polling :as pol])) + +(defn- only [pred val] + (when (pred val) + val)) + +(defn req->morse [safe-url handler] + (make-route :post (str "/" safe-url) + (wrap-json-response + (wrap-json-body + (comp handler :body) + {:keywords? true :bigdecimals? true})))) + +(defn direct-reply [token handler] + (fn [{{{chatid :id} :chat} :message :as req}] + (when-let [reply (only string? (handler req))] + (api/send-text token chatid reply)) + {:status 200})) From bf4f4798e26e6eb01f8f338e79a0a593b93f4ee8 Mon Sep 17 00:00:00 2001 From: Sandarr95 Date: Wed, 10 Jan 2018 20:34:57 +0100 Subject: [PATCH 3/4] Update README.md Added description for Q-Code --- README.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/README.md b/README.md index d93a17e..ea00697 100644 --- a/README.md +++ b/README.md @@ -261,6 +261,34 @@ Sends an answer to an callback query sent from inline keyboards. show-alert) ``` + +## Q-Code + +Q-Codes in Morse are shorthands for common patterns. `morse.qcodes/direct-reply` & `morse.qcodes/req-morse` are the Q-Codes already available. Here is an example usage of both. + +```clojure +(ns look.anotherbadlynamedns + (:require [morse.qcodes :as q] + [morse.handlers :as h] + [somehttpserver :as http])) + +(def token "") +(def webhook "") + +(defn just-say-hi [name] + (str "Hi " name "!")) + +(defhandler thisismyapp + (message {:keys [text]} (just-say-hi text))) + +(def therealhandler (q/direct-reply token thisismyapp)) + +(morse.api/set-webhook token (str webhook "/" token)) ;; make webhooks safe by using the token as path +(def myserver (http/start-server (q/req->morse token therealhandler) {:port 80})) +;; req->morse will convert json to edn and make sure the proper path (token) is used. +``` + + ## License Copyright © 2017 Anton Chebotaev From f8615d2a4d965115f6a979767919f5458461569b Mon Sep 17 00:00:00 2001 From: Sander Kolman Date: Mon, 7 Sep 2020 09:12:45 +0200 Subject: [PATCH 4/4] added deps.edn to depend via git --- deps.edn | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 deps.edn diff --git a/deps.edn b/deps.edn new file mode 100644 index 0000000..ef6e4b6 --- /dev/null +++ b/deps.edn @@ -0,0 +1,11 @@ +{:paths ["src"] + :deps {org.clojure/clojure {:mvn/version "1.9.0"} + org.clojure/tools.macro {:mvn/version "0.1.5"} + org.clojure/core.async {:mvn/version "0.4.474"} + org.clojure/tools.logging {:mvn/version "0.4.1"} + org.clojure/spec.alpha {:mvn/version "0.1.143"} + clj-stacktrace {:mvn/version "0.2.8"} + cheshire {:mvn/version "5.8.1"} + clj-http {:mvn/version "3.9.1"}} + :mvn/repos {"central" {:url "https://repo1.maven.org/maven2/"} + "clojars" {:url "https://repo.clojars.org/"}}} \ No newline at end of file