From: Elias Fleckenstein Date: Wed, 10 Mar 2021 11:42:57 +0000 (+0100) Subject: Refactoring, added 8ball command X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=b62f4f255326159d3592ae1f3784dd4faff1e397;p=furrybot.git Refactoring, added 8ball command --- diff --git a/bot.lua b/bot.lua index de71d4a..f01fa79 100644 --- a/bot.lua +++ b/bot.lua @@ -1,21 +1,36 @@ furrybot.commands = {} +furrybot.requests = {} local C = minetest.get_color_escape_sequence +furrybot.colors = { + ping = C("#00DCFF"), + system = C("#FFFA00"), + error = C("#D70029"), + detail = C("#FF6683"), + rpg = C("#FFD94E"), + braces = C("#FFFAC0"), + info = C("#00FFC3"), + fun = C("#A0FF24"), + random = C("#A300BE"), +} + +-- helper functions + function furrybot.send(msg, color) - minetest.send_chat_message("/me " .. C("#00FF3C") .. "[" .. C(color or "#FFFA00") .. msg .. C("#00FF3C") .. "]") + minetest.send_chat_message("/me " .. furrybot.colors.braces .. "[" .. color .. msg .. furrybot.colors.braces .. "]") end -function furrybot.ping(player) - return C("#00DCFF") .. "@" .. player .. C("#FFFA00") +function furrybot.ping(player, color) + return furrybot.colors.ping .. "@" .. player .. color end -function furrybot.ping_player(player, message) - furrybot.send(furrybot.ping(player) .. ": " .. message) +function furrybot.ping_message(player, message, color) + furrybot.send(furrybot.ping(player, color) .. ": " .. message, "") end -function furrybot.ping_player_error(player, err, detail) - furrybot.ping_player(player, C("#D70029") .. " " .. err .. (detail and C("#FF6683") .. " '" .. detail .. "'" .. C("#D70029") or "") .. ".") +function furrybot.error_message(player, error, detail) + furrybot.ping_message(player, error .. (detail and furrybot.colors.detail .. " '" .. detail .. "'" .. furrybot.colors.error or "") .. ".", furrybot.colors.error) end function furrybot.recieve(msg) @@ -31,7 +46,7 @@ function furrybot.recieve(msg) if func then func(player, unpack(args)) else - furrybot.ping_player_error(player, "Invalid command", cmd) + furrybot.error_message(player, "Invalid command", cmd) end end end @@ -45,20 +60,24 @@ function furrybot.player_online(name) end end -function furrybot.check_online(name, target) - if not target then - furrybot.ping_player_error(name, "You need to specify a player") - elseif name == target then - furrybot.ping_player_error(name, "You need to specify a different player than yourself") - elseif furrybot.player_online(target) then +function furrybot.online_or_error(name, other, allow_self) + if not other then + furrybot.error_message(name, "You need to specify a player") + elseif name == other and not allow_self then + furrybot.error_message(name, "You need to specify a different player than yourself") + elseif furrybot.player_online(other) then return true else - furrybot.ping_player_error(name, "Player not online", target) + furrybot.error_message(name, "Player not online", other) end end -function furrybot.choose(list) - return list[math.random(#list)] +function furrybot.choose(list, color) + return furrybot.colors.random .. list[math.random(#list)] .. color +end + +function furrybot.random(min, max, color) + return furrybot.colors.random .. math.random(#list) .. color end function furrybot.http_request(url, name, callback) @@ -78,7 +97,7 @@ function furrybot.json_http_request(url, name, callback) end) end -function furrybot.rand(str, seed, ...) +function furrybot.strrandom(str, seed, ...) local v = 0 local pr = PseudoRandom(seed) for i = 1, #str do @@ -87,74 +106,119 @@ function furrybot.rand(str, seed, ...) return PseudoRandom(v):next(...) end --- commands - -function furrybot.commands.hug(name, target) - if furrybot.check_online(name, target) then - furrybot.send(name .. " hugs " .. target .. ".") +function furrybot.repeat_string(str, times) + local msg = "" + for i = 1, times do + msg = msg .. str end + return msg end -furrybot.commands.cuddle = furrybot.commands.hug +function furrybot.simple_rpg_command(action) + return function(name, target) + if furrybot.online_or_error(name, target) then + furrybot.send(name .. " " .. action .. " " .. target .. ".", furrybot.colors.rpg) + end + end +end -function furrybot.commands.kiss(name, target) - if furrybot.check_online(name, target) then - furrybot.send(name .. " kisses " .. target .. ".") +function furrybot.request_command(on_request, on_accept) + return function(name, target) + if furrybot.online_or_error(name, target) then + furrybot.requests[target] = { + origin = name, + func = on_accept, + } + on_request(name, target) + end end end -furrybot.target_list = {} +-- Commands -function furrybot.commands.bang(name, target) - if furrybot.check_online(name, target) then - furrybot.target_list[target] = function() - furrybot.send(ping(name) .. " and " .. ping(target) .. " are having sex! OwO") - end, - furrybot.ping_player(target, name .. " wants to have sex with you. Type !accept to accept or !deny to deny.") +-- system +function furrybot.commands.help() + local keys = {} + for k in pairs(furrybot.commands) do + table.insert(keys, k) end + furrybot.send("Available commands: " .. table.concat(keys, ", "), furrybot.colors.system) end -furrybot.commands.sex = furrybot.commands.bang -furrybot.commands.fuck = furrybot.commands.bang - function furrybot.commands.accept(name) - local func = furrybot.target_list[name] - if func then - func() + local tbl = furrybot.requests[name] + if tbl then + furrybot.requests[name] = nil + tbl.func(tbl.origin, name) else - furrybot.ping_player_error(name, "Nothing to accept") + furrybot.error_message(name, "Nothing to accept") end end function furrybot.commands.deny(name) - if furrybot.target_list[name] then - furrybot.target_list[name] = nil - furrybot.ping_player(name, "Denied request") + local tbl = furrybot.requests[name] + if tbl then + furrybot.requests[name] = nil + furrybot.ping_message(name, "Denied request") else - furrybot.ping_player_error(name, "Nothing to deny") + furrybot.error_message(name, "Nothing to deny") end end -function furrybot.commands.hit(name, target) - if furrybot.check_online(name, target) then - furrybot.send(name .. " hits " .. target) - end +-- don't bug players that are running ClamityBot commands from discord +function furrybot.commands.status() end -furrybot.commands.slap = furrybot.commands.hit -furrybot.commands.beat = furrybot.commands.hit +function furrybot.commands.cmd() +end -function furrybot.commands.help() - local keys = {} - for k in pairs(furrybot.commands) do - table.insert(keys, k) +-- rpg +furrybot.commands.hug = furrybot.simple_rpg_command("hugs") +furrybot.commands.cuddle = furrybot.simple_rpg_command("cuddles") +furrybot.commands.kiss = furrybot.simple_rpg_command("kisses") +furrybot.commands.hit = furrybot.simple_rpg_command("hits") +furrybot.commands.slap = furrybot.simple_rpg_command("slap") +furrybot.commands.beat = furrybot.simple_rpg_command("beat") + +furrybot.commands.sex = furrybot.request_command(function(name, target) + furrybot.ping_message(target, name .. " wants to have sex with you. Type !accept to accept or !deny to deny.", furrybot.colors.system) +end, function(name, target) + furrybot.send(name .. " and " .. target .. " are having sex! OwO", furrybot.colors.rpg) +end) +furrybot.commands.bang = furrybot.commands.sex +furrybot.commands.fuck = furrybot.commands.sex + +-- misc +function furrybot.commands.rolldice(name) + furrybot.ping_message(name, "rolled a dice and got a " .. furrybot.random(1, 6, furrybot.colors.system) .. ".", furrybot.colors.system) +end + +function furrybot.commands.coinflip(name) + furrybot.ping_message(name, "flipped a coin and got " .. furrybot.choose({"Heads", "Tails"}, furrybot.colors.system) .. ".", furrybot.colors.system) +end + +function furrybot.commands.choose(name, ...) + local options = {...} + if #options > 1 then + furrybot.ping_message(name, "I choose " .. furrybot.choose(options, "", furrybot.colors.system) .. ".", furrybot.colors.system) + else + furrybot.error_message(name, "Not enough options") end - furrybot.send("Available commands: " .. table.concat(keys, ", ")) end +furrybot.commands["8ball"] = furrybot.commands.choose + +function furrybot.commands.dicksize(name, target) + target = target or name + local size = furrybot.strrandom(target, 31242, 2, 10) + local dick = furrybot.repeat_string("=", size) .. "D" + furrybot.send(dick .. furrybot.colors.system .. " <= " .. furrybot.ping(target, furrybot.colors.system) .. "'s Dick", C("#FF4DE1")) +end +furrybot.commands.cocksize = furrybot.commands.dicksize +-- fun function furrybot.commands.verse(name) furrybot.json_http_request("https://labs.bible.org/api/?type=json&passage=random", name, function(data) - furrybot.send(data.text .. C("#00FFC3") .. "[" .. data.bookname .. " " .. data.chapter .. "," .. data.verse .. "]") + furrybot.send(data.text .. furrybot.colors.info .. "[" .. data.bookname .. " " .. data.chapter .. "," .. data.verse .. "]", furrybot.colors.fun) end) end @@ -165,64 +229,40 @@ function furrybot.commands.define(name, word) local selected = meaning.exclamation or meaning.noun or meaning.verb or meaning.adjective or meaning["transitive verb"] or meaning.adverb or meaning["relative adverb"] if not selected then print(dump(meaning)) - furrybot.ping_player_error(name, "Error in parsing response") + furrybot.error_message(name, "Error in parsing response") else - furrybot.send(C("#00FFC3") .. word:sub(1, 1):upper() .. word:sub(2, #word):lower() .. ": " .. C("#FFFA00") .. selected[1].definition) + furrybot.send(word:sub(1, 1):upper() .. word:sub(2, #word):lower() .. ": " .. furrybot.colors.fun .. selected[1].definition, furrybot.colors.info) end end) else - furrybot.ping_player_error(name, "You need to specify a word") + furrybot.error_message(name, "You need to specify a word") end end function furrybot.commands.insult(name, target) - if furrybot.check_online(name, target) then + if furrybot.online_or_error(name, target, true) then furrybot.http_request("https://insult.mattbas.org/api/insult", name, function(data) - furrybot.ping_player(target, data) + furrybot.ping_message(target, data, furrybot.colors.fun) end) end end -function furrybot.commands.rolldice(name) - furrybot.ping_player(name, "rolled a dice and got a " .. C("#AAFF43") .. math.random(6)) -end - -function furrybot.commands.coinflip(name) - furrybot.ping_player(name, "flipped a coin and got " .. C("#AAFF43") .. furrybot.choose({"Heads", "Tails"})) -end - -function furrybot.commands.status() -end - -function furrybot.commands.cmd() -end - -function furrybot.commands.cocksize(name, target) - target = target or name - local msg = C("#FF4DE1") - local size = furrybot.rand(target, 31242, 2, 10) - for i = 1, size do - msg = msg .. "=" - end - msg = msg .. "D" - furrybot.send(msg .. C("#FFFA00") .. " <= " .. furrybot.ping(target) .. "'s Cock") -end - -furrybot.commands.dicksize = furrybot.commands.cocksize - function furrybot.commands.joke(name, first, last) if not first then first = "Chuck" last = "Norris" + elseif not last then + last = "" end - furrybot.json_http_request("http://api.icndb.com/jokes/random?firstName=" .. first .. "&lastName=" .. (last or ""), name, function(data) + furrybot.json_http_request("http://api.icndb.com/jokes/random?firstName=" .. first .. "&lastName=" .. last, name, function(data) local joke = data.value.joke:gsub(""", "\""):gsub(" ", " ") - furrybot.send(joke) + furrybot.send(joke, furrybot.colors.fun) end) end +-- send reload message if furrybot.loaded then - furrybot.send("Reloaded") + furrybot.send("Reloaded", furrybot.colors.system) else furrybot.loaded = true end diff --git a/init.lua b/init.lua index aefc9fd..484350b 100644 --- a/init.lua +++ b/init.lua @@ -9,13 +9,9 @@ minetest.register_on_receiving_chat_message(function(msg) furrybot.recieve(msg) end) -minetest.register_chatcommand("furrybot-reload", { +minetest.register_chatcommand("fbreload", { func = function() - furrybot.reload() + local func = env.loadfile("clientmods/furrybot/bot.lua") + func() end }) - -function furrybot.reload() - local func = env.loadfile("clientmods/furrybot/bot.lua") - func() -end