mcpField
W
wow-api-social-chat

wow-api-social-chat

github.com/jburlison开发4638 次安装37 周前更新
代码仓库

关于 wow-api-social-chat

面向《World of Warcraft》Retail 开发者的聊天与社交 API 参考,涵盖 Patch 12.0.0。内容包括聊天、社区、好友、BattleNet、语音及副本内的通信限制。

主要功能

  1. 01聊天频道与消息
  2. 02社区及消息流管理
  3. 03好友与 BattleNet 账号
  4. 04社区搜索与招募
  5. 05语音及社交 API
  6. 06副本内通信限制

适用场景

  1. 01开发聊天相关插件
  2. 02管理社区消息流和邀请
  3. 03处理好友与 BattleNet 数据
  4. 04检查副本内通信限制

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/jburlison/wowaddonapiagents --skill wow-api-social-chat

安装后在 Claude Code 中输入/wow-api-social-chat确认已加载。

详细介绍

社交与聊天 API(正式服 — Patch 12.0.0)

聊天、社交、公会/社区、好友、语音、BattleNet 及相关 API 的综合参考。

来源: https://warcraft.wiki.gg/wiki/World_of_Warcraft_API 截至: Patch 12.0.0(Build 65655)——2026 年 1 月 28 日 范围: 仅限正式服。

重要:12.0.0 副本限制

  • 副本内禁止使用 SendAddonMessage()(地下城、团队副本、战场、竞技场)
  • 副本内的聊天消息可能是机密值(KStrings)
  • 插件通信必须在副本外使用替代方案
  • 在副本内调用 C_ChatInfo.SendAddonMessage() 和 C_ChatInfo.SendAddonMessageLogged() 会报错

范围

  • C_ChatInfo — 聊天系统、频道、插件消息
  • 聊天框函数 — SendChatMessage、聊天过滤器、聊天气泡
  • C_Club — 社区/俱乐部系统
  • C_ClubFinder — 俱乐部查找/招募
  • C_FriendList — 好友列表管理
  • C_BattleNet — BattleNet 好友、在线状态、游戏账号
  • C_VoiceChat — 语音聊天系统
  • C_SocialRestrictions — 社交限制检查
  • C_SocialQueue — 社交队列系统
  • C_RecentAllies — 最近盟友追踪
  • C_PingManager — 游戏内标记系统
  • C_TTSSettings — 文本转语音设置

C_ChatInfo — 聊天系统

主要函数
函数返回值描述
C_ChatInfo.SendAddonMessage(prefix, message, chatType [, target])success发送插件消息(副本内禁止)
C_ChatInfo.SendAddonMessageLogged(prefix, message, chatType [, target])success发送已记录的插件消息(副本内禁止)
C_ChatInfo.RegisterAddonMessagePrefix(prefix)success为 CHAT_MSG_ADDON 注册前缀
C_ChatInfo.IsAddonMessagePrefixRegistered(prefix)isRegistered检查前缀是否已注册
C_ChatInfo.GetRegisteredAddonMessagePrefixes()prefixes获取所有已注册的前缀
C_ChatInfo.GetChannelInfoFromIdentifier(identifier)info按标识符获取频道信息
C_ChatInfo.GetChannelRuleset(channelIndex)rulesetID获取频道规则集
C_ChatInfo.GetChannelRulesetForChannelID(channelID)rulesetID按频道 ID 获取规则集
C_ChatInfo.GetChannelShortcut(channelIndex)shortcut获取频道快捷名称
C_ChatInfo.GetChannelShortcutForChannelID(channelID)shortcut按频道 ID 获取快捷名称
C_ChatInfo.GetChatLineSenderGUID(lineID)guid获取消息发送者的 GUID
C_ChatInfo.GetChatLineSenderName(lineID)name获取消息发送者的名称
C_ChatInfo.GetChatLineText(lineID)text获取消息文本
C_ChatInfo.GetChatTypeByID(chatTypeID)chatType根据 ID 获取聊天类型字符串
C_ChatInfo.GetColorForChatType(chatType)r, g, b获取聊天类型的默认颜色
C_ChatInfo.GetNumActiveChannels()numChannels获取活动频道数量
C_ChatInfo.GetActiveChannelList()channels获取活动频道列表
C_ChatInfo.IsChannelRegional(chatType)isRegional频道是否为区域频道?
C_ChatInfo.IsChatLineCensored(lineID)isCensored消息是否已屏蔽?
C_ChatInfo.IsPartyPositionCategory(category)isPartyPosition是否为队伍位置类别?
C_ChatInfo.IsRegionalServiceAvailable()isAvailable区域服务是否可用?
C_ChatInfo.IsValidChatLine(lineID)isValid消息行是否有效?
C_ChatInfo.ReplaceIconAndGroupExpressions(message)text展开 {rt1}、{skull} 等标记
C_ChatInfo.ResetDefaultZoneChannels()—重置区域频道
C_ChatInfo.SwapChatChannelsByChannelIndex(i1, i2)—交换频道顺序
全局聊天函数
函数返回值描述
SendChatMessage(msg [, chatType [, languageID [, target]]])—发送聊天消息
GetNumDisplayChannels()numChannels显示的频道数量
GetChannelDisplayInfo(index)name, header, collapsed, channelNumber, count, active, category, voiceEnabled, voiceActive频道显示信息
GetChannelName(idOrName)id, name, instanceID, isCommChannel查询频道名称/ID
JoinChannelByName(name [, password [, frameID]])type, name加入频道
LeaveChannelByName(name)—离开频道
ListChannelByName(name)—列出频道成员
GetChatWindowInfo(frameIndex)name, fontSize, r, g, b, alpha, shown, locked, docked, uninteractable聊天窗口信息
SetChatWindowName(frameIndex, name)—设置聊天窗口名称
LoggingChat(enable)—切换聊天记录
LoggingCombat(enable)—切换战斗记录

