From 4dfd68b597aa2a91c370aa86056e6ef6b371a406 Mon Sep 17 00:00:00 2001 From: jmaa Date: Fri, 8 Jun 2018 12:52:21 +0200 Subject: [PATCH] Added config file --- .gitignore | 3 +++ config.example.lua | 27 +++++++++++++++++++++ main.lua | 59 +++++++++++++++++++++++++++++++++------------- 3 files changed, 73 insertions(+), 16 deletions(-) create mode 100644 config.example.lua diff --git a/.gitignore b/.gitignore index 24b8190..304973d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,7 @@ +# "Secure" files +config.lua + # Output files /images/output diff --git a/config.example.lua b/config.example.lua new file mode 100644 index 0000000..b0e74ac --- /dev/null +++ b/config.example.lua @@ -0,0 +1,27 @@ + +return { + -- IRC connection + IRC_SERVER = 'some-domain.com', + IRC_PORT = 6697, + IRC_SECURE = true, -- If using SSL + IRC_CHANNELS = { '#bot-test' }, + + -- Image generation + IMGGEN_PATH_BRAINS = './images/brains/', + IMGGEN_PATH_OUTPUT = './images/output/', + IMGGEN_PATH_FONTS = { + '/usr/share/fonts/TTF', + '/usr/share/fonts/truetype/dejavu', + '/usr/local/share/fonts/TTF', + }, + + -- Image storage and presentation + STORAGE_SERVER = 'image-host.com', + STORAGE_SERVER_PATH = '~someuser/images/', + STORAGE_DIR_URL = 'https://image-host.com/myimages/', + + -- Lua stuff + LUA_EXTRA_PATH = nil, -- Set a string here if you are using libraries located + LUA_EXTRA_CPATH = nil, -- weird location. +} + diff --git a/main.lua b/main.lua index 08bf810..6a580b2 100644 --- a/main.lua +++ b/main.lua @@ -3,17 +3,19 @@ math.randomseed(os.time()) -local BRAIN_PATH = './images/brains/' -local OUTPUT_PATH = './images/output/' -local MEME_OUTPUT = OUTPUT_PATH..'meme.png' -local SERVER_DIR = '/var/shots/b/' -local IMAGE_URL_DIR = 'https://dcav.pw/b' +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 -------------------------------------------------------------------------------- -- Meme utils local imlib = require 'imlib2' - imlib.font.add_path '/usr/share/fonts/TTF' + +for _, path in ipairs(CONFIG.IMGGEN_PATH_FONTS) do + imlib.font.add_path(path) +end local function flatten_onto(target_img, other_img, x0, y0) assert(x0 + other_img:get_width() <= target_img:get_width()) @@ -144,12 +146,13 @@ local SCANDI_SYMBOLS = { 'æ', 'Æ', 'ø', 'Ø', 'å', 'Å' } local function should_look_for_images (topic) + assert(type(topic) == 'string') if math.random() < CHANCE_OF_GUARENTEED_IMAGE_SEARCH then return true end -- if #topic < 2 then return false end -- for _, symbol in ipairs(SCANDI_SYMBOLS) do - if topic:match(SCANDI_SYMBOLS) then return false end + if topic:match(symbol) then return false end end -- return math.random() < IMAGE_CHANCE @@ -182,7 +185,7 @@ local function paste_topic_onto_image (target, topic, x, y, w, h, bg_color, font assert(type(font_name) == 'string') -- Download and paste found image if topic.type == 'image' then - local url, filename = topic.url, OUTPUT_PATH..'topic_'..topic.topic..'.png' + local url, filename = topic.url, CONFIG.IMGGEN_PATH_OUTPUT..'topic_'..topic.topic..'.png' download_file(url, filename) local found_img = imlib.image.load(filename) found_img:crop_and_scale(0, 0, found_img:get_width(), found_img:get_height(), w, h) @@ -197,15 +200,22 @@ local function paste_topic_onto_image (target, topic, x, y, w, h, bg_color, font end end +local function copy_remotely (origin_server, origin_path, target_server, target_path) + local origin = origin_server and origin_server ~= 'localhost' and origin_server..':'..origin_path or origin_path + local target = target_server and target_server ~= 'localhost' and target_server..':'..target_path or target_path + os.execute('scp '..origin..' '..target..' > /dev/null') +end + local function save_to_cloud (img) assert(img) -- + local MEME_OUTPUT = CONFIG.IMGGEN_PATH_OUTPUT..'meme.png' img:save (MEME_OUTPUT) img:free() -- Upload to dcav local img_name = 'otmemes_'..os.time() - os.execute('scp '..MEME_OUTPUT..' guava:'..SERVER_DIR..img_name..'.png > /dev/null') - return IMAGE_URL_DIR..img_name + copy_remotely('localhost', MEME_OUTPUT, CONFIG.STORAGE_SERVER, CONFIG.STORAGE_SERVER_PATH..img_name..'.png') + return CONFIG.STORAGE_DIR_URL..img_name end local function generate_distracted_boyfriend (topics) @@ -237,7 +247,7 @@ local function generate_brain_explosion_image (topics) for i, topic_info in ipairs(topics) do paste_topic_onto_image(base_img, topic_info, 0, (i-1) * ROW_HEIGHT, ROW_WIDTH, ROW_HEIGHT, COLOR_WHITE, font_name) - local brain_img = imlib.image.load(BRAIN_PATH..'brain_'..i..'.png') + local brain_img = imlib.image.load(CONFIG.IMGGEN_PATH_BRAINS..'brain_'..i..'.png') brain_img:crop_and_scale(0, 0, brain_img:get_width(), brain_img:get_height(), ROW_WIDTH, ROW_HEIGHT) flatten_onto (base_img, brain_img, ROW_WIDTH, (i-1) * ROW_HEIGHT) brain_img:free() @@ -345,13 +355,15 @@ local ERROR_MSG = { 'Jeg har ingen hjerne og må tænke.', 'Hvad siger du?', 'Ser jeg ud til at have otte arme? Nej, for jeg har ikke nogle arme!', + 'Do androids dream of electric sheep?', } bot:hook('OnJoin', function(user, channel) if user.nick == BOT_NICK then -- On self join + io.write(string.format(' !! Joined %s\n', channel)) if #imlib.font.list_fonts() == 0 then - common_error(channel, 'Hjælp! Min computer har ingen fonts! Hvorfor er fonts så svære på arch?') + common_error(channel, 'Hjælp! Min computer har ingen fonts! Hvorfor er fonts så svære på linux? Jeg har kigget i: "'..table.concat(imlib.font.list_paths(), '", "')..'"') end else -- On other join @@ -452,17 +464,32 @@ end) -------------------------------------------------------------------------------- -- Main run +local function init_memebot () bot:connect { - host = 'irc.guava.space', - port = 6697, - secure = true, + host = CONFIG.IRC_SERVER, + port = CONFIG.IRC_PORT, + secure = CONFIG.IRC_SECURE, } -bot:join '#bot-test' io.write ('Memebot has started up as "'..BOT_NICK..'"\n') +assert(CONFIG.IRC_CHANNELS == nil or type(CONFIG.IRC_CHANNELS) == 'table') +for _, channel in ipairs(CONFIG.IRC_CHANNELS or {}) do + bot:join(channel) +end + + while true do bot:think() sleep(0.5) end +end + +-------------------------------------------------------------------------------- + +if ... then + error 'Cannot be loaded like library' +else + init_memebot() +end