Rework yapper to yap a custom message in custom channel

This commit is contained in:
2024-12-17 15:09:15 +01:00
parent 86ba4babb5
commit 5459ed74a0
2 changed files with 101 additions and 32 deletions

View File

@@ -1,13 +1,26 @@
local addonname, data = ... local addonname, shared = ...
---@cast addonname string ---@cast addonname string
local channelNameLengthLowerBound = 5
local channelNameLengthUpperBound = 33 local function GetOrDefault(table, keys, default)
local messageLengthLowerBound = 12 local value = default
local messageLengthUpperBound = 47 if not table then return value end
local lowerBound = 53 if not keys then return value end
local upperBound = 77
local asciiStart = 97 local traverse = table
local asciiEnd = 122 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 function GetChannelId(channelName)
local channels = { GetChannelList() } local channels = { GetChannelList() }
@@ -20,36 +33,48 @@ local function GetChannelId(channelName)
end end
end end
local function GenerateString(length) ---@class YapperConfig
print(string.format("Generating string of length %d", length)) ---@field message string
local string = "" ---@field interval number
for i = 1, length do ---@field channel string
string = string .. string.char(math.random(asciiStart, asciiEnd)) ---@field channelData any
end ---@field enabled boolean
return string if not YapperConfig then YapperConfig = {} end
end
local channelName = GenerateString(math.random(channelNameLengthLowerBound, channelNameLengthUpperBound)) ---@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 function Yap()
local message = GenerateString(math.random(messageLengthLowerBound, messageLengthUpperBound)) if not shared.config.enabled then return end
print(string.format("Yapping %s", tostring(message))) if not shared.config.message then
print(string.format("Yapper found no message to yap (%s)", tostring(shared.config.message)))
local channelId = GetChannelId(channelName) return
if channelId ~= nil then end
SendChatMessage(message, "CHANNEL", nil, channelId) if not shared.config.channel then
else print(string.format("Yapper found no channel to yap in (%s)", tostring(shared.config.channel)))
print(string.format("Channel %s not found, trying to join again...", channelName)) return
JoinTemporaryChannel(channelName)
end end
local delay = math.random(lowerBound, upperBound) SendChatMessage(shared.config.message, shared.config.channel, nil, shared.config.channelData)
print(string.format("Yapper yapping in %d seconds", delay))
C_Timer.After(delay, Yap) 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 end
local function init() local function init()
JoinTemporaryChannel(channelName) if not shared.config.enabled then return end
print(string.format("Yapper joined %s", tostring(channelName))) if timer and not timer:IsCancelled() then timer:Cancel() end
Yap() Yap()
end end
@@ -64,4 +89,47 @@ end)
local logoutFrame = CreateFrame("Frame") local logoutFrame = CreateFrame("Frame")
logoutFrame:RegisterEvent("PLAYER_LOGOUT") logoutFrame:RegisterEvent("PLAYER_LOGOUT")
logoutFrame:SetScript("OnEvent", function(self, event) logoutFrame:SetScript("OnEvent", function(self, event)
shared.config.enabled = false
end) 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"

View File

@@ -2,6 +2,7 @@
## Title: Yapper ## Title: Yapper
## Notes: Yaps in a random channel saying random shit ## Notes: Yaps in a random channel saying random shit
## Author: Cyka ## Author: Cyka
## SavedVariables: YapperConfig
#core #core
Yapper.lua Yapper.lua