C_Club — 社区/俱乐部

俱乐部管理
函数返回值描述
C_Club.GetSubscribedClubs()clubs所有已加入的俱乐部
C_Club.GetClubInfo(clubId)info俱乐部信息
C_Club.GetClubMembers(clubId [, streamId])members俱乐部成员列表
C_Club.GetMemberInfo(clubId, memberId)info成员信息
C_Club.GetClubStreamNotificationSettings(clubId)settings频道通知设置
C_Club.CreateClub(name, shortName, description, clubType, avatarId)—创建新俱乐部
C_Club.DestroyClub(clubId)—解散俱乐部
C_Club.EditClub(clubId, name, shortName, description, avatarId, bgColorIndex)—编辑俱乐部
C_Club.LeaveClub(clubId)—离开俱乐部
C_Club.AcceptInvitation(clubId)—接受俱乐部邀请
C_Club.DeclineInvitation(clubId)—拒绝俱乐部邀请
C_Club.GetInvitationsForSelf()invitations待处理的邀请
C_Club.SendInvitation(clubId, memberId)—邀请加入俱乐部
俱乐部频道(俱乐部内的聊天频道)
函数返回值描述
C_Club.GetStreams(clubId)streams俱乐部的所有频道
C_Club.GetStreamInfo(clubId, streamId)info频道信息
C_Club.CreateStream(clubId, name, subject, leadersAndModeratorsOnly)—创建频道
C_Club.DestroyStream(clubId, streamId)—移除频道
C_Club.EditStream(clubId, streamId, name, subject, leadersAndModeratorsOnly)—编辑频道
C_Club.GetMessagesBefore(clubId, streamId, messageId, count)messages获取指定 ID 之前的消息
C_Club.GetMessagesAfter(clubId, streamId, messageId, count)messages获取指定 ID 之后的消息
C_Club.GetMessagesInRange(clubId, streamId, oldest, newest)messages获取范围内的消息
C_Club.SendMessage(clubId, streamId, message)—向频道发送消息
C_Club.FocusStream(clubId, streamId)—聚焦频道
C_Club.UnfocusStream(clubId, streamId)—取消聚焦频道
C_Club.SetAutoAdvanceStreamViewMarker(clubId, streamId)—自动前移查看标记
俱乐部类型
枚举值描述
Enum.ClubType.BattleNet0BattleNet 社区
Enum.ClubType.Character1角色社区
Enum.ClubType.Guild2公会(视为俱乐部)
Enum.ClubType.Other3其他

C_ClubFinder — 俱乐部查找 / 招募

