vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
-- Thanks for taking the time to take a look at Answering Machine.
-- For up to date versions, please check the following authorized sites.

-- http://www.curse-gaming.com/mod.php?addid=1583
-- http://www.wowinterface.com/downloads/fileinfo.php?id=4078
-- http://ui.worldofwar.net/ui.php?id=1221

-- Mindark of Dragonmaw

local Missed_Tells = { };
local Missed_Authors = { };
local Answer_Frame = true;
local IsRecording = false;
local rec_AFK = true;
local rec_DND = true;
local Is_AFK = false;
local Is_DND = false;

function AnsweringMachine_OnLoad()
        this:RegisterEvent("VARIABLES_LOADED");
        this:RegisterEvent("CHAT_MSG_SYSTEM");
        this:RegisterEvent("CHAT_MSG_WHISPER");
        this:RegisterForDrag("LeftButton");
end

function AnsweringMachine_OnDragStart()
        AnswerFrame:StartMoving()
end

function AnsweringMachine_OnDragStop()
        AnswerFrame:StopMovingOrSizing()
end

function AnsweringMachine_OnEvent(event)
        if (event == "VARIABLES_LOADED") then
                SlashCmdList["ANSWER"] = Answer_SlashHandler;
                        SLASH_ANSWER1 = "/answer";
        end

        if (event == "CHAT_MSG_SYSTEM") then
                if (string.find(arg1, string.sub(MARKED_AFK_MESSAGE, 1, string.len(MARKED_AFK_MESSAGE) - 4), 1)) then
                        if (rec_AFK) then
                                Ans_Record();
                        elseif (Is_DND) then
                                Ans_Stop();
                        end
                        Is_AFK = true;
                        if (Is_DND) then
                                Is_DND = false;
                        end
                elseif (string.find(arg1, string.sub(MARKED_DND, 1, string.len(MARKED_DND) - 3), 1)) then
                        if (rec_DND) then
                                Ans_Record();
                        elseif (Is_AFK) then
                                Ans_Stop();
                        end
                        Is_DND = true;
                        if (Is_AFK) then
                                Is_AFK = false;
                        end
                end

                if (arg1 == CLEARED_AFK) then
                        Ans_Stop();
                        Is_AFK = false;
                end
                if (arg1 == CLEARED_DND) then
                        Ans_Stop();
                        Is_DND = false;
                end
        end

        if (event == "CHAT_MSG_WHISPER" and IsRecording) then
                table.insert(Missed_Tells, arg1);
                table.insert(Missed_Authors, arg2);
                AnsweringMachine_Text:SetText(ANS_MISSED1 .. table.getn(Missed_Tells) .. ANS_MISSED2);
        end
end

function Ans_Record()
        IsRecording = true;
        if (Answer_Frame) then
                AnswerFrame:Show();
        end
        AnsweringMachine_Text:SetText(ANS_MISSED1 .. table.getn(Missed_Tells) .. ANS_MISSED2);
end

function Ans_Stop()
        IsRecording = false;
        Ans_Retell_Msgs();
        Missed_Tells = { };
        Missed_Authors = { };
        AnswerFrame:Hide();
end

function Ans_Retell_Msgs()
        if (table.getn(Missed_Tells) > 0) then
                DEFAULT_CHAT_FRAME:AddMessage(ANS_SEPARATOR .. "\n" .. ANS_MISSED1 .. table.getn(Missed_Tells) .. ANS_MISSED2, 1.0, 0.5, 1.0);
                for i=1,table.getn(Missed_Tells) do
                        DEFAULT_CHAT_FRAME:AddMessage("[" .. Missed_Authors[i] .. "]: " .. Missed_Tells[i], 1.0, 0.5, 1.0);
                end
                DEFAULT_CHAT_FRAME:AddMessage(ANS_SEPARATOR, 1.0, 0.5, 1.0);
        else
                DEFAULT_CHAT_FRAME:AddMessage(ANS_NOTELLS, 1.0, 1.0, 0.0);
        end
end

