LINUX.ORG.RU

[jabber.el][mrim] вдруг кому пригодится


0

0

велосипедик для отправки смс через mrim-траспорт

интерес может представлять первая функция (первый «#'jabber-process-data» -> nil для подавления вывода, и прикрутить обработку сообщений от mrim.jabber.ru) остальные приблуды для интерактивного использования

можно прикрутить балансировку на несколько аккаунтов (вроде для mrim лимит порядка 5)


(defun jabber-send-sms (tel text)
  (jabber-send-iq (jabber-read-account)
		"support%corp.mail.ru@mrim.jabber.ru"
		"set"
		`(command ((xmlns  . "http://jabber.org/protocol/commands")
			   (node   . "send_sms")
			   (action . "complete"))
			  (x ((xmlns . "jabber:x:data")
			      (type  . "submit"))
			     (field ((var . "translit"))
				    (value nil "0"))
			     (field ((var . "text"))
				    (value nil ,text))
			     (field ((var . "number"))
				    (value nil ,tel))))
		#'jabber-process-data #'jabber-ahc-display
		#'jabber-process-data "Command execution failed"))

;; optional stuff
(defun read-telephone-at-point ()
  "Try to read telephone number at cursor position:
consume '+', '0-9' and possible delimeters ' ', '.', '-'
delete delimeters and replace leading '8' by '+7'"
  ((lambda (arg) (if (= 12 (length arg)) arg "+79XXXXXXXXX"))
   (replace-regexp-in-string "^8" "+7" (replace-regexp-in-string "[ .-]" ""
     (buffer-substring
      (save-excursion (skip-chars-backward "+0-9 .-") (point))
      (save-excursion (skip-chars-forward  "+0-9 .-") (point)))))))

(defun shortened-text-repr (text)
  "Represent given text (passed by string) in short form:
get first line and replace long result by dots"
  (replace-regexp-in-string "\\(.\\{16\\}\\).*" "\\1..."
			    (car (split-string text "\n"))))

(defun jabber-send-sms-interactive ()
  (interactive)
  "Read telephone number and text, taking default from kill ring."
  (let ((tel-at-point (read-telephone-at-point)) (text (car kill-ring)))
    ;; (jabber-send-sms
    (jabber-send-sms
     (read-string (concat "enter telephone number: "
			  (when tel-at-point
			    (format "(default %s) " tel-at-point)))
		  nil nil tel-at-point)
     (read-string (concat "enter text message: "
			  (unless (null text)
			    (format "(default `%s') "
				    (shortened-text-repr text))))
		  nil nil text))))

★★

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.