函数返回值描述
C_ClubFinder.RequestClubsList(type, isLinkedSearch, searchText, specIDs)—搜索俱乐部
C_ClubFinder.GetRecruitingClubInfoFromClubID(clubId)recruitInfo俱乐部招募信息
C_ClubFinder.GetTotalMatchingCommunityListSize()size匹配的社区总数
C_ClubFinder.GetTotalMatchingGuildListSize()size匹配的公会总数
C_ClubFinder.RequestPostingInformationFromClubId(clubId)—请求招募信息
C_ClubFinder.PostClub(clubId, minIlvl, minLevel, ...)—发布俱乐部招募信息
C_ClubFinder.RequestApplicantList(type)—请求申请者列表
C_ClubFinder.GetApplicantInfoList()applicants获取申请者
C_ClubFinder.RespondToApplicant(clubFinderGUID, playerGUID, accepted, ...)—回复申请者

C_FriendList — 好友

函数返回值描述
C_FriendList.GetNumFriends()numFriends角色好友数量
C_FriendList.GetNumOnlineFriends()numOnline在线好友数量
C_FriendList.GetFriendInfoByIndex(index)info按索引获取好友信息
C_FriendList.GetFriendInfoByName(name)info按名称获取好友信息
C_FriendList.GetFriendInfoByGUID(guid)info按 GUID 获取好友信息
C_FriendList.AddFriend(name [, notes])—添加好友
C_FriendList.RemoveFriend(name)—删除好友
C_FriendList.SetFriendNotes(name, notes)—设置好友备注
C_FriendList.AddOrRemoveFriend(name, notes)—切换好友状态
C_FriendList.IsFriend(guid)isFriendGUID 对应的玩家是好友吗?
C_FriendList.AddIgnore(name)—添加到忽略列表
C_FriendList.DelIgnore(name)—从忽略列表中移除
C_FriendList.GetNumIgnores()numIgnores忽略列表数量
C_FriendList.GetIgnoreName(index)name被忽略玩家的名称
C_FriendList.IsIgnored(name)isIgnored玩家已被忽略吗?
C_FriendList.IsIgnoredByGUID(guid)isIgnoredGUID 对应的玩家已被忽略吗?
C_FriendList.ShowFriends()—刷新好友列表
C_FriendList.GetSelectedFriend()index已选好友的索引
C_FriendList.SetSelectedFriend(index)—选择好友

C_BattleNet — BattleNet 好友

函数返回值描述
C_BattleNet.GetFriendAccountInfo(index)accountInfoBNet 好友账号信息
C_BattleNet.GetFriendGameAccountInfo(index, gameAccountIndex)gameAccountInfo游戏账号信息
C_BattleNet.GetFriendNumGameAccounts(index)numGameAccounts好友的游戏账号数量
C_BattleNet.GetAccountInfoByID(bnetAccountID)accountInfo按 ID 获取账号信息
C_BattleNet.GetAccountInfoByGUID(guid)accountInfo按 GUID 获取账号信息
C_BattleNet.GetGameAccountInfoByID(gameAccountID)gameAccountInfo游戏账号信息
C_BattleNet.GetGameAccountInfoByGUID(guid)gameAccountInfo按 GUID 获取游戏账号
BNGetNumFriends()numFriends, numOnlineBNet 好友数量
BNGetNumFriendInvites()numInvites待处理的 BNet 邀请数量
BNSendWhisper(bnetAccountID, message)—发送 BNet 密语
BNInviteFriend(bnetAccountID)—邀请加入队伍
BNRequestInviteFriend(presenceID)—请求添加 BNet 好友
BNRemoveFriend(bnetAccountID)—删除 BNet 好友
BNSetFriendNote(bnetAccountID, note)—设置好友备注
BNSetCustomMessage(message)—设置 BNet 状态消息
BNConnected()isConnected已连接到 BNet 吗?

C_VoiceChat — 语音聊天

