好友

好友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.12. 清除丰富状态

greenworks.ClearRichPresence()

清除当前用户所有的丰富状态(Rich Presence)键/值。

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" - 以最小模式打开界面,提示用户忽略传入的好友邀请。