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
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"

View File

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