Files
coa-chatter/Modules/ClickInvite.lua
T

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