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"))
        "太字だよ"))))