函数返回值描述
C_VoiceChat.GetActiveChannelID()channelID当前语音频道
C_VoiceChat.GetChannel(channelID)channel频道信息
C_VoiceChat.GetChannelForChannelType(channelType)channel按类型获取频道
C_VoiceChat.GetChannelForCommunityStream(clubId, streamId)channel社区语音频道
C_VoiceChat.GetMasterVolumeScale()scale主音量
C_VoiceChat.SetMasterVolumeScale(scale)—设置主音量
C_VoiceChat.GetInputVolume()volume麦克风音量
C_VoiceChat.SetInputVolume(volume)—设置麦克风音量
C_VoiceChat.GetOutputVolume()volume扬声器音量
C_VoiceChat.SetOutputVolume(volume)—设置扬声器音量
C_VoiceChat.IsMuted()isMuted是否已静音?
C_VoiceChat.SetMuted(muted)—设置静音
C_VoiceChat.IsDeafened()isDeafened是否已屏蔽声音?
C_VoiceChat.SetDeafened(deafened)—设置屏蔽声音
C_VoiceChat.IsSilenced()isSilenced是否已被禁言(由暴雪执行)?
C_VoiceChat.ActivateChannel(channelID)—激活语音频道
C_VoiceChat.DeactivateChannel(channelID)—停用语音频道
C_VoiceChat.IsLoggedIn()isLoggedIn是否已登录语音聊天?
C_VoiceChat.Login()—登录语音聊天
C_VoiceChat.Logout()—退出语音聊天
C_VoiceChat.GetMemberName(memberID, channelID)name语音成员名称
C_VoiceChat.GetMemberVolume(memberID, channelID)volume成员音量
C_VoiceChat.SetMemberVolume(memberID, channelID, volume)—设置成员音量
C_VoiceChat.IsMemberMuted(memberID, channelID)isMuted成员是否已静音?
C_VoiceChat.SetMemberMuted(memberID, channelID, muted)—将成员静音

C_SocialRestrictions

函数返回值描述
C_SocialRestrictions.IsChatDisabled()isDisabled聊天是否受限?
C_SocialRestrictions.IsMuted()isMuted玩家是否已静音?
C_SocialRestrictions.IsSilenced()isSilenced玩家是否已被禁言?
C_SocialRestrictions.IsSquelched()isSquelched玩家是否已被屏蔽?

C_SocialQueue — 社交队列

函数返回值描述
C_SocialQueue.GetAllGroups()groups所有社交队列群组
C_SocialQueue.GetGroupInfo(guid)info群组队列信息
C_SocialQueue.GetGroupMembers(guid)members群组成员列表
C_SocialQueue.GetGroupQueues(guid)queues群组队列

C_RecentAllies

函数返回值描述
C_RecentAllies.GetRecentAllies()allies最近组队的盟友

C_PingManager — 标记系统

函数返回值描述
C_PingManager.GetPingTypeFromUIMouseButton(button)pingType根据鼠标按钮获取标记类型
C_PingManager.TogglePingListener(enabled)—切换标记监听

C_TTSSettings — 文本转语音

函数返回值描述
C_TTSSettings.GetChatTypeEnabled(chatType)enabled是否为该聊天类型启用 TTS?
C_TTSSettings.SetChatTypeEnabled(chatType, enabled)—切换该聊天类型的 TTS
C_TTSSettings.GetSetting(setting)value获取 TTS 设置
C_TTSSettings.SetSetting(setting, value)—设置 TTS 设置
C_TTSSettings.GetVoiceOptionID(voiceType)optionID获取语音选项

常见模式

注册并处理插件消息
local ADDON_PREFIX = "MyAddon"
C_ChatInfo.RegisterAddonMessagePrefix(ADDON_PREFIX)

local frame = CreateFrame("Frame")
frame:RegisterEvent("CHAT_MSG_ADDON")
frame:SetScript("OnEvent", function(self, event, prefix, message, channel, sender)
    if prefix == ADDON_PREFIX then
        -- Process addon message
        print("Got message from", sender, ":", message)
    end
end)

-- Send message (FAILS in instances in 12.0.0!)
local function SendMessage(msg, target)
    if not IsInInstance() then
        C_ChatInfo.SendAddonMessage(ADDON_PREFIX, msg, "PARTY")
    else
        -- In-instance: cannot send addon messages
        -- Consider using encounter events or built-in APIs instead
    end
end
聊天消息筛选器
-- Filter chat messages to modify or suppress them
ChatFrame_AddMessageEventFilter("CHAT_MSG_SAY", function(self, event, msg, author, ...)
    if msg:find("badword") then
        return true -- suppress the message
    end
    -- Modify the message
    local newMsg = msg:gsub("hello", "|cff00ff00hello|r")
    return false, newMsg, author, ...
end)
枚举好友
local function GetOnlineFriends()
    local friends = {}
    local numFriends = C_FriendList.GetNumFriends()
    for i = 1, numFriends do
        local info = C_FriendList.GetFriendInfoByIndex(i)
        if info and info.connected then
            table.insert(friends, info)
        end
    end
    -- Also check BNet friends
    local numBNet, numOnlineBNet = BNGetNumFriends()
    for i = 1, numBNet do
        local acctInfo = C_BattleNet.GetFriendAccountInfo(i)
        if acctInfo and acctInfo.gameAccountInfo and acctInfo.gameAccountInfo.isOnline then
            table.insert(friends, acctInfo)
        end
    end
    return friends
