diff --git a/Yapper.lua b/Yapper.lua index 7815caa..24262a4 100644 --- a/Yapper.lua +++ b/Yapper.lua @@ -1,13 +1,26 @@ -local addonname, data = ... +local addonname, shared = ... ---@cast addonname string -local channelNameLengthLowerBound = 5 -local channelNameLengthUpperBound = 33 -local messageLengthLowerBound = 12 -local messageLengthUpperBound = 47 -local lowerBound = 53 -local upperBound = 77 -local asciiStart = 97 -local asciiEnd = 122 + +local function GetOrDefault(table, keys, default) + local value = default + if not table then return value end + if not keys then return value end + + local traverse = table + for i = 1, #keys do + local key = keys[i] + if traverse[key] ~= nil then + traverse = traverse[key] + else + break + end + + if i == #keys then + value = traverse + end + end + return value +end local function GetChannelId(channelName) local channels = { GetChannelList() } @@ -20,36 +33,48 @@ local function GetChannelId(channelName) end end -local function GenerateString(length) - print(string.format("Generating string of length %d", length)) - local string = "" - for i = 1, length do - string = string .. string.char(math.random(asciiStart, asciiEnd)) - end - return string -end -local channelName = GenerateString(math.random(channelNameLengthLowerBound, channelNameLengthUpperBound)) +---@class YapperConfig +---@field message string +---@field interval number +---@field channel string +---@field channelData any +---@field enabled boolean +if not YapperConfig then YapperConfig = {} end + +---@cast shared { config: YapperConfig} + +shared.config = { + message = GetOrDefault(YapperConfig, { "message" }, ""), + interval = GetOrDefault(YapperConfig, { "interval" }, 1), + channel = GetOrDefault(YapperConfig, { "channel" }, "SAY"), + channelData = GetOrDefault(YapperConfig, { "channelData" }, nil), + enabled = GetOrDefault(YapperConfig, { "enabled" }, false), +} +local timer = nil local function Yap() - local message = GenerateString(math.random(messageLengthLowerBound, messageLengthUpperBound)) - print(string.format("Yapping %s", tostring(message))) - - local channelId = GetChannelId(channelName) - if channelId ~= nil then - SendChatMessage(message, "CHANNEL", nil, channelId) - else - print(string.format("Channel %s not found, trying to join again...", channelName)) - JoinTemporaryChannel(channelName) + if not shared.config.enabled then return end + if not shared.config.message then + print(string.format("Yapper found no message to yap (%s)", tostring(shared.config.message))) + return + end + if not shared.config.channel then + print(string.format("Yapper found no channel to yap in (%s)", tostring(shared.config.channel))) + return end - local delay = math.random(lowerBound, upperBound) - print(string.format("Yapper yapping in %d seconds", delay)) - C_Timer.After(delay, Yap) + SendChatMessage(shared.config.message, shared.config.channel, nil, shared.config.channelData) + + if not shared.config.interval or shared.config.interval <= 0 then + print("Yapper has no interval set, quitting (%s)", tostring(shared.config.interval)) + return + end + timer = C_Timer.NewTimer(shared.config.interval, Yap) end local function init() - JoinTemporaryChannel(channelName) - print(string.format("Yapper joined %s", tostring(channelName))) + if not shared.config.enabled then return end + if timer and not timer:IsCancelled() then timer:Cancel() end Yap() end @@ -64,4 +89,47 @@ end) local logoutFrame = CreateFrame("Frame") logoutFrame:RegisterEvent("PLAYER_LOGOUT") logoutFrame:SetScript("OnEvent", function(self, event) + shared.config.enabled = false end) + +SlashCmdList["YAPPER_MAIN_CMD"] = function(input) + if input == "" or input == nil then + shared.config.enabled = not shared.config.enabled + print(string.format("Yapper is now %s", shared.config.enabled and "enabled" or "disabled")) + init() + return + end + + if tonumber(input) then + shared.config.interval = tonumber(input) + print(string.format("Yapper interval set to %d", shared.config.interval)) + init() + return + end + + shared.config.message = input + print(string.format("Yapper message set to %s", shared.config.message)) + init() +end +SLASH_YAPPER_MAIN_CMD1 = "/yap" + +SlashCmdList["YAPPER_CHANNEL_CMD"] = function(input) + if input == "" or input == nil then + shared.config.channel = nil + shared.config.channelData = nil + print("Yapper channel set to nil") + return + end + + local data = { strsplit(" ", input) } + if #data == 1 then + shared.config.channel = data[1] + shared.config.channelData = nil + print(string.format("Yapper channel set to %s", shared.config.channel)) + return + end + shared.config.channel = data[1] + shared.config.channelData = data[2] + print(string.format("Yapper channel set to %s with data %s", shared.config.channel, shared.config.channelData)) +end +SLASH_YAPPER_CHANNEL_CMD1 = "/yapc" diff --git a/Yapper.toc b/Yapper.toc index 0a02b5f..bbc5f27 100644 --- a/Yapper.toc +++ b/Yapper.toc @@ -2,6 +2,7 @@ ## Title: Yapper ## Notes: Yaps in a random channel saying random shit ## Author: Cyka +## SavedVariables: YapperConfig #core Yapper.lua \ No newline at end of file