Gauche-XMPPのリファレンスマニュアル
Class: <xmpp-connection> サーバへのXMPPコネクションを保持するオブジェクト。以下の公開スロットがあります。 stream-id: 接続時にサーバが提示したXMPPストリームのid。文字列。 features: 接続時にサーバが提示した<features>の内容。SXML。 Condition: <xmpp-error> サーバから接続が切られた場合や、サーバの返したXMPPレスポンスのフォーマットが正しくない場合に 投げられるコンディションです。<error>を継承します。 Function: xmpp-connect host &keyword port jid-domain-part サーバに接続します。 portで接続ポートを指定できます。デフォルトは5222です。 jid-domain-partで例えば"gmail.com"と指定することで、Google Talkのような 「サーバは"talk.google.com"だけどXMPPアドレスは"romeo@gmail.com"」、という場合に対応できます。 Function: xmpp-disconnect conn 切断します。 Function: call-with-xmpp-connection host proc &keyword port jid-domain-part 高水準の便利関数で、サーバーに接続し、与えられた手続きを呼び、切断します。 hostへの接続が成功したら、procが引数を1つ、<xmpp-connection>のインスタンスをとって、呼ばれます。 procから返ったときに切断され、procの返り値がcall-with-xmpp-connectionから返されます。 例外がなげられたら、その例外がcall-with-xmpp-connectionから外へでる前に切断されます。 キーワード引数はxmpp-connectionと同じです。 Function: xmpp-receive-stanza conn stanzaを受信しSXMLで返します。受信するまで処理がブロックします。 Macro: xmpp-iq (conn &keyword id to type) body Info/Query stanza <iq ...>...</iq> を送ります。 id IQの id属性の文字列。 to IQの to属性の文字列。宛先です。 type IQのtype属性の文字列。デフォルトは"get"です。 body IQの内容のSXML。 例えばxmpp-bindは以下です。 (xmpp-iq (conn :id "bind_2" :type "set") `(bind (|@| (xmlns "urn:ietf:params:xml:ns:xmpp-bind")) (resource ,resource))) Macro: xmpp-iq-query (conn &keyword id to type xmlns node) body IQ stanza <iq ...><query ...></query></iq> をxmpp-iqより簡単に送れます。 id to type は xmpp-iqと同じです。 xmlnsはqueryのxmlns属性の文字列。 nodeはqueryの node属性の文字列。 例えばxmpp-roster-addは以下です。 (xmpp-iq-query (conn :id "roster_2" :type "set" :xmlns "jabber:iq:roster") `((item (|@| (jid ,jid) (name ,name)) (group ,group)))) Function: xmpp-discover conn &keyword to type node Service Discovery IQを送ります。 to type node はxmpp-iq-queryと同じです。 Function: xmpp-registration-requirements conn アカウント登録に何が必要かを問うIQを送ります。 Function: xmpp-register conn username password name email アカウント登録するIQを送ります。 username 登録するユーザ名の文字列 password 登録するパスワードの文字列 name 登録する本名の文字列 email 登録するEメールアドレスの文字列 Function: xmpp-cancel-registration conn アカウント登録を削除するIQを送ります。 Function: xmpp-change-password new-password アカウントのパスワードを変更するIQを送ります。 new-password 新しいパスワードの文字列 Function: xmpp-auth-select-mechanism conn mechanism 認証方法を選択するIQを送ります。 Function: xmpp-auth-requirements conn username 認証要求するIQを送ります。 Function: xmpp-bind conn resource リソースバインドIQを送ります。 resource リソースの名前の文字列。"Home"や"Office"など。 Function: xmpp-session conn セッションセットIQを送ります。 Function: xmpp-presence conn &keyword to type status show priority プリセンス <precense .../>を送ります。 to presenceの to属性の文字列。宛先です。 type presenceの type属性の文字列。 status presenceの status属性の文字列。状態です。 show presenceの show属性の文字列。 priority presenceのpriority属性の文字列。 Macro: xmpp-message (conn &keyword id to type lang) body ... メッセージ <message ...><body>...</body>...</message>を送ります。 id messageの id属性の文字列。 to messageの to属性の文字列。宛先です。 type messageの type属性の文字列。デフォルトは"chat"です。 lang messageのxml:lang属性の文字列。 Function: xmpp-request-subscription conn to 相手に友人登録をリクエストするプリセンスを送ります。 to 相手の宛先。 Function: xmpp-approve-subscription conn to 相手を友人登録するプリセンスを送ります。 to 相手の宛先。 Function: xmpp-unsubscribe conn to 相手を友人登録解除するプリセンスを送ります。 to 相手の宛先。 Function: xmpp-cancel-subscription conn to 相手からの友人登録のリクエストを拒否するプリセンスを送ります。 to 相手の宛先。 Function: xmpp-get-roster conn 自分のRoster(友人リスト)を取得するIQを送ります。 Function: xmpp-roster-add conn jid name group 誰かを自分のRosterに追加するIQを送ります。 jid その人のXMPPアドレス name その人につける名前 group その人を加えるグループ Function: xmpp-roster-remove conn jid 誰かを自分のRosterから削除するIQを送ります。 jid その人のXMPPアドレス Function: xmpp-get-privacy-lists conn 自分のプライバシーリスト全てを取得するIQを送ります。 Function: xmpp-get-privacy-list conn name 自分のnameというプライバシーリストを取得するIQを送ります。 name プライバシーリストの名前 Function: xmpp-auth conn username password サーバが提示する認証方法から適当なものを自動的に選択して認証します。 digest-md5認証を最優先し、次にplain認証、anonymous認証を選びます。 username ユーザ名です。 password パスワードです。 Function: xmpp-sasl-digest-md5 conn username password digest-md5認証します。 Function: xmpp-sasl-plain conn username password plain認証します。 Function: xmpp-sasl-anonymous conn anonymous認証します。
xmpp-message が関数じゃなくて、マクロなのはなんで?
関数だとキーワード引数が後ろに来てしまうのを嫌ったからです。
(xmpp-message conn "hello, world" :to "juliet" :type "chat")
よりも
(xmpp-message (conn :to "juliet" :type "chat") "hello world")
のほうがいいでしょ?
xmpp-message が本文の後に更に引数を取れるのはなんで?
XEP-0071:XHTML-IMに対応するためです。こう使います。
(xmpp-message (conn :to "juliet" :type "chat") "太字だよ" '(html (@ (xmlns "http://jabber.org/protocol/xhtml-im")) (body (@ (xmlns "http://www.w3.org/1999/xhtml")) (p (@ (style "font-weight:bold")) "太字だよ"))))