Skip to content

Instantly share code, notes, and snippets.

@ekd123
Created August 11, 2013 16:41
Show Gist options
  • Select an option

  • Save ekd123/6205605 to your computer and use it in GitHub Desktop.

Select an option

Save ekd123/6205605 to your computer and use it in GitHub Desktop.

Revisions

  1. ekd123 created this gist Aug 11, 2013.
    119 changes: 119 additions & 0 deletions cl-xmppgame.lisp
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,119 @@
    (setf cl-xmppgame:*domain* "xmppdomain.org")
    (setf cl-xmppgame:*username* "bot")
    (setf cl-xmppgame:*password* "your password here")

    (require :drakma)
    (require :cl-json)
    (require :bordeaux-threads)

    (cl-xmppgame:add-command-handler
    ""
    #'(lambda (conn from username arglist)
    (xmpp:message conn from (format nil "~a,我鄭重警告你,你說「喵」的話是會被老貓喫掉的!" (if (first arglist) (first arglist) username)))))

    (cl-xmppgame:add-command-handler
    "測試"
    #'(lambda (conn from username arglist)
    "把每個參數按每個消息發出去"
    (declare (ignore username))
    (dolist (item arglist)
    (xmpp:message conn from (format nil "~a" item)))))

    (cl-xmppgame:add-command-handler
    ""
    #'(lambda (conn from username arglist)
    "發一個以 {用戶名} *arglist 爲格式的消息"
    (xmpp:message conn from (format nil "~a ~{~a ~}" username arglist))))

    (cl-xmppgame:add-command-handler
    "大家好"
    #'(lambda (conn from username arglist)
    "向大家問好!"
    (declare (ignore arglist))
    (xmpp:message conn from (format nil "~a 在向大家問好!" username))))

    (cl-xmppgame:add-command-handler
    "大家好啊大家好"
    #'(lambda (conn from username arglist)
    (declare (ignore arglist))
    (xmpp:message conn from (format nil "~a 很不耐煩地在向大家問好……" username))))

    (cl-xmppgame:add-command-handler
    "刷屏"
    #'(lambda (conn from username arglist)
    "發一堆同樣的消息,第一個參數是文字,第二個是次數"
    (let ((count (handler-case (parse-integer (second arglist))
    (error () 0))))
    (if (> count 10)
    (xmpp:message conn from "你想水死大家嗎?")
    (dotimes (i count)
    (xmpp:message conn from (format nil "~a~a次說 ~a"
    username (1+ i) (first arglist))))))))

    (cl-xmppgame:add-command-handler
    "去死"
    (lambda (conn from username arglist)
    (declare (ignore arglist))
    (if (string= username "紅繁君")
    (progn (xmpp:message conn from "君要臣死 臣不得不死……")
    (error 'cl-xmppgame:signaled-exit))
    (xmpp:message conn from "你不是主人,我不聽你的!"))))

    (cl-xmppgame:add-command-handler
    "死ね"
    (lambda (conn from username arglist)
    (declare (ignore arglist))
    (if (string= username "紅繁君")
    (progn (xmpp:message conn from "はい!マスター様。")
    (error 'cl-xmppgame:signaled-exit))
    (xmpp:message conn from "アンタはバカヤロウ!"))))

    (defvar *random-to-say* #("這句話說完了!" "句號" "真是不錯吶" "呵呵" "還是洗洗睡吧" "不作死就不會死!" "有本事說句「喵」啊~" "其實我是貓形機器人" ""))

    (defun vector-last (obj)
    (elt obj (1- (length obj))))

    (defun random-select (vector)
    (elt vector (random (length vector))))

    (cl-xmppgame:add-hook
    #'(lambda (conn from username msg)
    (declare (ignore username))
    (if (or (char-equal (vector-last msg) #\()
    (char-equal (vector-last msg) #\())
    (xmpp:message conn from (format nil "~a" (random-select *random-to-say*))))
    nil))

    (cl-xmppgame:add-hook
    #'(lambda (conn from username msg)
    (declare (ignore username))
    (if (string-equal "ping 括號機器人" msg)
    (xmpp:message conn from "括號機器人在此"))))

    ;; this is a damn evil function...
    ;; the very magical magic you can do magically
    ;; 使用它是你這輩子最後悔的事。
    ;; 玄天廣大,法力無窮。
    (cl-xmppgame:add-hook
    #'(lambda (conn from username msg)
    (declare (ignorable conn from username)
    (special conn from username msg))
    (when (equal (search "eval " msg) 0)
    (handler-case (eval (read-from-string (subseq msg 5)))
    (error () t))
    t)
    nil))

    (cl-xmppgame:add-command-handler
    "py"
    #'(lambda (conn from username arglist)
    (handler-case
    (cl-json:json-bind (_a _b _c _d _e rs) (drakma:http-request (format nil "http://ime.qq.com/fcgi-bin/getword?q=~a" (first arglist)))
    (declare (ignore _a _b _c _d _e))
    (xmpp:message conn from (format nil "~a: ~a" username (if (first rs) (first rs) "抱歉,可能因爲你的輸入有誤,沒有獲得結果。"))))
    (error () (xmpp:message conn from (format nil "~a: 抱歉,因網路問題無法提供結果。" username))))))

    ;; (cl-xmppgame:add-hook
    ;; #'(lambda (conn from username msg)
    ;; (format t "HOOK:[~a] ~a~%" username msg)
    ;; nil))