SuperAPI AI Directory

wow-api-social-chat

Coding & development

View repository

Updated 10-15 22:41

About this skill

Social & Chat API (Retail — Patch 12.0.0)

Comprehensive reference for chat, social, clubs/communities, friends, voice, BattleNet, and related APIs.

Source: https://warcraft.wiki.gg/wiki/World_of_Warcraft_API Current as of: Patch 12.0.0 (Build 65655) — January 28, 2026 Scope: Retail only.

CRITICAL: 12.0.0 Instance Restrictions

  • SendAddonMessage() is BLOCKED inside instances (dungeons, raids, BGs, arenas)
  • Chat messages in instances may be secret values (KStrings)
  • Addon communication must use alternative patterns outside instances
  • C_ChatInfo.SendAddonMessage() and C_ChatInfo.SendAddonMessageLogged() throw errors in instances

Scope

  • C_ChatInfo — Chat system, channels, addon messages
  • Chat Frame Functions — SendChatMessage, chat filters, chat bubbles
  • C_Club — Communities / clubs system
  • C_ClubFinder — Club finder / recruitment
  • C_FriendList — Friends list management
  • C_BattleNet — BattleNet friends, presence, game accounts
  • C_VoiceChat — Voice chat system
  • C_SocialRestrictions — Social restriction checks
  • C_SocialQueue — Social queue system
  • C_RecentAllies — Recent allies tracking
  • C_PingManager — In-world ping system
  • C_TTSSettings — Text-to-speech settings

C_ChatInfo — Chat System

Key Functions

Function Returns Description
C_ChatInfo.SendAddonMessage(prefix, message, chatType [, target]) success Send addon message (BLOCKED in instances)
C_ChatInfo.SendAddonMessageLogged(prefix, message, chatType [, target]) success Send logged addon message (BLOCKED in instances)
C_ChatInfo.RegisterAddonMessagePrefix(prefix) success Register prefix for CHAT_MSG_ADDON
C_ChatInfo.IsAddonMessagePrefixRegistered(prefix) isRegistered Check if prefix registered
C_ChatInfo.GetRegisteredAddonMessagePrefixes() prefixes All registered prefixes
C_ChatInfo.GetChannelInfoFromIdentifier(identifier) info Channel info by identifier
C_ChatInfo.GetChannelRuleset(channelIndex) rulesetID Channel ruleset
C_ChatInfo.GetChannelRulesetForChannelID(channelID) rulesetID Ruleset by channel ID
C_ChatInfo.GetChannelShortcut(channelIndex) shortcut Channel shortcut
C_ChatInfo.GetChannelShortcutForChannelID(channelID) shortcut Shortcut by channel ID
C_ChatInfo.GetChatLineSenderGUID(lineID) guid GUID of message sender
C_ChatInfo.GetChatLineSenderName(lineID) name Name of message sender
C_ChatInfo.GetChatLineText(lineID) text Message text
C_ChatInfo.GetChatTypeByID(chatTypeID) chatType Chat type string from ID
C_ChatInfo.GetColorForChatType(chatType) r, g, b Default color for chat type
C_ChatInfo.GetNumActiveChannels() numChannels Number of active channels
C_ChatInfo.GetActiveChannelList() channels Active channel list
C_ChatInfo.IsChannelRegional(chatType) isRegional Is channel regional?
C_ChatInfo.IsChatLineCensored(lineID) isCensored Is message censored?
C_ChatInfo.IsPartyPositionCategory(category) isPartyPosition Is party position category?
C_ChatInfo.IsRegionalServiceAvailable() isAvailable Regional service available?
C_ChatInfo.IsValidChatLine(lineID) isValid Is line valid?
C_ChatInfo.ReplaceIconAndGroupExpressions(message) text Expand {rt1}, {skull}, etc.
C_ChatInfo.ResetDefaultZoneChannels() — Reset zone channels
C_ChatInfo.SwapChatChannelsByChannelIndex(i1, i2) — Swap channel order

Global Chat Functions

Function Returns Description
SendChatMessage(msg [, chatType [, languageID [, target]]]) — Send chat message
GetNumDisplayChannels() numChannels Number of displayed channels
GetChannelDisplayInfo(index) name, header, collapsed, channelNumber, count, active, category, voiceEnabled, voiceActive Channel display info
GetChannelName(idOrName) id, name, instanceID, isCommChannel Channel name/ID lookup
JoinChannelByName(name [, password [, frameID]]) type, name Join a channel
LeaveChannelByName(name) — Leave a channel
ListChannelByName(name) — List channel members
GetChatWindowInfo(frameIndex) name, fontSize, r, g, b, alpha, shown, locked, docked, uninteractable Chat window info
SetChatWindowName(frameIndex, name) — Set chat window name
LoggingChat(enable) — Toggle chat logging
LoggingCombat(enable) — Toggle combat logging

