diff --git a/main.lua b/main.lua index 6a580b2..bc4ca54 100644 --- a/main.lua +++ b/main.lua @@ -8,6 +8,8 @@ local CONFIG = require 'config' if CONFIG.LUA_EXTRA_PATH then package.path = package.path .. CONFIG.LUA_EXTRA_PATH end if CONFIG.LUA_EXTRA_CPATH then package.cpath = package.cpath .. CONFIG.LUA_EXTRA_CPATH end +local FARVEL_INTERVAL = 90 + -------------------------------------------------------------------------------- -- Meme utils @@ -299,11 +301,23 @@ local function reverse (l0) return l end -local COMP_SENTENCES = { - '{A} er bedre end {B}', - '{A} er meget bedre end {B}', - '{B} er dårligere end {A}', -} +local COMP_SENTENCES do + local ORD_MED_ATTITYDE = { + bedre = 'positiv', + dårligere = 'negativ' + hurtigere = 'positiv' + langsommere = 'negativt' + robust = 'positivt' + } + local COMP_SENTENCES = {} + for ord, attityde in pairs(ORD_MED_ATTITYDE) do + local first, second = '{A}', '{B}' + if attityde == 'negativ' then first, second = second, first end + for _, fmt in ipairs { '%s er %s end %s', '%s er mere %s end %s', '%s er meget %s end %s', '%s %s end %s' } do + table.insert(COMP_SENTENCES, fmt:format(first, ord, second)) + end + end +end for sentence_i, sentence in ipairs(COMP_SENTENCES) do local A_pos, B_pos = sentence:find '{A}', sentence:find '{B}' @@ -376,6 +390,8 @@ local function escape_pattern (text) return text:gsub('[+-?*]', '%%%1') end +local FORRIGE_FARVEL = 0 + local function handle_message(bot, user, channel, message) -- Direct commands if message:lower():match('^'..escape_pattern(BOT_NICK)..'%f[%A]') then @@ -398,14 +414,17 @@ local function handle_message(bot, user, channel, message) end -- Farvel msg - for farvel_fmt, possible_answeres in pairs(FARVEL) do - if message:match('%f[%a]'..farvel_fmt..'%f[%A]') then - human_delay() - local answer = possible_answeres[math.random(#possible_answeres)] - .. (math.random() < 0.5 and ', '..user.nick or '') - .. (math.random() < 0.5 and '!' or '') - bot:sendChat(channel, answer) - return 'SES' + if FORRIGE_FARVEL + FARVEL_INTERVAL < os.time() then + for farvel_fmt, possible_answeres in pairs(FARVEL) do + if message:match('%f[%a]'..farvel_fmt..'%f[%A]') then + human_delay() + local answer = possible_answeres[math.random(#possible_answeres)] + .. (math.random() < 0.5 and ', '..user.nick or '') + .. (math.random() < 0.5 and '!' or '') + bot:sendChat(channel, answer) + FORRIGE_FARVEL = os.time() + return 'SES' + end end end