好友
好友API可以让您获取好友列表数据以及用户的基本信息。
var greenworks = require('./greenworks');
if (greenworks.init()) {
greenworks.on('persona-state-change',
function(steam_id, persona_change_flag) {
if (persona_change_flag == greenworks.PersonaChange.Name)
console.log("Change to new name: " + steam_id.getPersonaName());
});
greenworks.on('game-connected-friend-chat-message',
function(steam_id, message_id) {
var info = greenworks.getFriendMessage(steam_id.getRawSteamID(), message_id,
2048);
if (info.chatEntryType == greenworks.ChatEntryType.ChatMsg) {
var message = info.message;
console.log("Receive a message from " + steam_id.getPersonaName() + ": " +
message);
greenworks.replyToFriendMessage(steam_id.getRawSteamID(),
"Hello, I received your message.");
}
});
// Listen to messages from friends.
greenworks.setListenForFriendsMessage(true);
// Get the number of regular friends.
console.log(greenworks.getFriendCount(greenworks.FriendFlags.Immediate));
var friends = greenworks.getFriends(greenworks.FriendFlags.Immediate);
for (var i = 0; i < friends.length; ++i) {
console.log(friends[i].getPersonaName());
greenworks.requestUserInformation(friends[i].getRawSteamID(), true);
}
}
1. 对象
1.1. 好友标识位
greenworks.FriendFlags
代表SteamSDK中的 EFriendFlags
,用于获取一个枚举好友列表,或者是快速查看用户之间的关系。
-
None
(0.无) -
Blocked
(1.当前用户已经忽略的用户) -
FriendshipRequested
(2.已经向当前用户发送好友申请的用户) -
Immediate
(4.当前用户的"常规"好友) -
ClanMember
(8.与当前用户同属于一个Steam小组的用户) -
OnGameServer
(16.与当前用户在同一个游戏服务器上的好友;通过 设置和谁一起玩过 设置) -
RequestingFriendship
(128.当前用户已经向其发送好友申请的用户) -
RequestingInfo
(256.在调用 请求用户信息 后正在发送自己额外信息的用户) -
Ignored
(512.当前用户已经屏蔽与他们联系的用户) -
IgnoredFriend
(1024.屏蔽当前用户的用户;但是当前用户仍然知道他们) -
ChatMember
(4096.在同一个聊天中的用户) -
All
(65535.返回所有好友的标识位)
1.2. 好友关系
greenworks.FriendRelationship
代表SteamSDK中的 EFriendRelationship
(和其它用户的关系)。
-
None
(0.没有关系的用户) -
Blocked
(1.用户刚刚点击了好友邀请上的忽略。这不会被存储) -
RequestRecipient
(2.已经申请与当前用户成为朋友的用户) -
Friend
(3."常规"好友) -
RequestInitiator
(4.当前用户已经发送好友申请的用户) -
Ignored
(5.当前用户已经明确屏蔽此用户发表的评论、聊天等。这是会被存储的) -
IgnoredFriend
(6.已经屏蔽当前用户的用户) -
Suggested
(7.已废弃 — 未使用) -
Max
(8.未使用 — 用于循环判断朋友关系的总数)
1.3. 资料变化
greenworks.PersonaChange
代表SteamSDK中的 EPersonaChange
,用于 persona-state-change
事件。
它描述了客户端最近了解到发生了哪些变化,所以在启动时,你会看到每个好友的名字、头像以及好友关系的变化。
-
Name
(1) -
Status
(2) -
ComeOnline
(4) -
GoneOffline
(8) -
GamePlayed
(16) -
GameServer
(32) -
Avatar
(64) -
JoinedSource
(128) -
LeftSource
(256) -
RelationshipChanged
(512) -
NameFirstSet
(1024) -
FacebookInfo
(2048) -
NickName
(4096) -
SteamLevel
(8192)
1.4. 账号类型
greenworks.AccountType
代表SteamSDK中的 EAccountType
(Steam 账户类型)。
-
Invalid
(0.用于无效 Steam ID) -
Individual
(1.普通用户帐户) -
Multiseat
(2.多座位(如网吧)帐户) -
GameServer
(3.持久(非匿名)游戏服务器帐户) -
AnonymousGameServer
(4.匿名游戏服务器帐户) -
Pending
(5.待处理) -
ContentServer
(6.Valve 内部内容服务器帐户) -
Clan
(7.Steam 组(群组)) -
Chat
(8.Steam 组聊天或大厅) -
ConsoleUser
(9.虚拟 Steam ID,用于 PS3 本地 PSN 帐户或 360 Live 帐户等) -
AnonymousUser
(10.匿名用户帐户 (用来创建帐户或重置密码)) -
Max
(11.此字段最多 16 项)
1.5. 聊天消息类型
greenworks.ChatEntryType
Represents Steam SDK EChatEntryType
(previously was only friend-to-friend message types).
-
Invalid
(0无效。) -
ChatMsg
(1来自其他用户的普通文本消息。) -
Typing
(2另一用户正在输入,不用于多用户群聊。) -
InviteGame
(3其他用户邀请进入当前进行的游戏。) -
Emote
(4文本表情包(已弃用,应视作 ChatMsg 处理)。) -
LeftConversation
(6一名用户离开了对话(关闭了对话窗口)。) -
Entered
(7用户加入聊天,用于多用户群聊与组聊天。) -
WasKicked
(8用户被踢出(数据:执行踢出操作的用户的 Steam ID)。) -
WasBanned
(9用户被封(数据:执行封禁操作的用户的 Steam ID)。) -
Disconnected
(10用户掉线。) -
HistoricalChat
(11来自用户的聊天历史记录的聊天消息或离线消息。) -
LinkBlocked
(14聊天过滤器移除了一个链接。)
2. SteamID
代表 CSteamID
的对象。
`SteamID`对象有如下方法:
-
SteamID.isAnonymous()
返回是否是一个匿名账号。
-
SteamID.isAnonymousGameServer()
返回是否为匿名游戏服务器id。
-
SteamID.isAnonymousGameServerLogin()
Returns whether it is an anonymous game server login that will be filled in.
-
SteamID.isAnonymousUser()
返回是否是匿名用户账号 (用于创建账户或重置密码)。
-
SteamID.isChatAccount()
返回是否是一个聊天account id。
-
SteamID.isClanAccount()
返回是否是一个小组account id。
-
SteamID.isConsoleUserAccount()
返回是否是PSN好友账号的虚拟SteamID。
-
SteamID.isContentServerAccount()
返回是否是一个内容服务器的account id。
-
SteamID.isGameServerAccount()
返回是否是一个游戏服务器的account id (要么是持久,要么是匿名)。
-
SteamID.isIndividualAccount()
返回是否是一个单独用户的account id。
-
SteamID.isPersistentGameServerAccount()
返回是否是一个持久(非匿名)的游戏服务器account id。
-
SteamID.isLobby()
返回是否为聊天account id。
-
SteamID.getAccountID()
返回一个代表用户身份的 Integer
值。
-
SteamID.getRawSteamID()
返回代表SteamID的 String
值(将CSteamID转换为64位的形式)。
-
SteamID.getAccountType()
返回 greenworks.AccountType
字段。
-
SteamID.isValid()
返回是否为有效account。
-
SteamID.getStaticAccountKey()
返回一个代表64位静态account key的字符串。
他会将SteamID中静态的部分转换为64位的形式。 对于多座位用户(比如网吧用户),该账户的所有实例都具有相同的静态account key,因此可以通过静态account key将他们分在一组中。
-
SteamID.getPersonaName()
返回一个代表用户名字的字符串。
-
SteamID.getNickname()
返回当前用户为指定玩家设置的昵称 String
。 如果没有为该玩家设置昵称,则为空。
-
SteamID.getRelationship()
返回一个 Integer
代表与用户关系的。
-
SteamID.getSteamLevel()
返回一个 Integer
代表steam等级的。
3. 方法
3.1. 获取好友数量
greenworks.getFriendCount(friend_flag)
-
friend_flag
greenworks.FriendFlags
返回一个 Integer
表示好友的人数。
3.2. 根据类型获取所有好友
greenworks.getFriends(friend_flag)
-
friend_flag
greenworks.FriendFlags
返回 SteamID 对象数组,每个 SteamID
表示一个朋友。
3.3. 请求用户信息
greenworks.requestUserInformation(raw_steam_id, require_name_only)
-
raw_steam_id
String: 64位形式的SteamId,从SteamID.getRawSteamID()
获得 -
require_name_only
Boolean:只返回昵称(true)吗? 还是同时返回名称和头像(false)?
请求指定用户的昵称及头像(可选)。 如果返回 true 表示已请求数据,收到数据时将会触发 persona-state-changed
回调; 如果返回 false 表示已经有了该用户的详细数据,需要这些信息的函数可立即使用。
如果 require_name_only
是true,则会下载该用户的头像(下载头像非常缓慢,并且会改动本地缓存,所以如果不需要头像,请勿发出请求)。
3.4. 获取好友小型头像
greenworks.getSmallFriendAvatar(raw_steam_id)
-
raw_steam_id
String: 64位格式的SteamId,从SteamID.getRawSteamID()
获得
获取小型(32*32 像素)头像。 返回的integer型句柄可以被 getImageRGBA()
使用; 如果未设置头像则返回 0。
3.5. 获取好友中型头像
greenworks.getMediumFriendAvatar(raw_steam_id)
-
raw_steam_id
String: 64位格式的SteamId,从SteamID.getRawSteamID()
获得
获取中型(64*64 像素)头像。 返回的integer型句柄可以被 getImageRGBA()
使用; 如果未设置头像则返回 0。
3.6. 获取好友大型头像
greenworks.getLargeFriendAvatar(raw_steam_id)
-
raw_steam_id
String: 64位格式的SteamId,从SteamID.getRawSteamID()
获得
获取大型(128*128 像素)头像。 返回的integer型句柄可以被 getImageRGBA()
使用; 如果未设置头像则返回 0; 如果图像数据尚未载入并请求下载,返回 -1。 在此情况下,请等待 avatar-image-loaded
回调,然后再次调用。
3.7. 设置监听好友消息
greenworks.setListenForFriendsMessage(intecept_enabled)
-
intercept_enabled
Boolean 启用(true)或关闭((false)拦截好友消息?
设置监听 Steam 好友的聊天消息事件 (game-connected-friend-chat-message
)。 返回一个 Boolean
,表示是否成功设置了侦听器。
3.8. 回复好友消息
greenworks.replyToFriendMessage(raw_steam_id, message)
-
raw_steam_id
String: 要发送消息至的好友的 Steam ID。 -
message
String: 待发送的 UTF-8 格式消息。
给 Steam 好友发送一则消息。 返回一个 Boolean
,表示消息是否成功发送。
3.9. 获取好友消息
greenworks.getFriendMessage(raw_steam_id, message_id, maximum_message_size)
-
raw_steam_id
String: 发出该消息的好友的 Steam ID。 -
message_id
Integer 消息的索引。 应为 GameConnectedFriendChatMsg_t 的 m_iMessageID 字段。 -
maximum_message_size
Integer 缓冲区接收的最大消息大小
返回一个 String
,表示来自朋友的消息。
3.10. 获取好友姓名(显示名称)
greenworks.getFriendPersonaName(raw_steam_id)
-
raw_steam_id
String: 另一位用户的 Steam ID。
返回表示指定用户个人(显示)姓名的 String
。
3.11. 设置当前用户的丰富状态键/值
greenworks.setRichPresence(pchKey, pchValue)
-
pchKey
String: 要设置的丰富状态 'key'。 不可比 k_cchMaxRichPresenceKeyLength 中指定的长。 -
pchValue
String: 要与pchKey
关联的丰富状态 'value'。 不可比 k_cchMaxRichPresenceValueLength 中规定的长。 若设为空字符串("")或 NULL,便会移除已设置的键。
返回一个 Boolean
值:
true
表示丰富状态设置成功。
false
有下面这些情况:
-
pchKey
超过了k_cchMaxRichPresenceKeyLength
中规定的大小,或者长度为 0 -
pchValue
超过了k_cchMaxRichPresenceValueLength
中规定的大小。 -
用户已经达到了 k_cchMaxRichPresenceKeys 指定的丰富状态键的最大数量。
3.13. 获取好友的丰富状态
greenworks.getFriendRichPresence(steamIDFriend, pchKey)
-
steamIDFriend
String: 要获取其 Rich Presence 值的好友。 -
pchKey
String: 要请求的 Rich Presence 键。
返回一个 String
值,表示指定好友的丰富状态
3.14. 设置和谁一起玩过
greenworks.setPlayedWith(steamIDUserPlayedWith)
将目标用户标记为“一起玩过游戏的”。
-
steamIDUserPlayedWith
String: 一起玩过游戏的另一位用户。
3.15. 获取好友正在玩的游戏
greenworks.getFriendGamePlayed(steamIDFriend)
-
steamIDFriend String: 另一位用户的 Steam ID
如果好友在游戏中,则会返回一个 FriendGameInfo_t 对象,否则会返回 undefined
。
3.16. 激活邀请游戏对话框
greenworks.activateGameOverlayInviteDialog(steamIDLobby)
激活 Steam 界面,打开邀请对话框。 从此窗口发出进入该大厅的邀请。
-
steamIDLobby String: 选定玩家将受邀进入的大厅的 Steam ID。
3.17. 打开特定用户的对话框
greenworks.activateGameOverlayToUser(pchDialog, CSteamID steamID)
激活 Steam 界面,打开指定的对话框
-
pchDialog
String:要打开的对话框 -
steamID
String: 要将此对话框打开至的上下文的 Steam ID。
pchDialog有下面这些有效选项:
-
"steamid" - 打开界面网页浏览器,前往指定的用户或组资料。
-
"chat" - 打开与指定用户的聊天窗口,或加入组聊天。
-
"jointrade" - 打开以 ISteamEconomy/StartTrade Web API 开始的 Steam 交易会话窗口。
-
"stats" - 打开界面网页浏览器,前往指定用户的统计。
-
"achievements" - 打开界面网页浏览器,前往指定用户的成就。
-
"friendadd" - 以最小模式打开界面,提示用户将目标用户加为好友。
-
"friendremove" - 以最小模式打开界面,提示用户移除目标好友。
-
"friendrequestaccept" - 以最小模式打开界面,提示用户接受传入的好友邀请。
-
"friendrequestignore" - 以最小模式打开界面,提示用户忽略传入的好友邀请。