Considering the 10th argument returned by GetGuildRosterInfo() is a units status, one could easily make a simple mod to inject the tags on the unit names (at the end) and make it like "Jigain <AFK>" and such. On the fly I can think of hooking "GuildRoster_Update". Look at Blizzard_GuildRoster.lua at line 229 and below, plenty of hints what you can have in your own hook to make it work.
Code:
local sf, off, btn, btns, nbtns, totMem, onMem, visMem, curGView, index, btndata = GuildRosterContainer
btndata = {
{"guildStatus"}, -- 1
{"playerStatus", "weeklyxp", "totalxp", "pve", "pvp", "achievement"}, -- 2
}
hooksecurefunc("GuildRoster_Update", function()
off = HybridScrollFrame_GetOffset(sf)
btns = sf.buttons
nbtns = #btns
totMem, onMem = GetNumGuildMembers()
visMem = GetGuildRosterShowOffline() and totMem or onMem
curGView = GetCVar("guildRosterView")
for i=1, #btns do
btn = btns[i]
index = off + i
local name, rank, rankIndex, level, class, zone, note, officernote, online, status, classFileName, achievementPoints, achievementRank, isMobile = GetGuildRosterInfo(index)
local dispName = name
if isMobile then
dispName = ChatFrame_GetMobileEmbeddedTexture(119/255, 137/255, 119/255)..dispName -- taken directly from Blizzard_GuildRoster.lua line 237 to include the support of mobile members
end
dispName = dispName..(status and status or "") -- append "<AFK/DND>" flag at the end of the name
if name and index <= visMem then
for k1,v1 in pairs(btndata) do -- some are in btn.string1 and others in 2 so we use the key to distinguish
for k2,v2 in pairs(v1) do -- now we match up if we are on the right page by string name
if curGView == v2 then -- if we are apply the new dispName to the right string location
GuildRosterButton_SetStringText(btn["string"..k], dispName, online, classFileName)
end
end
end
end
end
end)