Added config file
This commit is contained in:
parent
b176092c67
commit
4dfd68b597
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -1,4 +1,7 @@
|
|||
|
||||
# "Secure" files
|
||||
config.lua
|
||||
|
||||
# Output files
|
||||
/images/output
|
||||
|
||||
|
|
27
config.example.lua
Normal file
27
config.example.lua
Normal file
|
@ -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.
|
||||
}
|
||||
|
59
main.lua
59
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
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user