Rework yapper to yap a custom message in custom channel
This commit is contained in:
132
Yapper.lua
132
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"
|
||||
|
@@ -2,6 +2,7 @@
|
||||
## Title: Yapper
|
||||
## Notes: Yaps in a random channel saying random shit
|
||||
## Author: Cyka
|
||||
## SavedVariables: YapperConfig
|
||||
|
||||
#core
|
||||
Yapper.lua
|
Reference in New Issue
Block a user