function Answer_SlashHandler(msg)
        local words = {};
        for word in string.gfind(msg, "%w+") do
                table.insert(words, word);
        end
        if table.getn(words) == 0 then
                DEFAULT_CHAT_FRAME:AddMessage(ANS_MSG_HELP .. "\n\n", 1.0, 1.0, 0.0);
                DEFAULT_CHAT_FRAME:AddMessage(ANS_FRAME_HELP .. "\n\n", 1.0, 1.0, 0.0);
                DEFAULT_CHAT_FRAME:AddMessage(ANS_REC_AFK_HELP .. "\n\n", 1.0, 1.0, 0.0);
                DEFAULT_CHAT_FRAME:AddMessage(ANS_REC_DND_HELP, 1.0, 1.0, 0.0);
        else
                local cmd = string.lower(words[1]);
                if cmd == "msg" then
                        local ans_msg = "";
                        for i=2,table.getn(words) do
                                ans_msg = ans_msg .. " " .. words[i];
                        end
                        if ans_msg == "" then
                                DEFAULT_CHAT_FRAME:AddMessage(ANS_AWAY_MSG .. DEFAULT_AFK_MESSAGE, 1.0, 1.0, 0.0);
                        else
                                DEFAULT_AFK_MESSAGE = ans_msg;
                                DEFAULT_CHAT_FRAME:AddMessage(ANS_DEFAULT .. DEFAULT_AFK_MESSAGE, 1.0, 1.0, 0.0);
                        end
                elseif cmd == "frame" then
                        if (table.getn(words) == 1) then
                                if (Answer_Frame) then
                                        DEFAULT_CHAT_FRAME:AddMessage(ANS_FRAME_STATUS .. ANS_ON, 1.0, 1.0, 0.0);
                                else
                                        DEFAULT_CHAT_FRAME:AddMessage(ANS_FRAME_STATUS .. ANS_OFF, 1.0, 1.0, 0.0);
                                end                     
                        elseif (string.lower(words[2]) == "on") then
                                DEFAULT_CHAT_FRAME:AddMessage(ANS_FRAME_STATUS .. ANS_ON, 1.0, 1.0, 0.0);
                                if (IsRecording) then
                                        AnswerFrame:Show();
                                end
                                Answer_Frame = true;
                        elseif (string.lower(words[2]) == "off") then
                                DEFAULT_CHAT_FRAME:AddMessage(ANS_FRAME_STATUS .. ANS_OFF, 1.0, 1.0, 0.0);
                                AnswerFrame:Hide();
                                Answer_Frame = false;
                        else
                                DEFAULT_CHAT_FRAME:AddMessage(ANS_FRAME_HELP, 1.0, 1.0, 0.0);
                        end
                elseif cmd == "afk" then
                        if (table.getn(words) == 1) then
                                if (rec_AFK) then
                                        DEFAULT_CHAT_FRAME:AddMessage(ANS_REC_AFK_STATUS .. ANS_ON, 1.0, 1.0, 0.0);
                                else
                                        DEFAULT_CHAT_FRAME:AddMessage(ANS_REC_AFK_STATUS .. ANS_OFF, 1.0, 1.0, 0.0);
                                end
                        elseif (string.lower(words[2]) == "on") then
                                DEFAULT_CHAT_FRAME:AddMessage(ANS_REC_AFK_STATUS .. ANS_ON, 1.0, 1.0, 0.0);
                                rec_AFK = true;
                        elseif (string.lower(words[2]) == "off") then
                                DEFAULT_CHAT_FRAME:AddMessage(ANS_REC_AFK_STATUS .. ANS_OFF, 1.0, 1.0, 0.0);
                                if (Is_AFK) then
                                        Ans_Stop();
                                end
                                rec_AFK = false;
                        else
                                DEFAULT_CHAT_FRAME:AddMessage(ANS_REC_AFK_HELP, 1.0, 1.0, 0.0);
                        end
                elseif cmd == "dnd" then
                        if (table.getn(words) == 1) then
                                if (rec_DND) then
                                        DEFAULT_CHAT_FRAME:AddMessage(ANS_REC_DND_STATUS .. ANS_ON, 1.0, 1.0, 0.0);
                                else
                                        DEFAULT_CHAT_FRAME:AddMessage(ANS_REC_DND_STATUS .. ANS_OFF, 1.0, 1.0, 0.0);
                                end
                        elseif (string.lower(words[2]) == "on") then
                                DEFAULT_CHAT_FRAME:AddMessage(ANS_REC_DND_STATUS .. ANS_ON, 1.0, 1.0, 0.0);
                                rec_DND = true;
                        elseif (string.lower(words[2]) == "off") then
                                DEFAULT_CHAT_FRAME:AddMessage(ANS_REC_DND_STATUS .. ANS_OFF, 1.0, 1.0, 0.0);
                                if (Is_DND) then
                                        Ans_Stop();
                                end
                                rec_DND = false;
                        else
                                DEFAULT_CHAT_FRAME:AddMessage(ANS_REC_DND_HELP, 1.0, 1.0, 0.0);
                        end
                else
                        DEFAULT_CHAT_FRAME:AddMessage(ANS_MSG_HELP .. "\n\n" .. ANS_FRAME_HELP, 1.0, 1.0, 0.0);
                end
        end     
end

Generated by GNU Enscript 1.6.5.90.