Quantcast
function AG_OnLoad(self)
	AG_SetupOptionsUI();
    self:RegisterEvent("CHAT_MSG_GUILD_ACHIEVEMENT")
    self:RegisterEvent("CHAT_MSG_ACHIEVEMENT")
    self:RegisterEvent("CHAT_MSG_PARTY")
    self:RegisterEvent("CHAT_MSG_SYSTEM")
	self:RegisterEvent("CHAT_MSG_SYSTEM")
	self:RegisterEvent("GUILD_ROSTER_UPDATE")
    --slash commands
	SlashCmdList["AG"] = AG_Command;
    SLASH_AG1 = "/ag";
    SLASH_AG2 = "/autogratzer";
    if(AG_GratsMessage == nil)then
		AG_GratsMessage="Gratzzz";
		AG_Print("Grats message set to: Gratzzz");
		AG_LastMessage = 1;
	end
	if(AG_GuildJoinMessageToggle == nil)then
		AG_GuildJoinMessageToggle = False;
	end
	if(AG_Guild == nil)then
		AG_Guild = true;
	end
	if(AG_Say == nil)then
		AG_Say = true;
	end
	if(AG_Party == nil)then
		AG_Party = false;
	end
	if(AG_Delay == nil)then
		AG_Delay=0;
		--AG_Print("Grats message delay set to: 1000ms");
	end
	if(AG_GuildDisabledOverride == nil)then
		AG_GuildDisabledOverride = false;
	end
	AG_Print("AG Enabled");
end

function AG_SetupOptionsUI()
	AutoGratzer = {};
	AutoGratzer.ui = {};
	AutoGratzer.ui.panel = CreateFrame( "Frame", "AutoGratzerPanel", UIParent );
	AutoGratzer.ui.panel.name = "AutoGratzer";
	InterfaceOptions_AddCategory(AutoGratzer.ui.panel);

end

 function AG_GetCmd(msg)
 	if msg then
 		local a=(msg); --contiguous string of non-space characters
 		if a then
 			return msg
 		else
 			return "";
 		end
 	end
 end

function AG_ShowHelp()
	print("AutoGratzer usage:");
	print("'/ag {msg}' or '/autogratzer {msg}'");
	print("'/ag delay {delay}' or '/autogratzer {delay}', with delay in milliseconds to set delay");
	print("'/ag guild' or '/autogratzer guild' to enable/disable guild gratzing");
	print("'/ag say' or '/autogratzer say' to enable/disable say gratzing");
	print("'/ag party' or '/autogratzer party' to enable/disable say gratzing");
end

function AG_ToggleGuild()
	if(AG_Guild) then
		AG_Guild = false;
		AG_Print("Guild gratzing now Off");
	else
		AG_Guild = true;
		AG_Print("Guild gratzing now On");
	end;
end

function AG_ToggleSay()
	if(AG_Say) then
		AG_Say = false;
		AG_Print("Say gratzing now Off");
	else
		AG_Say = true;
		AG_Print("Say gratzing now On");
	end;
end

function AG_ToggleParty()
	if(AG_Party) then
		AG_Party = false;
		AG_Print("Party gratzing now Off");
	else
		AG_Party = true;
		AG_Print("Party gratzing now On");
	end;
end

function AG_SetDelay(delay)
	if(delay ~= nill)then
		AG_Delay = tonumber(delay);
		AG_Print("Grats message delay set to: " ..delay.."ms");
	else
		AG_Print("Provide a number in milliseconds, eg '/ag delay 5000' for 5 seconds");
	end
end

function AG_Command(msg)
    local Cmd, SubCmd = AG_GetCmd(msg);
    if (Cmd == "")then
        AG_ShowHelp();
    elseif (Cmd == "help")then
        AG_ShowHelp();
    elseif (Cmd == "options")then
        AG_ShowHelp();
    elseif (Cmd == "guild")then
        AG_ToggleGuild();
    elseif (Cmd == "say")then
        AG_ToggleSay();
    elseif (Cmd == "party")then
        AG_ToggleParty();
	elseif (string.find(Cmd,"delay") == 1)then
        AG_SetDelay(string.match(Cmd,"%d+"));
    else
        AG_GratsMessage = Cmd;
		AG_Print("Grats message set to: " .. Cmd);
    end
