Initial commit: Chatter v1.2.11 (Curse package)
This commit is contained in:
@@ -0,0 +1,253 @@
|
||||
local mod = Chatter:NewModule("Highlights", "AceHook-3.0", "AceEvent-3.0", "LibSink-2.0")
|
||||
local L = LibStub("AceLocale-3.0"):GetLocale("Chatter")
|
||||
mod.modName = L["Highlights"]
|
||||
|
||||
local Media = LibStub("LibSharedMedia-3.0")
|
||||
local PlaySoundFile = _G.PlaySoundFile
|
||||
local UnitName = _G.UnitName
|
||||
local pairs = _G.pairs
|
||||
local select = _G.select
|
||||
local type = _G.type
|
||||
local gsub = _G.string.gsub
|
||||
local ChatFrame_GetMessageEventFilters = _G.ChatFrame_GetMessageEventFilters
|
||||
local defSound = {["None"] = [[Interface\Quiet.mp3]]}
|
||||
Media:Register("sound", "Loot Chime", [[Sound\interface\igLootCreature.wav]])
|
||||
Media:Register("sound", "Whisper Ping", [[Sound\interface\iTellMessage.wav]])
|
||||
Media:Register("sound", "Magic Click", [[Sound\interface\MagicClick.wav]])
|
||||
|
||||
local player = UnitName("player")
|
||||
local defaults = {
|
||||
profile = {
|
||||
words = {
|
||||
[player:lower()] = player
|
||||
},
|
||||
sound = true,
|
||||
soundFile = "None",
|
||||
useSink = true,
|
||||
rerouteMessage = true,
|
||||
customChannels = {},
|
||||
sinkOptions = {}
|
||||
}
|
||||
}
|
||||
|
||||
local options = {
|
||||
defaultOptions = {
|
||||
type = "group",
|
||||
name = L["Options"],
|
||||
order = 1,
|
||||
args = {
|
||||
sound = {
|
||||
type = "toggle",
|
||||
name = L["Use sound"],
|
||||
desc = L["Play a soundfile when one of your keywords is said."],
|
||||
get = function()
|
||||
return mod.db.profile.sound
|
||||
end,
|
||||
set = function(info, v)
|
||||
mod.db.profile.sound = v
|
||||
end
|
||||
},
|
||||
sink = {
|
||||
type = "toggle",
|
||||
name = L["Show SCT message"],
|
||||
desc = L["Show highlights in your SCT mod"],
|
||||
order = 21,
|
||||
get = function()
|
||||
return mod.db.profile.useSink
|
||||
end,
|
||||
set = function(info, v)
|
||||
mod.db.profile.useSink = v
|
||||
end
|
||||
},
|
||||
rerouteMessage = {
|
||||
type = "toggle",
|
||||
name = L["Reroute whole message to SCT"],
|
||||
desc = L["Reroute whole message to SCT instead of just displaying 'who said keyword in channel'"],
|
||||
order = 22,
|
||||
get = function()
|
||||
return mod.db.profile.rerouteMessage
|
||||
end,
|
||||
set = function(info, v)
|
||||
mod.db.profile.rerouteMessage = v
|
||||
end,
|
||||
disabled = function() return not mod.db.profile.useSink end
|
||||
},
|
||||
soundFile = {
|
||||
type = "select",
|
||||
name = L["Sound File"],
|
||||
desc = L["Sound file to play"],
|
||||
get = function()
|
||||
return mod.db.profile.soundFile
|
||||
end,
|
||||
set = function(info, v)
|
||||
mod.db.profile.soundFile = v
|
||||
PlaySoundFile(Media:Fetch("sound", v))
|
||||
end,
|
||||
dialogControl = "LSM30_Sound",
|
||||
values = function () if Media:HashTable("sound") then return Media:HashTable("sound") else return defSound end end,
|
||||
disabled = function() return not mod.db.profile.sound end
|
||||
},
|
||||
addWord = {
|
||||
type = "input",
|
||||
name = L["Add Word"],
|
||||
desc = L["Add word to your highlight list"],
|
||||
get = function() end,
|
||||
set = function(info, v)
|
||||
-- no whitespace only stuff
|
||||
if v:match("^%s*$") then return end
|
||||
mod.db.profile.words[v:lower()] = v
|
||||
end
|
||||
},
|
||||
removeWord = {
|
||||
type = "select",
|
||||
name = L["Remove Word"],
|
||||
desc = L["Remove a word from your highlight 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 highlights?"]) end
|
||||
}
|
||||
}
|
||||
},
|
||||
config = {
|
||||
type = "group",
|
||||
name = L["Custom Channel Sounds"],
|
||||
args = {}
|
||||
}
|
||||
}
|
||||
|
||||
function mod:OnInitialize()
|
||||
self.db = Chatter.db:RegisterNamespace("Highlight", defaults)
|
||||
self:AddCustomChannels(GetChannelList())
|
||||
self:SetSinkStorage(self.db.profile.sinkOptions)
|
||||
options.output = self:GetSinkAce3OptionsDataTable()
|
||||
end
|
||||
|
||||
local words
|
||||
function mod:OnEnable()
|
||||
words = self.db.profile.words
|
||||
self:RegisterEvent("CHAT_MSG_SAY", "ParseChat")
|
||||
self:RegisterEvent("CHAT_MSG_GUILD", "ParseChat")
|
||||
self:RegisterEvent("CHAT_MSG_BATTLEGROUND", "ParseChat")
|
||||
self:RegisterEvent("CHAT_MSG_BATTLEGROUND_LEADER", "ParseChat")
|
||||
self:RegisterEvent("CHAT_MSG_OFFICER", "ParseChat")
|
||||
self:RegisterEvent("CHAT_MSG_PARTY", "ParseChat")
|
||||
self:RegisterEvent("CHAT_MSG_RAID_LEADER", "ParseChat")
|
||||
self:RegisterEvent("CHAT_MSG_RAID", "ParseChat")
|
||||
self:RegisterEvent("CHAT_MSG_RAID_WARNING", "ParseChat")
|
||||
self:RegisterEvent("CHAT_MSG_SAY", "ParseChat")
|
||||
self:RegisterEvent("CHAT_MSG_WHISPER", "ParseChat")
|
||||
self:RegisterEvent("CHAT_MSG_BN_WHISPER", "ParseChat")
|
||||
self:RegisterEvent("CHAT_MSG_BN_CONVERSATION", "ParseChat")
|
||||
self:RegisterEvent("CHAT_MSG_CHANNEL", "ParseChat")
|
||||
self:RegisterEvent("CHAT_MSG_YELL", "ParseChat")
|
||||
self:RegisterEvent("CHAT_MSG_CHANNEL_NOTICE")
|
||||
self:AddCustomChannels(GetChannelList())
|
||||
self:AddCustomChannels(
|
||||
"YELL", L["Yell"],
|
||||
"GUILD", L["Guild"],
|
||||
"OFFICER", L["Officer"],
|
||||
"RAID", L["Raid"],
|
||||
"PARTY", L["Party"],
|
||||
"RAID_WARNING", L["Raid Warning"],
|
||||
"SAY", L["Say"],
|
||||
"BATTLEGROUND", L["Battleground"],
|
||||
"BATTLEGROUND_LEADER", L["Battleground"],
|
||||
"WHISPER", L["Whisper"],
|
||||
"BN_WHISPER", L["RealID Whisper"],
|
||||
"BN_CONVERSATION", L["RealID Conversation"]
|
||||
)
|
||||
end
|
||||
|
||||
function mod:CHAT_MSG_CHANNEL_NOTICE(evt, notice)
|
||||
self:AddCustomChannels(GetChannelList())
|
||||
end
|
||||
|
||||
function mod:AddCustomChannels(...)
|
||||
-- excludeChannels(EnumerateServerChannels())
|
||||
for i = 1, select("#", ...), 2 do
|
||||
local id, name = select(i, ...)
|
||||
if not options[name:gsub(" ", "_")] then
|
||||
options.config.args[name:gsub(" ", "_")] = {
|
||||
type = "select",
|
||||
name = name,
|
||||
values = Media:HashTable("sound") or {},
|
||||
desc = L["Play a sound when a message is received in this channel"],
|
||||
order = type(id) == "number" and 103 or 102,
|
||||
get = function() return self.db.profile.customChannels[id] or "None" end,
|
||||
set = function(info, v)
|
||||
self.db.profile.customChannels[id] = v
|
||||
PlaySoundFile(Media:Fetch("sound", v))
|
||||
end
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function mod:ParseChat(evt, msg, sender, ...)
|
||||
if sender == player then return end
|
||||
|
||||
local filters = ChatFrame_GetMessageEventFilters(evt)
|
||||
if filters then
|
||||
for i, filterFunc in ipairs(filters) do
|
||||
local filtered, new_message = filterFunc(DEFAULT_CHAT_FRAME, evt, msg, sender, ...)
|
||||
if filtered then
|
||||
return
|
||||
end
|
||||
msg = new_message or msg
|
||||
end
|
||||
end
|
||||
|
||||
local msg = msg:lower()
|
||||
for k, v in pairs(words) do
|
||||
if msg:find(k) then
|
||||
self:Highlight(msg, sender, k, select(7, ...), evt)
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
if evt == "CHAT_MSG_CHANNEL" then
|
||||
local num = select(6, ...)
|
||||
local snd = self.db.profile.customChannels[num]
|
||||
if snd then
|
||||
PlaySoundFile(Media:Fetch("sound", snd))
|
||||
return
|
||||
end
|
||||
else
|
||||
local e = evt:gsub("^CHAT_MSG_", "")
|
||||
local snd = self.db.profile.customChannels[e]
|
||||
if snd then
|
||||
PlaySoundFile(Media:Fetch("sound", snd))
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function mod:Highlight(msg, who, what, where, event)
|
||||
if not where or #where == 0 then
|
||||
where = _G[event] or event:gsub("CHAT_MSG_", "")
|
||||
end
|
||||
if self.db.profile.sound then
|
||||
PlaySoundFile(Media:Fetch("sound", self.db.profile.soundFile))
|
||||
end
|
||||
if self.db.profile.useSink then
|
||||
if mod.db.profile.rerouteMessage then
|
||||
msg = gsub( msg, "|h[^|]+|h(.-)|h", "%1" )
|
||||
self:Pour((L["[%s] %s: %s"]):format(where, who, msg), 1, 1, 0, nil, 24, "OUTLINE", false)
|
||||
else
|
||||
self:Pour((L["%s said '%s' in %s"]):format(who, what, where), 1, 1, 0, nil, 24, "OUTLINE", false)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function mod:Info()
|
||||
return L["Alerts you when someone says a keyword or speaks in a specified channel."]
|
||||
end
|
||||
|
||||
function mod:GetOptions()
|
||||
return options
|
||||
end
|
||||
|
||||
-- vim: ts=4 noexpandtab
|
||||
Reference in New Issue
Block a user