c5fd218415
Fix luacheck warnings in spam.lua Fix global variable initialization (was needed only locally) Add beerchat to luacheck
40 lines
1.1 KiB
Lua
40 lines
1.1 KiB
Lua
local function caps_ratio(str)
|
|
local total_caps = 0
|
|
for i = 1, #str do -- iteration through each character
|
|
local c = str:sub(i,i)
|
|
if string.lower(c) ~= c then -- do not count digits as spam
|
|
total_caps = total_caps + 1
|
|
end
|
|
end
|
|
return total_caps/(#str or 1) -- avoid division by zero
|
|
end
|
|
|
|
local function words_ratio(str, ratio)
|
|
local words = {}
|
|
local split_str = str:split(" ")
|
|
for _, w in ipairs(split_str) do
|
|
if not words[w] then
|
|
words[w] = 0
|
|
else
|
|
words[w] = (words[w] or 0) + 1
|
|
end
|
|
end
|
|
for _, n in pairs(words) do
|
|
if n/#split_str >= ratio then
|
|
return true
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
function mail.check_spam(message)
|
|
local spam_checks = {}
|
|
if caps_ratio(message.subject) == 1 or caps_ratio(message.body) > 0.4 then
|
|
table.insert(spam_checks, "caps")
|
|
end
|
|
if words_ratio(message.subject, 0.6) or words_ratio(message.body, 0.2) then
|
|
table.insert(spam_checks, "words")
|
|
end
|
|
return spam_checks
|
|
end
|