end

关键事件

事件负载描述
CHAT_MSG_SAYmsg, author, language, channelString, target, flags, .../say 消息
CHAT_MSG_YELLmsg, author, .../yell 消息
CHAT_MSG_PARTYmsg, author, ...队伍消息
CHAT_MSG_PARTY_LEADERmsg, author, ...队伍队长消息
CHAT_MSG_RAIDmsg, author, ...团队消息
CHAT_MSG_RAID_LEADERmsg, author, ...团队队长消息
CHAT_MSG_GUILDmsg, author, ...公会消息
CHAT_MSG_OFFICERmsg, author, ...公会官员消息
CHAT_MSG_WHISPERmsg, author, ...收到的密语
CHAT_MSG_WHISPER_INFORMmsg, target, ...发出的密语
CHAT_MSG_BN_WHISPERmsg, author, ...收到的战网密语
CHAT_MSG_BN_WHISPER_INFORMmsg, target, ...发出的战网密语
CHAT_MSG_CHANNELmsg, author, language, channelString, target, flags, zoneChannelID, channelIndex, channelBaseName, ...频道消息
CHAT_MSG_ADDONprefix, message, channel, sender收到的插件消息
CHAT_MSG_ADDON_LOGGEDprefix, message, channel, sender已记录的插件消息
CHAT_MSG_SYSTEMmsg系统消息
CHAT_MSG_EMOTEmsg, author, ...表情动作消息
CHAT_MSG_TEXT_EMOTEmsg, author, .../emote 文本
FRIENDLIST_UPDATE—好友列表已更改
BN_FRIEND_LIST_SIZE_CHANGED—战网列表已更改
BN_FRIEND_INFO_CHANGEDbnetAccountID战网好友信息已更新
BN_CONNECTED—已连接到战网
BN_DISCONNECTED—已断开与战网的连接
CLUB_ADDEDclubId已加入俱乐部
CLUB_REMOVEDclubId已离开俱乐部
CLUB_UPDATEDclubId俱乐部信息已更新
CLUB_MESSAGE_ADDEDclubId, streamId, messageId新俱乐部消息
CLUB_MEMBER_ADDEDclubId, memberId成员已加入俱乐部
CLUB_MEMBER_REMOVEDclubId, memberId成员已离开俱乐部
CLUB_MEMBER_UPDATEDclubId, memberId成员信息已更新
VOICE_CHAT_CHANNEL_ACTIVATEDchannelID语音频道已激活
VOICE_CHAT_CHANNEL_DEACTIVATEDchannelID语音频道已停用
VOICE_CHAT_CHANNEL_MEMBER_ADDEDmemberID, channelID成员已加入语音频道
VOICE_CHAT_CHANNEL_MEMBER_REMOVEDmemberID, channelID成员已离开语音频道

注意事项与限制

  1. 副本中禁止使用 SendAddonMessage — 在 12.0.0 中,C_ChatInfo.SendAddonMessage() 和 SendAddonMessageLogged() 在地下城、团队副本、战场和竞技场内会抛出错误。
  2. 聊天消息可能是机密值 — 在副本中,其他玩家的聊天消息内容可能是 KStrings/机密值。
  3. 插件前缀长度限制 — 插件消息前缀最多为 16 个字符。
  4. 插件消息大小限制 — 每条插件消息最多为 255 个字符。
  5. 聊天频率限制 — SendChatMessage() 有发送频率限制。发送过快会导致断开连接。
  6. 需要硬件事件 — 某些聊天函数需要硬件事件(鼠标点击/按键)才能执行。
  7. 战网好友列表 — BNGetFriendInfo() 已弃用。请使用 C_BattleNet.GetFriendAccountInfo()。
  8. 公会俱乐部类型 — 公会被视为俱乐部,类型为 Enum.ClubType.Guild。请使用 C_Club 与公会聊天流交互。
  9. 语音聊天登录 — 语音聊天需要显式登录。执行操作前,请检查 C_VoiceChat.IsLoggedIn()。
  10. 聊天过滤器 — ChatFrame_AddMessageEventFilter 过滤器会对所有聊天框中该事件的实例生效。

评论

支持 Markdown