Search code examples
luaworld-of-warcraft

Is there a way to get the last chat massage in shout or say?


I want to search the last message for a few strings and then echo the message back with those strings replaced with other strings.

I searched multiple documentations but didn't find a way to get the last message. This is the first forum I ask as I already have an account so have no real starting point to give you.

Thanks in advance!


Solution

  • There is no way in the WoW API to get the last chat message of a specific channel. You will have to handle the CHAT_MSG_CHANNEL event (see Event Handling) to read all messages, and store the newest one. Specifically for the say or yell (shout) channels there are the CHAT_MSG_SAY and CHAT_MSG_YELL events respectively.

    To do this your addon needs to own a Frame, these frames can register event handlers and you will have to store the last message you receive from that handler in a local variable in your script (let's call it last_message). Then when your other piece of code executes you can read the last_message variable:

    local frame = CreateFrame("FRAME", "FooAddonFrame");
    local last_message = nil;
    frame:RegisterEvent("CHAT_MSG_CHANNEL");
    local function eventHandler(self, event, ...)
     -- Look up the arguments that are given to your specific event
     -- and assign them to variables in order by retrieving them from
     -- the `...` variable arguments
     local msg, author, language, channel = ...
     print("Hello World! Hello " .. event);
     last_message = msg
    end
    frame:SetScript("OnEvent", eventHandler);