---------------------------- -- Localization -- ---------------------------- local L = AceLibrary("AceLocale-2.2"):new("BigWigsBossBlock") L:RegisterTranslations("enUS", function() return { ["BossBlock"] = true, ["Suppress bossmod chat from other players."] = true, ["Suppress Raid Chat"] = true, ["Suppress messages in the raid channel."] = true, ["Suppress RaidWarn Chat"] = true, ["Suppress RaidWarn messages in the chat frames."] = true, ["Suppress RaidWarn"] = true, ["Suppress RaidWarn popup messages."] = true, ["Suppress RaidSay"] = true, ["Suppress CTRA RaidSay popup messages."] = true, ["Suppress oRA RaidSay popup messages."] = true, ["Suppress oRA2 RaidSay popup messages."] = true, ["Suppress Tells"] = true, ["Suppress Tell messages."] = true, ["Debugging"] = true, ["Show debug messages."] = true, ["Suppressing Chatframe"] = true, ["Suppressing RaidWarningFrame"] = true, ["Suppressing CT_RAMessageFrame"] = true, ["Suppressed"] = true, ["Shown"] = true, } end) L:RegisterTranslations("koKR", function() return { ["BossBlock"] = "보스차단", ["Suppress bossmod chat from other players."] = "타인의 보스모드 대화 차단.", ["Suppress Raid Chat"] = "공격대 대화 차단", ["Suppress messages in the raid channel."] = "공격대 채널에 메세지 차단.", ["Suppress RaidWarn Chat"] = "공격대경고 대화 차단", ["Suppress RaidWarn messages in the chat frames."] = "대화창에 공격대경고 메세지 차단", ["Suppress RaidWarn"] = "공격대경고 차단", ["Suppress RaidWarn popup messages."] = "공격대경고 알림 메세지 차단", ["Suppress RaidSay"] = "RaidSay 차단", ["Suppress CTRA RaidSay popup messages."] = "CTRA RaidSay 알림 메세지 차단", ["Suppress oRA RaidSay popup messages."] = "oRA RaidSay 알림 메세지 차단", ["Suppress oRA2 RaidSay popup messages."] = "oRA2 RaidSay 알림 메세지 차단", ["Suppress Tells"] = "일반대화 차단", ["Suppress Tell messages."] = "일반대화 메세지 차단", ["Debugging"] = "디버깅", ["Show debug messages."] = "디버그 메세지 표시", ["Suppressing Chatframe"] = "대화창 차단됨", ["Suppressing RaidWarningFrame"] = "공격대경고창 차단됨", ["Suppressing CT_RAMessageFrame"] = "CR_RA메세지창 차단됨", ["Suppressed"] = "차단됨", ["Shown"] = "표시함", } end) L:RegisterTranslations("zhCN", function() return { ["BossBlock"] = "信息阻挡", ["Suppress bossmod chat from other players."] = "阻挡其他玩家的首领插件发送的信息。", ["Suppress Raid Chat"] = "阻挡团队频道", ["Suppress messages in the raid channel."] = "阻挡团队频道中的信息", ["Suppress RaidWarn Chat"] = "阻挡团队警告聊天", ["Suppress RaidWarn messages in the chat frames."] = "阻挡聊天窗体中的团队警告信息", ["Suppress RaidWarn"] = "阻挡团队警告", ["Suppress RaidWarn popup messages."] = "阻挡团队警告中的信息", ["Suppress RaidSay"] = "阻挡RS", ["Suppress CTRA RaidSay popup messages."] = "阻挡团队助手(CTRA)的RS信息", ["Suppress Tells"] = "阻挡密语", ["Suppress Tell messages."] = "阻挡密语中的信息", ["Debugging"] = "除错", ["Show debug messages."] = "显示除错信息", ["Suppressing Chatframe"] = "正在阻挡Chatframe", ["Suppressing RaidWarningFrame"] = "正在阻挡RaidWarningFrame", ["Suppressing CT_RAMessageFrame"] = "正在阻挡CT_RAMessageFrame", ["Suppressed"] = "阻挡", ["Shown"] = "显示", } end) L:RegisterTranslations("zhTW", function() return { ["BossBlock"] = "訊息阻擋", ["Suppress bossmod chat from other players."] = "阻擋其他玩家的首領插件發送的訊息。", ["Suppress Raid Chat"] = "阻擋團隊頻道", ["Suppress messages in the raid channel."] = "阻擋團隊頻道中的訊息", ["Suppress RaidWarn Chat"] = "阻擋團隊警告聊天", ["Suppress RaidWarn messages in the chat frames."] = "阻擋聊天窗體中的團隊警告訊息", ["Suppress RaidWarn"] = "阻擋團隊警告", ["Suppress RaidWarn popup messages."] = "阻擋團隊警告中的訊息", ["Suppress RaidSay"] = "阻擋RS", ["Suppress CTRA RaidSay popup messages."] = "阻擋團隊助手(CTRA)的RS訊息", ["Suppress Tells"] = "阻擋密語", ["Suppress Tell messages."] = "阻擋密語中的訊息", ["Debugging"] = "除錯", ["Show debug messages."] = "顯示除錯訊息", ["Suppressing Chatframe"] = "正在阻擋Chatframe", ["Suppressing RaidWarningFrame"] = "正在阻擋RaidWarningFrame", ["Suppressing CT_RAMessageFrame"] = "正在阻擋CT_RAMessageFrame", ["Suppressed"] = "阻擋", ["Shown"] = "顯示", } end) L:RegisterTranslations("deDE", function() return { ["BossBlock"] = "BossBlock", ["Suppress bossmod chat from other players."] = "Bossmod Chat von anderen Spielern unterdr\195\188cken.", ["Suppress Raid Chat"] = "Raid Chat unterdr\195\188cken", ["Suppress messages in the raid channel."] = "Nachrichten im Raid Channel unterdr\195\188cken", ["Suppress RaidWarn Chat"] = "RaidWarn Chat unterdr\195\188cken", ["Suppress RaidWarn messages in the chat frames."] = "RaidWarn Nachrichten im Chat Fenster unterdr\195\188cken.", ["Suppress RaidWarn"] = "RaidWarn unterdr\195\188cken", ["Suppress RaidWarn popup messages."] = "RaidWarn Popup-Nachrichten unterdr\195\188cken.", ["Suppress RaidSay"] = "RaidSay unterdr\195\188cken", ["Suppress CTRA RaidSay popup messages."] = "CTRA RaidSay Popup Nachrichten unterdr\195\188cken.", ["Suppress oRA RaidSay popup messages."] = "oRA RaidSay Popup Nachrichten unterdr\195\188cken.", ["Suppress oRA2 RaidSay popup messages."] = "oRA2 RaidSay Popup Nachrichten unterdr\195\188cken.", ["Suppress Tells"] = "Fl\195\188stern unterdr\195\188cken", ["Suppress Tell messages."] = "Fl\195\188stern Nachrichten unterdr\195\188cken.", ["Debugging"] = "Debugging", ["Show debug messages."] = "Debug Nachrichten anzeigen.", ["Suppressing Chatframe"] = "Chatframe unterdr\195\188ckt", ["Suppressing RaidWarningFrame"] = "RaidWarningFrame unterdr\195\188cket", ["Suppressing CT_RAMessageFrame"] = "CT_RAMessageFrame unterdr\195\188ckt", ["Suppressed"] = "Unterdr\195\188ckt", ["Shown"] = "Angezeigt", } end) L:RegisterTranslations("frFR", function() return { ["BossBlock"] = "BossBlock", ["Suppress bossmod chat from other players."] = "Supprime les messages des BossMods des autres joueurs.", ["Suppress Raid Chat"] = "Supprimer les messages du canal Raid", ["Suppress messages in the raid channel."] = "Supprime les messages du canal Raid.", ["Suppress RaidWarn Chat"] = "Supprimer les Avertissements Raid du chat", ["Suppress RaidWarn messages in the chat frames."] = "Supprime les messages de l'Avertissement Raid de la fenêtre de discussion.", ["Suppress RaidWarn"] = "Supprimer les Avertissements Raid", ["Suppress RaidWarn popup messages."] = "Supprime les messages à l'écran de l'Avertissement Raid.", ["Suppress RaidSay"] = "Supprimer les RaidSay", ["Suppress CTRA RaidSay popup messages."] = "Supprime les messages à l'écran du RaidSay de CTRA.", ["Suppress oRA RaidSay popup messages."] = "Supprime les messages à l'écran du RaidSay de oRA.", ["Suppress oRA2 RaidSay popup messages."] = "Supprime les messages à l'écran du RaidSay de oRA2.", ["Suppress Tells"] = "Supprimer les chuchotements", ["Suppress Tell messages."] = "Supprime les messages chuchotés.", ["Debugging"] = "Débogage", ["Show debug messages."] = "Affiche les messages de débogage.", ["Suppressing Chatframe"] = "Suppression de la fenêtre de discussion", ["Suppressing RaidWarningFrame"] = "Suppression du cadre de l'Avertissement Raid", ["Suppressing CT_RAMessageFrame"] = "Suppression du cadre du RaidSay de CTRA", ["Suppressed"] = "Supprimé", ["Shown"] = "Affiché", } end) ------------------------------ -- Are you local? -- ------------------------------ local raidchans = { CHAT_MSG_WHISPER = "hidetells", CHAT_MSG_RAID = "hideraidchat", CHAT_MSG_RAID_WARNING = "hideraidwarnchat", CHAT_MSG_RAID_LEADER = "hideraidchat", } local map = {[true] = "|cffff0000"..L["Suppressed"].."|r", [false] = "|cff00ff00"..L["Shown"].."|r"} local blockregexs = { "%*+ .+ %*+$", } local blockstrings = { -- enUS ["YOU HAVE THE PLAGUE!"] = true, ["YOU ARE THE BOMB!"] = true, ["YOU ARE BEING WATCHED!"] = true, ["YOU ARE CURSED!"] = true, ["YOU ARE BURNING!"] = true, ["YOU ARE AFFLICTED BY VOLATILE INFECTION!"] = true, ["YOU ARE MARKED!"] = true, -- znCH ["你中了瘟疫!离开人群!"] = true, ["你是炸弹人!"] = true, ["你被盯上了!"] = true, ["你中了诅咒!"] = true, ["你正在燃烧!"] = true, ["你中了快速传染!"] = true, ["你被标记了!"] = true, -- deDE ["DU HAST DIE SEUCHE!"] = true, ["DU BIST DIE BOMBE!"] = true, ["DU WIRST BEOBACHTET!"] = true, ["DU BIST VERFLUCHT!"] = true, ["DU BRENNST!"] = true, -- ["YOU ARE AFFLICTED BY VOLATILE INFECTION!"] = true, ["DU BIST MARKIERT!"] = true, -- frFR ["TU AS LA PESTE !"] = true, ["TU ES LA BOMBE !"] = true, ["TU ES SURVEILLE !"] = true, ["TU ES MAUDIT !"] = true, ["TU BRULES !"] = true, ["TU ES AFFLIGE PAR INFECTION VOLATILE !"] = true, ["TU ES MARQUE !"] = true, } ---------------------------------- -- Module Declaration -- ---------------------------------- BigWigsBossBlock = BigWigs:NewModule("BossBlock", "AceHook-2.1") BigWigsBossBlock.defaultDB = { hideraidwarnchat = true, hideraidwarn = true, hideraidsay = true, hideraidchat = true, hidetells = true, } BigWigsBossBlock.consoleCmd = "block" BigWigsBossBlock.consoleOptions = { type = "group", name = L["BossBlock"], desc = L["Suppress bossmod chat from other players."], args = { ["chat"] = { type = "toggle", order = 101, name = L["Suppress Raid Chat"], desc = L["Suppress messages in the raid channel."], get = function() return BigWigsBossBlock.db.profile.hideraidchat end, set = function(v) BigWigsBossBlock.db.profile.hideraidchat = v end, map = map, }, ["rs"] = { type = "toggle", order = 102, name = L["Suppress RaidSay"], desc = L["Suppress CTRA RaidSay popup messages."], get = function() return BigWigsBossBlock.db.profile.hideraidsay end, set = function(v) BigWigsBossBlock.db.profile.hideraidsay = v end, map = map, hidden = function() return not CT_RAMessageFrame end, }, ["ora_rs"] = { type = "toggle", order = 103, name = L["Suppress RaidSay"], desc = L["Suppress oRA RaidSay popup messages."], get = function() return oRA_RaidSay:GetOpt("blockboss") end, set = function(v) oRA_RaidSay:TogOpt("blockboss") end, map = map, hidden = function() return not oRA_RaidSay end, }, ["ora2_rs"] = { type = "toggle", order = 104, name = L["Suppress RaidSay"], desc = L["Suppress oRA2 RaidSay popup messages."], get = function() return oRAPRaidWarn.db.profile.bossblock end, set = function(v) oRAPRaidWarn.db.profile.bossblock = v end, map = map, hidden = function() return not oRAPRaidWarn end, }, ["rw"] = { type = "toggle", order = 105, name = L["Suppress RaidWarn"], desc = L["Suppress RaidWarn popup messages."], get = function() return BigWigsBossBlock.db.profile.hideraidwarn end, set = function(v) BigWigsBossBlock.db.profile.hideraidwarn = v end, map = map, }, ["rwchat"] = { type = "toggle", order = 106, name = L["Suppress RaidWarn Chat"], desc = L["Suppress RaidWarn messages in the chat frames."], get = function() return BigWigsBossBlock.db.profile.hideraidwarnchat end, set = function(v) BigWigsBossBlock.db.profile.hideraidwarnchat = v end, map = map, }, ["tell"] = { type = "toggle", order = 107, name = L["Suppress Tells"], desc = L["Suppress Tell messages."], get = function() return BigWigsBossBlock.db.profile.hidetells end, set = function(v) BigWigsBossBlock.db.profile.hidetells = v end, map = map, }, ["debugspacer"] = { type = "header", order = 108, hidden = function() return not BigWigsBossBlock:IsDebugging() and not BigWigs:IsDebugging() end, }, ["debug"] = { type = "toggle", name = L["Debugging"], desc = L["Show debug messages."], order = 109, get = function() return BigWigsBossBlock:IsDebugging() end, set = function(v) BigWigsBossBlock:SetDebugging(v) end, hidden = function() return not BigWigsBossBlock:IsDebugging() and not BigWigs:IsDebugging() end, }, }, } ------------------------------ -- Event Handlers -- ------------------------------ function BigWigsBossBlock:OnEnable() self:Hook("ChatFrame_OnEvent") self:Hook(RaidWarningFrame, "AddMessage", "RWAddMessage", true) if CT_RAMessageFrame then self:Hook(CT_RAMessageFrame, "AddMessage", "CTRA_AddMessage") end end function BigWigsBossBlock:ChatFrame_OnEvent(event) if self:IsChannelSuppressed(event) and self:IsSpam(arg1) then self:Debug(L["Suppressing Chatframe"], event, arg1) return end self.hooks["ChatFrame_OnEvent"](event) end function BigWigsBossBlock:RWAddMessage(frame, message, r, g, b, a) if self.db.profile.hideraidwarn and self:IsSpam(message) then self:Debug(L["Suppressing RaidWarningFrame"], message) return end self.hooks[RaidWarningFrame].AddMessage(frame, message, r, g, b, a) end function BigWigsBossBlock:CTRA_AddMessage(obj, text, red, green, blue, alpha, holdTime) if self.db.profile.hideraidsay and self:IsSpam(text) then self:Debug(L["Suppressing CT_RAMessageFrame"], text) return end self.hooks[obj].AddMessage(obj, text, red, green, blue, alpha, holdTime) end function BigWigsBossBlock:IsSpam(text) if not text then return end if blockstrings[text] then return true end for _,regex in pairs(blockregexs) do if string.find(text, regex) then return true end end end function BigWigsBossBlock:IsChannelSuppressed(chan) if not raidchans[chan] then return end return self.db.profile[raidchans[chan]] end