5eaec81f02
Matches the Exiles fork-layout convention (each addon in its own folder).
135 lines
3.3 KiB
Lua
135 lines
3.3 KiB
Lua
local mod = Chatter:NewModule("Invite Links", "AceHook-3.0")
|
|
local L = LibStub("AceLocale-3.0"):GetLocale("Chatter")
|
|
mod.modName = L["Invite Links"]
|
|
|
|
local gsub = _G.string.gsub
|
|
local ipairs = _G.ipairs
|
|
local fmt = _G.string.format
|
|
local sub = _G.string.sub
|
|
local InviteUnit = _G.InviteUnit
|
|
local next = _G.next
|
|
local type = _G.type
|
|
local IsAltKeyDown = _G.IsAltKeyDown
|
|
local match = _G.string.match
|
|
|
|
local options = {
|
|
addWord = {
|
|
type = "input",
|
|
name = L["Add Word"],
|
|
desc = L["Add word to your invite trigger list"],
|
|
get = function() end,
|
|
set = function(info, v)
|
|
mod.db.profile.words[v:lower()] = v
|
|
end
|
|
},
|
|
removeWord = {
|
|
type = "select",
|
|
name = L["Remove Word"],
|
|
desc = L["Remove a word from your invite trigger list"],
|
|
get = function() end,
|
|
set = function(info, v)
|
|
mod.db.profile.words[v:lower()] = nil
|
|
end,
|
|
values = function() return mod.db.profile.words end,
|
|
confirm = function(info, v) return (L["Remove this word from your trigger list?"]) end
|
|
},
|
|
altClick = {
|
|
type = "toggle",
|
|
name = L["Alt-click name to invite"],
|
|
width = "double",
|
|
desc = L["Lets you alt-click player names to invite them to your party."],
|
|
get = function() return mod.db.profile.altClickToinvite end,
|
|
set = function(i, v) mod.db.profile.altClickToinvite = v end
|
|
}
|
|
}
|
|
|
|
local defaults = {
|
|
profile = {
|
|
words = {},
|
|
altClickToInvite = true
|
|
}
|
|
}
|
|
|
|
local words
|
|
|
|
function mod:OnInitialize()
|
|
self.db = Chatter.db:RegisterNamespace(self:GetName(), defaults)
|
|
end
|
|
|
|
function mod:Decorate(frame)
|
|
self:RawHook(frame, "AddMessage", true)
|
|
end
|
|
|
|
function mod:OnEnable()
|
|
words = self.db.profile.words
|
|
if not next(words) then
|
|
words[L["invite"]] = L["invite"]
|
|
words[L["inv"]] = L["inv"]
|
|
end
|
|
for i = 1, NUM_CHAT_WINDOWS do
|
|
local cf = _G["ChatFrame" .. i]
|
|
if cf ~= COMBATLOG then
|
|
self:RawHook(cf, "AddMessage", true)
|
|
end
|
|
end
|
|
for index,name in ipairs(self.TempChatFrames) do
|
|
local cf = _G[name]
|
|
if cf then
|
|
self:RawHook(cf, "AddMessage", true)
|
|
end
|
|
end
|
|
self:RawHook(nil, "SetItemRef", true)
|
|
end
|
|
|
|
local style = "|cffffffff|Hinvite:%s|h[%s]|h|r"
|
|
local valid_events = {
|
|
CHAT_MSG_SAY = true,
|
|
CHAT_MSG_CHANNEL = true,
|
|
CHAT_MSG_WHISPER = true,
|
|
CHAT_MSG_OFFICER = true,
|
|
CHAT_MSG_GUILD = true
|
|
}
|
|
|
|
local function addLinks(m, t, p)
|
|
if words[t:lower()] and p ~= "_" then
|
|
t = fmt(style, arg2, t)
|
|
return t .. p
|
|
end
|
|
return m
|
|
end
|
|
|
|
function mod:AddMessage(frame, text, ...)
|
|
if not text then
|
|
return self.hooks[frame].AddMessage(frame, text, ...)
|
|
end
|
|
|
|
if valid_events[event] and type(arg2) == "string" then
|
|
text = gsub(text, "((%w+)(.?))", addLinks)
|
|
end
|
|
|
|
return self.hooks[frame].AddMessage(frame, text, ...)
|
|
end
|
|
|
|
function mod:SetItemRef(link, text, button)
|
|
local linkType = sub(link, 1, 6)
|
|
-- Chatter:Print(IsAltKeyDown(), linkType, self.db.profile.altClickToInvite)
|
|
if IsAltKeyDown() and linkType == "player" and self.db.profile.altClickToInvite then
|
|
local name = match(link, "player:([^:]+)")
|
|
InviteUnit(name)
|
|
return nil
|
|
elseif linkType == "invite" then
|
|
local name = sub(link, 8)
|
|
InviteUnit(name)
|
|
return nil
|
|
end
|
|
return self.hooks.SetItemRef(link, text, button)
|
|
end
|
|
|
|
function mod:Info()
|
|
return L["Gives you more flexibility in how you invite people to your group."]
|
|
end
|
|
|
|
function mod:GetOptions()
|
|
return options
|
|
end
|