C_Club — Communities / Clubs

Club Management

Function Returns Description
C_Club.GetSubscribedClubs() clubs All joined clubs
C_Club.GetClubInfo(clubId) info Club info
C_Club.GetClubMembers(clubId [, streamId]) members Club member list
C_Club.GetMemberInfo(clubId, memberId) info Member info
C_Club.GetClubStreamNotificationSettings(clubId) settings Stream notification settings
C_Club.CreateClub(name, shortName, description, clubType, avatarId) — Create new club
C_Club.DestroyClub(clubId) — Destroy a club
C_Club.EditClub(clubId, name, shortName, description, avatarId, bgColorIndex) — Edit club
C_Club.LeaveClub(clubId) — Leave a club
C_Club.AcceptInvitation(clubId) — Accept club invitation
C_Club.DeclineInvitation(clubId) — Decline club invitation
C_Club.GetInvitationsForSelf() invitations Pending invitations
C_Club.SendInvitation(clubId, memberId) — Invite to club

Club Streams (Chat Channels within Clubs)

Function Returns Description
C_Club.GetStreams(clubId) streams All streams for club
C_Club.GetStreamInfo(clubId, streamId) info Stream info
C_Club.CreateStream(clubId, name, subject, leadersAndModeratorsOnly) — Create stream
C_Club.DestroyStream(clubId, streamId) — Remove stream
C_Club.EditStream(clubId, streamId, name, subject, leadersAndModeratorsOnly) — Edit stream
C_Club.GetMessagesBefore(clubId, streamId, messageId, count) messages Fetch messages before ID
C_Club.GetMessagesAfter(clubId, streamId, messageId, count) messages Fetch messages after ID
C_Club.GetMessagesInRange(clubId, streamId, oldest, newest) messages Messages in range
C_Club.SendMessage(clubId, streamId, message) — Send message to stream
C_Club.FocusStream(clubId, streamId) — Focus a stream
C_Club.UnfocusStream(clubId, streamId) — Unfocus a stream
C_Club.SetAutoAdvanceStreamViewMarker(clubId, streamId) — Auto-advance view marker

Club Types

Enum Value Description
Enum.ClubType.BattleNet 0 BattleNet community
Enum.ClubType.Character 1 Character community
Enum.ClubType.Guild 2 Guild (treated as club)
Enum.ClubType.Other 3 Other

C_ClubFinder — Club Finder / Recruitment

Function Returns Description
C_ClubFinder.RequestClubsList(type, isLinkedSearch, searchText, specIDs) — Search for clubs
C_ClubFinder.GetRecruitingClubInfoFromClubID(clubId) recruitInfo Recruitment info for club
C_ClubFinder.GetTotalMatchingCommunityListSize() size Total matching communities
C_ClubFinder.GetTotalMatchingGuildListSize() size Total matching guilds
C_ClubFinder.RequestPostingInformationFromClubId(clubId) — Request posting info
C_ClubFinder.PostClub(clubId, minIlvl, minLevel, ...) — Post club listing
C_ClubFinder.RequestApplicantList(type) — Request applicant list
C_ClubFinder.GetApplicantInfoList() applicants Get applicants
C_ClubFinder.RespondToApplicant(clubFinderGUID, playerGUID, accepted, ...) — Respond to applicant

C_FriendList — Friends

Function Returns Description
C_FriendList.GetNumFriends() numFriends Character friends count
C_FriendList.GetNumOnlineFriends() numOnline Online friends count
C_FriendList.GetFriendInfoByIndex(index) info Friend info by index
C_FriendList.GetFriendInfoByName(name) info Friend info by name
C_FriendList.GetFriendInfoByGUID(guid) info Friend info by GUID
C_FriendList.AddFriend(name [, notes]) — Add friend
C_FriendList.RemoveFriend(name) — Remove friend
C_FriendList.SetFriendNotes(name, notes) — Set friend notes
C_FriendList.AddOrRemoveFriend(name, notes) — Toggle friend
C_FriendList.IsFriend(guid) isFriend Is GUID a friend?
C_FriendList.AddIgnore(name) — Add to ignore list
C_FriendList.DelIgnore(name) — Remove from ignore list
C_FriendList.GetNumIgnores() numIgnores Ignore list count
C_FriendList.GetIgnoreName(index) name Ignored player name
C_FriendList.IsIgnored(name) isIgnored Is player ignored?
C_FriendList.IsIgnoredByGUID(guid) isIgnored Is GUID ignored?
C_FriendList.ShowFriends() — Refresh friends list
C_FriendList.GetSelectedFriend() index Selected friend index
C_FriendList.SetSelectedFriend(index) — Select friend

