2007年12月11日
libsecondlifeサンプル - チャットとIM送受信
チャンネルを指定したチャットや、相手のUUIDを指定したIMの送信ができます。
libsecondlifeのDeveloper Portal にある以下のページを参照してください。
http://www.libsecondlife.org/wiki/Say_something_inworld_%28chat%29
http://www.libsecondlife.org/wiki/Respond_to_inworld_chat
http://www.libsecondlife.org/wiki/Send_an_instant_message
http://www.libsecondlife.org/wiki/Respond_to_instant_messages
使い方によってはスパムになるので注意しましょう。
以下はサンプルコードです。
自分でチャットに発言した内容を自分で拾っています。
タイピングの開始/終了は出していません。
聞こえる範囲には、Whisper, Normal, Shoutの3つが選べます。
ChatType.Say は古い仕様で削除予定なので使用しないようにとの説明が上記のページにあります。
また、自分にIMを送信し受信しています。
AgentManager.cs には、グループIMを送信するための関数もあります。
AgentManager.cs を参照ください。
例:client.Self.InstantMessageGroup(groupUuid, msg)
チャットの内容から特定の単語を拾って、挨拶と簡単な受け答えができ、
詳しい話が聞きたいという人には、担当者を呼ぶのでお待ちくださいと言うような、
コールセンター風の使い方をしてもいいかもしれません。
(外見は普通のアバターですし)
libsecondlifeのDeveloper Portal にある以下のページを参照してください。
http://www.libsecondlife.org/wiki/Say_something_inworld_%28chat%29
http://www.libsecondlife.org/wiki/Respond_to_inworld_chat
http://www.libsecondlife.org/wiki/Send_an_instant_message
http://www.libsecondlife.org/wiki/Respond_to_instant_messages
使い方によってはスパムになるので注意しましょう。
以下はサンプルコードです。
自分でチャットに発言した内容を自分で拾っています。
タイピングの開始/終了は出していません。
聞こえる範囲には、Whisper, Normal, Shoutの3つが選べます。
ChatType.Say は古い仕様で削除予定なので使用しないようにとの説明が上記のページにあります。
また、自分にIMを送信し受信しています。
#libsecondlifeのロード
import clr
clr.AddReferenceToFile("libsecondlife.dll")
import libsecondlife
import time
#ログイン情報の設定
firstName = 'abcd' #苗字
lastName = 'efgh' #名前
passWord = 'ijkl' #パスワード
#イベント待ち合わせ用クラスの定義
class EventTracker:
def __init__(self):
self.data=False
def Clear(self):
self.data=False
def Set(self):
self.data=True
def Wait(self):
while not self.data:
time.sleep(0.1)
#チャットイベント処理用ハンドラの定義
def chatHandler(message, hearRange, chatType, chatSourceType, agentName, uuid1, uuid2, locationVector):
print 'message =', message
print 'hearRange =', hearRange
print 'chatType =', chatType #StartTyping, Normal, StopTyping
print 'chatsourceType =', chatSourceType
print 'agentName =', agentName
print 'uuid1 =', uuid1 #SourceID?
print 'uuid2 =', uuid2 #OwnerID?
print 'locationVector =', locationVector
#IM受信イベント処理用のハンドラの定義
def instantMessageHandler(im, sim):
print 'sim=', sim.ToString()
attrList = [
'ToAgentID',
'FromAgentID',
'FromAgentName',
'ParentEstateID',
'RegionID',
'Position',
'Dialog',
'GroupIM',
'IMSessionID',
'Timestamp',
'Message',
'Offline',
'BinaryBucket'
]
for i in attrList:
print i, '=', eval('im.%s' % (i) )
#初期設定
event = EventTracker()
client = libsecondlife.SecondLife()
client.Self.OnChat += libsecondlife.AgentManager.ChatCallback(chatHandler)
client.Self.OnInstantMessage += libsecondlife.AgentManager.InstantMessageCallback(instantMessageHandler)
#接続
client.Network.Login(firstName, lastName, passWord, '', '')
time.sleep(10)
#実際の処理
#現在時刻をチャットで発言する
msg = 'now ' + time.strftime('%Y-%m-%d %H:%M:%S')
chatType = libsecondlife.ChatType.Normal #ChatType.Say is obsolete version and will likely be removed in the near future.
client.Self.Chat(msg, 0, chatType)
time.sleep(10)
#自分自身にIMを送信する
targetUuid = client.Self.AgentID
msg = 'now ' + time.strftime('%Y-%m-%d %H:%M:%S')
client.Self.InstantMessage(targetUuid, msg)
time.sleep(10)
#切断
client.Network.Logout()
AgentManager.cs には、グループIMを送信するための関数もあります。
AgentManager.cs を参照ください。
例:client.Self.InstantMessageGroup(groupUuid, msg)
チャットの内容から特定の単語を拾って、挨拶と簡単な受け答えができ、
詳しい話が聞きたいという人には、担当者を呼ぶのでお待ちくださいと言うような、
コールセンター風の使い方をしてもいいかもしれません。
(外見は普通のアバターですし)
グループを作ってばかりいると金がかかる
TestClientにvoice 関連のコマンドが追加された
CookComputing.XmlRpcV2 のエラーの時
灰色のハーレム
SLアイテム検索ページ仮実装しました
libsecondlifeサンプル - 画像の取得
TestClientにvoice 関連のコマンドが追加された
CookComputing.XmlRpcV2 のエラーの時
灰色のハーレム
SLアイテム検索ページ仮実装しました
libsecondlifeサンプル - 画像の取得
Posted by march at 18:13│Comments(0)
│libsecondlife