end


function AG_OnEvent(self,event,arg1,arg2)
	if(event == "GUILD_ROSTER_UPDATE")then AG_CheckOverride(); return end
	if(AG_GratsMessage == nil)then
		AG_GratsMessage="Gratzzz";
    end
    if(not AG_IsMe(arg2))then
	    if(event == "CHAT_MSG_GUILD_ACHIEVEMENT" and not AG_GuildDisabledOverride)then AG_DoGrats("GUILD");
	    elseif(event == "CHAT_MSG_ACHIEVEMENT")then AG_DoGrats("SAY");
	    elseif(event == "CHAT_MSG_ACHIEVEMENT")then AG_DoGrats("PARTY");
	    elseif(event == "CHAT_MSG_SYSTEM" and not AG_GuildDisabledOverride) then
	    	if(arg1 ~= nil) then
				if(string.find(arg1,"has joined the guild.")) then AG_GuildWelcome();
				end
			end
	    end
	end
end

function AG_DoGrats(source)
	if((source == "SAY" and AG_Say == true) or (source == "GUILD" and AG_Guild == true) or (source == "PARTY" and AG_Party == true)) then
		CurTime=GetTime();
		if (AG_LastMessage == nil) then
			AG_LastMessage = 1;
		end
		--Time to wait after message is fixed at 6 seconds atm
		if((CurTime - AG_LastMessage) > 6)then
			AG_LastMessage = GetTime();
			if(AG_Delay > 0)then
				C_Timer.After((AG_Delay/1000), function() SendChatMessage(AG_GratsMessage, source); end)
			else
				SendChatMessage(AG_GratsMessage, source);
			end
		end
	end
end

function AG_GuildWelcome()
	--Testing, enable if you know what your doing...
	if(AG_GuildJoinMessageToggle and (GetTime() - AG_LastMessage > 6))then
		AG_LastMessage = GetTime();
		if(AG_Delay > 0)then
			C_Timer.After((AG_Delay/1000), function() SendChatMessage("Welcome :)", "GUILD"); end)
		else
			SendChatMessage("Welcome :)", "GUILD");
		end
    end
end

function AG_IsMe(nameString)
	local name,server = split(nameString,"-")
	local myName, myServer = UnitName("player")
	if(myServer == nil)then
		myServer = GetRealmName();
	end
	if(server == nil and name == myName)then
		return true;
	elseif(server ~= nil and name == myName and server == myServer)then
		return true;
	else
		return false;
	end
end

function AG_CheckOverride()
	local myName = UnitName("player")
	for index=1, GetNumGuildMembers() do

		 local name,_,_,_,_,_,note = GetGuildRosterInfo(index)
		 if AG_IsMe(name) then
			 note = note:lower()
			 if note:match("noag") then
				AG_GuildDisabledOverride = true;
				return true;
			 else
				AG_GuildDisabledOverride = false;
				return false;
			 end
			 break
		 end
	end
	return false;
end

function AG_Print(msg)
	print("\124cffffFF00[AG]\124r",msg);
end

function split(str, pat)
   local t = {}  -- NOTE: use {n = 0} in Lua-5.0
   local fpat = "(.-)" .. pat
   local last_end = 1
   local s, e, cap = str:find(fpat, 1)
   while s do
      if s ~= 1 or cap ~= "" then
	 table.insert(t,cap)
      end
      last_end = e+1
      s, e, cap = str:find(fpat, last_end)
   end
   if last_end <= #str then
      cap = str:sub(last_end)
      table.insert(t, cap)
   end
   return unpack(t)
end