C_BattleNet — BattleNet Friends

Function Returns Description
C_BattleNet.GetFriendAccountInfo(index) accountInfo BNet friend account info
C_BattleNet.GetFriendGameAccountInfo(index, gameAccountIndex) gameAccountInfo Game account info
C_BattleNet.GetFriendNumGameAccounts(index) numGameAccounts Game accounts for friend
C_BattleNet.GetAccountInfoByID(bnetAccountID) accountInfo Account info by ID
C_BattleNet.GetAccountInfoByGUID(guid) accountInfo Account info by GUID
C_BattleNet.GetGameAccountInfoByID(gameAccountID) gameAccountInfo Game account info
C_BattleNet.GetGameAccountInfoByGUID(guid) gameAccountInfo Game account by GUID
BNGetNumFriends() numFriends, numOnline BNet friend count
BNGetNumFriendInvites() numInvites Pending BNet invites
BNSendWhisper(bnetAccountID, message) — Send BNet whisper
BNInviteFriend(bnetAccountID) — Invite to group
BNRequestInviteFriend(presenceID) — Request BNet friend add
BNRemoveFriend(bnetAccountID) — Remove BNet friend
BNSetFriendNote(bnetAccountID, note) — Set friend note
BNSetCustomMessage(message) — Set BNet status message
BNConnected() isConnected Connected to BNet?

C_VoiceChat — Voice Chat

Function Returns Description
C_VoiceChat.GetActiveChannelID() channelID Active voice channel
C_VoiceChat.GetChannel(channelID) channel Channel info
C_VoiceChat.GetChannelForChannelType(channelType) channel Channel by type
C_VoiceChat.GetChannelForCommunityStream(clubId, streamId) channel Club voice channel
C_VoiceChat.GetMasterVolumeScale() scale Master volume
C_VoiceChat.SetMasterVolumeScale(scale) — Set master volume
C_VoiceChat.GetInputVolume() volume Mic volume
C_VoiceChat.SetInputVolume(volume) — Set mic volume
C_VoiceChat.GetOutputVolume() volume Speaker volume
C_VoiceChat.SetOutputVolume(volume) — Set speaker volume
C_VoiceChat.IsMuted() isMuted Is muted?
C_VoiceChat.SetMuted(muted) — Set mute
C_VoiceChat.IsDeafened() isDeafened Is deafened?
C_VoiceChat.SetDeafened(deafened) — Set deafen
C_VoiceChat.IsSilenced() isSilenced Is silenced (by Blizzard)?
C_VoiceChat.ActivateChannel(channelID) — Activate voice channel
C_VoiceChat.DeactivateChannel(channelID) — Deactivate voice channel
C_VoiceChat.IsLoggedIn() isLoggedIn Voice chat logged in?
C_VoiceChat.Login() — Log in to voice chat
C_VoiceChat.Logout() — Log out of voice chat
C_VoiceChat.GetMemberName(memberID, channelID) name Voice member name
C_VoiceChat.GetMemberVolume(memberID, channelID) volume Member volume
C_VoiceChat.SetMemberVolume(memberID, channelID, volume) — Set member volume
C_VoiceChat.IsMemberMuted(memberID, channelID) isMuted Is member muted?
C_VoiceChat.SetMemberMuted(memberID, channelID, muted) — Mute member

C_SocialRestrictions

Function Returns Description
C_SocialRestrictions.IsChatDisabled() isDisabled Is chat restricted?
C_SocialRestrictions.IsMuted() isMuted Is player muted?
C_SocialRestrictions.IsSilenced() isSilenced Is player silenced?
C_SocialRestrictions.IsSquelched() isSquelched Is player squelched?

C_SocialQueue — Social Queue

Function Returns Description
C_SocialQueue.GetAllGroups() groups All social queue groups
C_SocialQueue.GetGroupInfo(guid) info Group queue info
C_SocialQueue.GetGroupMembers(guid) members Group member list
C_SocialQueue.GetGroupQueues(guid) queues Group queues

C_RecentAllies

Function Returns Description
C_RecentAllies.GetRecentAllies() allies Recent group allies

C_PingManager — Ping System

