local addonname, addon = ... local loaddelay = 1.5 addon.DB_SV = 1 addon.DB_NOTES = 2 function addon:Initialize() self.frame = CreateFrame"Frame" self.frame:SetScript("OnEvent", function(frame, event, ...) if self[event] then self[event](addon, ...) end end) self.frame:RegisterEvent"ADDON_LOADED" self.frame:RegisterEvent"BN_FRIEND_INFO_CHANGED" end function addon:ADDON_LOADED(loaded) if loaded ~= addonname then return end MonikerDB = MonikerDB or {} MonikerConfig = MonikerConfig or { dbbackend = addon.DB_SV } self.config = MonikerConfig self.nicks_sv = MonikerDB self.nicks_notes = {} self:SetDBBackend(self.config.dbbackend) local elapsed = 0 self.frame:SetScript("OnUpdate", function(frame, e) elapsed = elapsed + e if elapsed > loaddelay then frame:SetScript("OnUpdate", nil) self:CreateHooks() end end) self:CreateConfig() end function addon:BN_FRIEND_INFO_CHANGED(i) if not i then return end local _, firstname, lastname, _, _, _, _, _, _, _, _, note = BNGetFriendInfo(i) if note and #note > 0 then self.nicks_notes[firstname.." "..lastname] = note else self.nicks_notes[firstname.." "..lastname] = nil end self:Update() end function addon:UpdatePopup() local function add(popup, idx, name) for i,v in ipairs(popup) do if v == name then break end end table.insert(popup, idx, name) end local function remove(popup, name) for i,v in ipairs(popup) do if v == name then table.remove(popup, i) break end end end if self.config.dbbackend == addon.DB_NOTES then remove(UnitPopupMenus["BN_FRIEND"], "BN_RENAME") remove(UnitPopupMenus["BN_FRIEND_OFFLINE"], "BN_RENAME") else add(UnitPopupMenus["BN_FRIEND"], 7, "BN_RENAME") add(UnitPopupMenus["BN_FRIEND_OFFLINE"], 2, "BN_RENAME") end end function addon:Update() FriendsFrame_Update() end function addon:SetDBBackend(dbtype) if dbtype == addon.DB_NOTES then table.wipe(self.nicks_notes) for i = 1, BNGetNumFriends() do self:BN_FRIEND_INFO_CHANGED(i) end self.nicks = self.nicks_notes else self.nicks = self.nicks_sv end self:UpdatePopup() self:Update() end function addon:CreateHooks() for n, func in pairs(self.hooks) do func() end end function addon:GetNickname(name) return self.nicks[name] end function addon:SetNickname(name, nickname) if name == nickanme or #nickname == 0 then nickname = nil end self.nicks[name] = nickname self:Update() end function addon:IterNicknames() return pairs(self.nicks) end addon:Initialize()