commit 78e7beff90b62a01df79f43dacb937bbb4a637eb Author: PhatPhuckDave Date: Sun Dec 8 00:44:44 2024 +0100 Initial commit Port from weakaura diff --git a/Channeler.lua b/Channeler.lua new file mode 100644 index 0000000..5cb942c --- /dev/null +++ b/Channeler.lua @@ -0,0 +1,111 @@ +---@class Channel +---@field name string +---@field password string|nil + +---@type Channel[] +local channels = { + { name = "Agent", password = "agents42" }, + { name = "Horde", password = "garrosh" } +} +---@type string +local chatFrameName = "Auto" +---@type string[] +local subscribedMessageGroups = { + "SAY", + "YELL", + "EMOTE", + "PARTY", + "PARTY_LEADER", + "RAID", + "RAID_LEADER", + "RAID_WARNING", + "BATTLEGROUND", + "BATTLEGROUND_LEADER", + "INSTANCE_CHAT", + "INSTANCE_CHAT_LEADER", + "WHISPER" +} +---@type string[] +local subscribedChannels = { + "Agent", + "Horde" +} + +local function JoinChannels() + for _, channel in ipairs(channels) do + if channel.password then + JoinPermanentChannel(channel.name, channel.password) + else + JoinPermanentChannel(channel.name) + end + end +end + +local function FindOrCreateChatWindow() + for i = 1, NUM_CHAT_WINDOWS do + local name = GetChatWindowInfo(i) + if name == chatFrameName then + print(string.format("Found chat window %s", name)) + local frame = _G["ChatFrame" .. i] + if FCF_IsValidChatFrame(frame) then + print(string.format("Frame %s is valid", name)) + return frame + else + print(string.format("Frame %s is invalid", name)) + end + end + end + + print("Opening new chat window") + FCF_OpenNewWindow(chatFrameName) + for i = 1, NUM_CHAT_WINDOWS do + local name = GetChatWindowInfo(i) + if name == chatFrameName then + print(string.format("Found chat window %s", name)) + local frame = _G["ChatFrame" .. i] + if FCF_IsValidChatFrame(frame) then + print(string.format("Frame %s is valid", name)) + return frame + else + print(string.format("Frame %s is invalid", name)) + end + end + end + + return nil +end + +local function ConfigureChatWindow() + local general = _G["ChatFrame1"] + local chatFrame = FindOrCreateChatWindow() + if not chatFrame then + print(string.format("Chat window %s not found", chatFrameName)) + return + end + + --SetChatWindowName(chatFrame, chatFrameName) + print("Removing all message groups") + ChatFrame_RemoveAllMessageGroups(chatFrame) + print("Removing all channels") + ChatFrame_RemoveAllChannels(chatFrame) + print("Adding message groups") + for _, messageGroup in ipairs(subscribedMessageGroups) do + print(string.format("Adding message group: %s", messageGroup)) + ChatFrame_AddMessageGroup(chatFrame, strtrim(messageGroup)) + ChatFrame_RemoveMessageGroup(general, strtrim(messageGroup)) + end + print("Adding channels") + for _, channel in ipairs(subscribedChannels) do + print(string.format("Adding channel: %s", channel)) + ChatFrame_AddChannel(chatFrame, strtrim(channel)) + ChatFrame_RemoveChannel(general, strtrim(channel)) + end +end + +local frame = CreateFrame("Frame") +--frame:RegisterEvent("PLAYER_LOGIN") +frame:RegisterEvent("PLAYER_ENTERING_WORLD") +frame:SetScript("OnEvent", function(self, event, ...) + JoinChannels() + ConfigureChatWindow() +end) diff --git a/Channeler.toc b/Channeler.toc new file mode 100644 index 0000000..143aa56 --- /dev/null +++ b/Channeler.toc @@ -0,0 +1,7 @@ +## Interface: 70300 +## Title: Channeler +## Notes: Automatically sets up chat channels +## Author: Cyka + +#core +Channeler.lua