Function Returns Description
C_PingManager.GetPingTypeFromUIMouseButton(button) pingType Ping type from mouse button
C_PingManager.TogglePingListener(enabled) — Toggle ping listening

C_TTSSettings — Text-to-Speech

Function Returns Description
C_TTSSettings.GetChatTypeEnabled(chatType) enabled Is TTS enabled for chat type?
C_TTSSettings.SetChatTypeEnabled(chatType, enabled) — Toggle TTS for chat type
C_TTSSettings.GetSetting(setting) value Get TTS setting
C_TTSSettings.SetSetting(setting, value) — Set TTS setting
C_TTSSettings.GetVoiceOptionID(voiceType) optionID Get voice option

Common Patterns

Register and Handle Addon Messages

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

Chat Message Filter

-- 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)

Enumerate Friends

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

Key Events

Event Payload Description
CHAT_MSG_SAY msg, author, language, channelString, target, flags, ... /say message
CHAT_MSG_YELL msg, author, ... /yell message
CHAT_MSG_PARTY msg, author, ... Party message
CHAT_MSG_PARTY_LEADER msg, author, ... Party leader message
CHAT_MSG_RAID msg, author, ... Raid message
CHAT_MSG_RAID_LEADER msg, author, ... Raid leader message
CHAT_MSG_GUILD msg, author, ... Guild message
CHAT_MSG_OFFICER msg, author, ... Guild officer message
CHAT_MSG_WHISPER msg, author, ... Incoming whisper
CHAT_MSG_WHISPER_INFORM msg, target, ... Outgoing whisper
CHAT_MSG_BN_WHISPER msg, author, ... BNet whisper received
CHAT_MSG_BN_WHISPER_INFORM msg, target, ... BNet whisper sent
CHAT_MSG_CHANNEL msg, author, language, channelString, target, flags, zoneChannelID, channelIndex, channelBaseName, ... Channel message
CHAT_MSG_ADDON prefix, message, channel, sender Addon message received
CHAT_MSG_ADDON_LOGGED prefix, message, channel, sender Logged addon message
CHAT_MSG_SYSTEM msg System message
CHAT_MSG_EMOTE msg, author, ... Emote message
CHAT_MSG_TEXT_EMOTE msg, author, ... /emote text
FRIENDLIST_UPDATE — Friends list changed
BN_FRIEND_LIST_SIZE_CHANGED — BNet list changed
BN_FRIEND_INFO_CHANGED bnetAccountID BNet friend updated
BN_CONNECTED — Connected to BNet
BN_DISCONNECTED — Disconnected from BNet
CLUB_ADDED clubId Joined a club
CLUB_REMOVED clubId Left a club
CLUB_UPDATED clubId Club info updated
CLUB_MESSAGE_ADDED clubId, streamId, messageId New club message
CLUB_MEMBER_ADDED clubId, memberId Member joined club
CLUB_MEMBER_REMOVED clubId, memberId Member left club
CLUB_MEMBER_UPDATED clubId, memberId Member info updated
VOICE_CHAT_CHANNEL_ACTIVATED channelID Voice channel activated
VOICE_CHAT_CHANNEL_DEACTIVATED channelID Voice channel deactivated
VOICE_CHAT_CHANNEL_MEMBER_ADDED memberID, channelID Member joined voice
VOICE_CHAT_CHANNEL_MEMBER_REMOVED memberID, channelID Left voice channel

Gotchas & Restrictions

  1. SendAddonMessage BLOCKED in instances — C_ChatInfo.SendAddonMessage() and SendAddonMessageLogged() throw errors inside dungeons, raids, BGs, and arenas in 12.0.0.
  2. Chat messages may be secret — In instances, chat message content from other players may be KStrings / secret values.
  3. Addon prefix limit — Maximum 16 characters for addon message prefixes.
  4. Addon message size limit — Maximum 255 characters per addon message.
  5. Chat throttle — SendChatMessage() is throttled. Sending too fast will disconnect you.
  6. Hardware event required — Some chat functions require a hardware event (mouse click/key press) to execute.
  7. BNet friend list — BNGetFriendInfo() is deprecated. Use C_BattleNet.GetFriendAccountInfo().
  8. Club type Guild — Guilds are treated as clubs with Enum.ClubType.Guild. Use C_Club to interact with guild chat streams.
  9. Voice chat login — Voice chat requires explicit login. Check C_VoiceChat.IsLoggedIn() before operations.
  10. Chat filters — ChatFrame_AddMessageEventFilter filters operate on ALL instances of the event across all chat frames.