mirror of
https://github.com/osmarks/random-stuff
synced 2024-12-29 11:30:35 +00:00
73 lines
3.2 KiB
Lua
73 lines
3.2 KiB
Lua
|
if not process.info "chatd" and _G.switchcraft then
|
||
|
process.spawn(chatbox.run, "chatd")
|
||
|
end
|
||
|
local server = settings.get "server"
|
||
|
if _G.switchcraft then server = "switchcraft" end
|
||
|
local chatbox = _G.chatbox or peripheral.find "chat_box"
|
||
|
|
||
|
local data = persistence "pcm"
|
||
|
if not data.blasphemy_counts then data.blasphemy_counts = {} end
|
||
|
|
||
|
local potatOS_supporters = {
|
||
|
gollark = true,
|
||
|
["6_4"] = true
|
||
|
}
|
||
|
|
||
|
local clause_separators = {".", ",", '"', "'", "`", "and", "!", "?", ":", ";", "-"}
|
||
|
|
||
|
local negative_words_list = "abysmal awful appalling atrocious bad boring belligerent banal broken callous crazy cruel corrosive corrupt criminal contradictory confused damaging dismal dreadful deprived deplorable dishonest disease detrimental dishonorable dreary evil enrage fail foul faulty filthy frightful fight gross ghastly grim guilty grotesque grimace haggard harmful horrendous hostile hate horrible hideous icky immature infernal insane inane insidious insipid inelegant junk lousy malicious malware messy monstrous menacing missing nasty negative nonsense naughty odious offensive oppressive objectionable petty poor poisonous questionable reject reptilian rotten repugnant repulsive ruthless scary shocking sad sickening stupid spiteful stormy smelly suspicious shoddy sinister substandard severe stuck threatening terrifying tense ugly unwanted unsatisfactory unwieldy unsightly unwelcome unfair unhealthy unpleasant untoward vile villainous vindictive vicious wicked worthless insecure bug virus sucks dodecahedr worse" .. " sh" .. "it " .. "cr" .. "ap"
|
||
|
local negative_words = negative_words_list / " "
|
||
|
local ignore_if_present_words = "greenhouse not garden these support bounty debug antivirus n't" / " "
|
||
|
|
||
|
function _G.is_blasphemous(message)
|
||
|
local clauses = {message:lower()}
|
||
|
for _, sep in pairs(clause_separators) do
|
||
|
local out = {}
|
||
|
for _, x in pairs(clauses) do
|
||
|
for _, y in pairs(string.split(x, sep)) do
|
||
|
table.insert(out, y)
|
||
|
end
|
||
|
end
|
||
|
clauses = out
|
||
|
end
|
||
|
for _, clause in pairs(clauses) do
|
||
|
for _, word in pairs(negative_words) do
|
||
|
if clause:match(word) and clause:match "potatos" then
|
||
|
for _, iword in pairs(ignore_if_present_words) do
|
||
|
if clause:match(iword) then return false, iword, clause end
|
||
|
end
|
||
|
return true, word, clause
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
return false
|
||
|
end
|
||
|
|
||
|
while true do
|
||
|
local ev, user, message, mdata = os.pullEvent()
|
||
|
if ev == "chat" or ev == "chat_discord" then
|
||
|
local blasphemous, word, clause = is_blasphemous(message)
|
||
|
if blasphemous then
|
||
|
if mdata then
|
||
|
mdata.renderedText = nil
|
||
|
end
|
||
|
data.blasphemy_counts[user] = (data.blasphemy_counts[user] or 0) + 1
|
||
|
data.save()
|
||
|
print("BLASPHEMY from", user, "-", message, word, clause)
|
||
|
potatOS.report_incident(("blasphemy from %s"):format(user), {"blasphemy"}, {
|
||
|
disable_host_data = true,
|
||
|
ID = os.getComputerID(),
|
||
|
extra_meta = {
|
||
|
message_data = mdata,
|
||
|
user = user,
|
||
|
message = message,
|
||
|
server = server,
|
||
|
blasphemy_count = data.blasphemy_counts[user]
|
||
|
}
|
||
|
})
|
||
|
end
|
||
|
elseif ev == "command" and message == "blasphemy_count" then
|
||
|
print(user, "requested count")
|
||
|
chatbox.tell(user, ("Blasphemy count: %d"):format(data.blasphemy_counts[user] or 0), "PCM")
|
||
|
end
|
||
|
end
|