2016-04-08 23:12:02 +02:00
|
|
|
local bot = {}
|
2015-07-03 00:15:52 +02:00
|
|
|
|
2016-04-29 06:36:35 +02:00
|
|
|
-- Requires are moved to init to allow for reloads.
|
|
|
|
local bindings -- Load Telegram bindings.
|
|
|
|
local utilities -- Load miscellaneous and cross-plugin functions.
|
2016-06-11 14:46:41 +02:00
|
|
|
local redis = (loadfile "./otouto/redis.lua")()
|
2015-07-03 00:15:52 +02:00
|
|
|
|
2016-07-05 13:14:22 +02:00
|
|
|
bot.version = '2.1'
|
2015-07-03 00:15:52 +02:00
|
|
|
|
2016-05-27 02:26:30 +02:00
|
|
|
function bot:init(config) -- The function run when the bot is started or reloaded.
|
2016-04-08 23:12:02 +02:00
|
|
|
|
2016-06-07 06:31:34 +02:00
|
|
|
bindings = require('otouto.bindings')
|
|
|
|
utilities = require('otouto.utilities')
|
2016-06-11 14:46:41 +02:00
|
|
|
redis = (loadfile "./otouto/redis.lua")()
|
|
|
|
cred_data = load_cred()
|
2016-04-29 06:36:35 +02:00
|
|
|
|
2016-05-29 19:08:39 +02:00
|
|
|
assert(
|
2016-05-27 02:26:30 +02:00
|
|
|
config.bot_api_key and config.bot_api_key ~= '',
|
2016-06-18 12:51:13 +02:00
|
|
|
'You did not set your bot token in the config!'
|
2016-05-29 19:08:39 +02:00
|
|
|
)
|
2016-05-27 02:26:30 +02:00
|
|
|
self.BASE_URL = 'https://api.telegram.org/bot' .. config.bot_api_key .. '/'
|
2015-07-10 09:52:22 +02:00
|
|
|
|
2016-01-12 11:22:28 +01:00
|
|
|
-- Fetch bot information. Try until it succeeds.
|
2016-05-21 02:47:13 +02:00
|
|
|
repeat
|
|
|
|
print('Fetching bot information...')
|
|
|
|
self.info = bindings.getMe(self)
|
|
|
|
until self.info
|
2016-04-08 23:12:02 +02:00
|
|
|
self.info = self.info.result
|
2015-07-03 00:15:52 +02:00
|
|
|
|
2016-03-08 14:15:48 +01:00
|
|
|
-- Load the "database"! ;)
|
2016-04-08 23:12:02 +02:00
|
|
|
if not self.database then
|
|
|
|
self.database = utilities.load_data(self.info.username..'.db')
|
2016-03-08 14:15:48 +01:00
|
|
|
end
|
2016-07-05 13:14:22 +02:00
|
|
|
|
|
|
|
-- MIGRATION CODE 2.0 -> 2.1
|
|
|
|
if self.database.users and self.database.version ~= '2.1' then
|
otouto 3.11
"things occurred"
Added some utilities (id_from_username, id_from_message), removed some utilities (latcyr, others?).
Removed cycle-wasting "shortcuts" -- no more automatic id_str or name; text_lower remains.
Moved userdata (nicknames, lastfm, etc) to a different tree in the database (automatic migration will occur). /me now returns userdata.
Speaking of migration, database now stores the latest version run to make future automigration easy.
Database now saves hourly rather than minutely.
Changed readme and some plugins to reflect above changes.
Removed broken rockspec (Brayden, feel free to re-add once it's working).
Added option to automatically block people (via drua) when blacklisted.
Fixed about.lua trigger problems.
administration 1.11 - Removed /kickme and /broadcast. Users should leave manually, and announcements should be made via channel rather than spam. /setqotd now handles forwarded messages correctly. /kick, /ban, /hammer,
/mod, /admin now support multiple arguments. Added get_targets function. No migration is necessary.
2016-07-05 09:29:11 +02:00
|
|
|
self.database.userdata = {}
|
|
|
|
for id, user in pairs(self.database.users) do
|
|
|
|
self.database.userdata[id] = {}
|
|
|
|
self.database.userdata[id].nickname = user.nickname
|
|
|
|
self.database.userdata[id].lastfm = user.lastfm
|
|
|
|
user.nickname = nil
|
|
|
|
user.lastfm = nil
|
|
|
|
user.id_str = nil
|
|
|
|
user.name = nil
|
|
|
|
end
|
|
|
|
end
|
|
|
|
-- END MIGRATION CODE
|
|
|
|
|
|
|
|
-- Table to cache user info (usernames, IDs, etc).
|
|
|
|
self.database.users = self.database.users or {}
|
|
|
|
-- Table to store userdata (nicknames, lastfm usernames, etc).
|
|
|
|
self.database.userdata = self.database.userdata or {}
|
|
|
|
-- Save the bot's version in the database to make migration simpler.
|
|
|
|
self.database.version = bot.version
|
|
|
|
-- Add updated bot info to the user info cache.
|
2016-06-07 05:13:26 +02:00
|
|
|
self.database.users = self.database.users or {} -- Table to cache userdata.
|
|
|
|
self.database.users[tostring(self.info.id)] = self.info
|
|
|
|
|
2016-04-08 23:12:02 +02:00
|
|
|
self.plugins = {} -- Load plugins.
|
2016-06-18 12:51:13 +02:00
|
|
|
enabled_plugins = load_plugins()
|
|
|
|
for k,v in pairs(enabled_plugins) do
|
2016-06-07 06:31:34 +02:00
|
|
|
local p = require('otouto.plugins.'..v)
|
2016-06-23 21:34:54 +02:00
|
|
|
-- print('loading plugin',v)
|
2016-04-08 23:12:02 +02:00
|
|
|
table.insert(self.plugins, p)
|
2016-06-18 12:51:13 +02:00
|
|
|
self.plugins[k].name = v
|
2016-05-27 02:26:30 +02:00
|
|
|
if p.init then p.init(self, config) end
|
2015-11-25 03:22:04 +01:00
|
|
|
end
|
2016-06-18 16:41:21 +02:00
|
|
|
|
2016-06-18 12:51:13 +02:00
|
|
|
print('Bot started successfully as:\n@' .. self.info.username .. ', AKA ' .. self.info.first_name ..' ('..self.info.id..')')
|
2015-07-03 00:15:52 +02:00
|
|
|
|
2016-04-08 23:12:02 +02:00
|
|
|
self.last_update = self.last_update or 0 -- Set loop variables: Update offset,
|
|
|
|
self.last_cron = self.last_cron or os.date('%M') -- the time of the last cron job,
|
otouto 3.11
"things occurred"
Added some utilities (id_from_username, id_from_message), removed some utilities (latcyr, others?).
Removed cycle-wasting "shortcuts" -- no more automatic id_str or name; text_lower remains.
Moved userdata (nicknames, lastfm, etc) to a different tree in the database (automatic migration will occur). /me now returns userdata.
Speaking of migration, database now stores the latest version run to make future automigration easy.
Database now saves hourly rather than minutely.
Changed readme and some plugins to reflect above changes.
Removed broken rockspec (Brayden, feel free to re-add once it's working).
Added option to automatically block people (via drua) when blacklisted.
Fixed about.lua trigger problems.
administration 1.11 - Removed /kickme and /broadcast. Users should leave manually, and announcements should be made via channel rather than spam. /setqotd now handles forwarded messages correctly. /kick, /ban, /hammer,
/mod, /admin now support multiple arguments. Added get_targets function. No migration is necessary.
2016-07-05 09:29:11 +02:00
|
|
|
self.last_database_save = self.last_database_save or os.date('%H') -- the time of the last database save,
|
2016-04-08 23:12:02 +02:00
|
|
|
self.is_started = true -- and whether or not the bot should be running.
|
2016-03-22 11:16:26 +01:00
|
|
|
|
2015-11-25 03:22:04 +01:00
|
|
|
end
|
2015-07-03 00:15:52 +02:00
|
|
|
|
2016-05-27 02:26:30 +02:00
|
|
|
function bot:on_msg_receive(msg, config) -- The fn run whenever a message is received.
|
2016-06-16 20:56:37 +02:00
|
|
|
-- remove comment to enable debugging
|
2016-07-13 14:33:52 +02:00
|
|
|
-- vardump(msg)
|
2016-05-15 14:22:31 +02:00
|
|
|
-- Cache user info for those involved.
|
2016-07-05 13:14:22 +02:00
|
|
|
|
2015-11-25 03:22:04 +01:00
|
|
|
if msg.date < os.time() - 5 then return end -- Do not process old messages.
|
2015-07-03 00:15:52 +02:00
|
|
|
|
2016-05-15 14:22:31 +02:00
|
|
|
-- Cache user info for those involved.
|
otouto 3.11
"things occurred"
Added some utilities (id_from_username, id_from_message), removed some utilities (latcyr, others?).
Removed cycle-wasting "shortcuts" -- no more automatic id_str or name; text_lower remains.
Moved userdata (nicknames, lastfm, etc) to a different tree in the database (automatic migration will occur). /me now returns userdata.
Speaking of migration, database now stores the latest version run to make future automigration easy.
Database now saves hourly rather than minutely.
Changed readme and some plugins to reflect above changes.
Removed broken rockspec (Brayden, feel free to re-add once it's working).
Added option to automatically block people (via drua) when blacklisted.
Fixed about.lua trigger problems.
administration 1.11 - Removed /kickme and /broadcast. Users should leave manually, and announcements should be made via channel rather than spam. /setqotd now handles forwarded messages correctly. /kick, /ban, /hammer,
/mod, /admin now support multiple arguments. Added get_targets function. No migration is necessary.
2016-07-05 09:29:11 +02:00
|
|
|
self.database.users[tostring(msg.from.id)] = msg.from
|
|
|
|
if msg.reply_to_message then
|
|
|
|
self.database.users[tostring(msg.reply_to_message.from.id)] = msg.reply_to_message.from
|
|
|
|
elseif msg.forward_from then
|
|
|
|
self.database.users[tostring(msg.forward_from.id)] = msg.forward_from
|
|
|
|
elseif msg.new_chat_member then
|
|
|
|
self.database.users[tostring(msg.new_chat_member.id)] = msg.new_chat_member
|
|
|
|
elseif msg.left_chat_member then
|
|
|
|
self.database.users[tostring(msg.left_chat_member.id)] = msg.left_chat_member
|
2016-03-08 14:15:48 +01:00
|
|
|
end
|
|
|
|
|
2016-04-12 15:47:30 +02:00
|
|
|
msg = utilities.enrich_message(msg)
|
2016-04-03 21:18:25 +02:00
|
|
|
|
otouto 3.11
"things occurred"
Added some utilities (id_from_username, id_from_message), removed some utilities (latcyr, others?).
Removed cycle-wasting "shortcuts" -- no more automatic id_str or name; text_lower remains.
Moved userdata (nicknames, lastfm, etc) to a different tree in the database (automatic migration will occur). /me now returns userdata.
Speaking of migration, database now stores the latest version run to make future automigration easy.
Database now saves hourly rather than minutely.
Changed readme and some plugins to reflect above changes.
Removed broken rockspec (Brayden, feel free to re-add once it's working).
Added option to automatically block people (via drua) when blacklisted.
Fixed about.lua trigger problems.
administration 1.11 - Removed /kickme and /broadcast. Users should leave manually, and announcements should be made via channel rather than spam. /setqotd now handles forwarded messages correctly. /kick, /ban, /hammer,
/mod, /admin now support multiple arguments. Added get_targets function. No migration is necessary.
2016-07-05 09:29:11 +02:00
|
|
|
-- Support deep linking.
|
2016-05-27 05:28:44 +02:00
|
|
|
if msg.text:match('^'..config.cmd_pat..'start .+') then
|
|
|
|
msg.text = config.cmd_pat .. utilities.input(msg.text)
|
2016-04-12 11:24:56 +02:00
|
|
|
msg.text_lower = msg.text:lower()
|
2016-01-08 04:30:12 +01:00
|
|
|
end
|
|
|
|
|
2016-06-17 20:44:28 +02:00
|
|
|
-- gsub out user name if multiple bots are in the same group
|
2016-07-13 02:01:02 +02:00
|
|
|
if msg.text:match(config.cmd_pat..'([A-Za-z0-9-_-]+)@'..self.info.username) then
|
2016-07-13 02:08:59 +02:00
|
|
|
msg.text = string.gsub(msg.text, config.cmd_pat..'([A-Za-z0-9-_-]+)@'..self.info.username, "/%1")
|
2016-07-13 02:01:02 +02:00
|
|
|
msg.text_lower = msg.text:lower()
|
|
|
|
end
|
2016-06-17 20:44:28 +02:00
|
|
|
msg = pre_process_msg(self, msg, config)
|
2016-06-18 12:51:13 +02:00
|
|
|
|
2016-06-19 21:53:24 +02:00
|
|
|
for _, plugin in ipairs(self.plugins) do
|
|
|
|
match_plugins(self, msg, config, plugin)
|
|
|
|
end
|
2015-07-03 00:15:52 +02:00
|
|
|
end
|
|
|
|
|
2016-07-02 12:35:14 +02:00
|
|
|
function bot:on_callback_receive(callback, msg, config) -- whenever a new callback is received
|
2016-07-02 15:03:54 +02:00
|
|
|
-- remove comments to enable debugging
|
2016-07-02 12:35:14 +02:00
|
|
|
-- vardump(msg)
|
|
|
|
-- vardump(callback)
|
|
|
|
|
2016-07-04 01:29:51 +02:00
|
|
|
if msg.date < os.time() - 1800 then -- Do not process old messages.
|
|
|
|
utilities.answer_callback_query(self, callback, 'Nachricht älter als eine halbe Stunde, bitte sende den Befehl selbst noch einmal.', true)
|
2016-07-02 12:35:14 +02:00
|
|
|
return
|
|
|
|
end
|
2016-07-02 14:58:04 +02:00
|
|
|
|
2016-07-09 15:13:41 +02:00
|
|
|
if not callback.data:find(':') or not callback.data:find('@'..self.info.username..' ') then
|
2016-07-02 14:58:04 +02:00
|
|
|
return
|
|
|
|
end
|
2016-07-09 15:10:31 +02:00
|
|
|
callback.data = string.gsub(callback.data, '@'..self.info.username..' ', "")
|
2016-07-02 14:58:04 +02:00
|
|
|
local called_plugin = callback.data:match('(.*):.*')
|
|
|
|
local param = callback.data:sub(callback.data:find(':')+1)
|
|
|
|
|
|
|
|
print('Callback Query "'..param..'" für Plugin "'..called_plugin..'" ausgelöst von '..callback.from.first_name..' ('..callback.from.id..')')
|
2016-07-02 12:35:14 +02:00
|
|
|
|
|
|
|
msg = utilities.enrich_message(msg)
|
2016-07-05 13:14:22 +02:00
|
|
|
|
2016-07-02 15:03:54 +02:00
|
|
|
for _, plugin in ipairs(self.plugins) do
|
|
|
|
if plugin.name == called_plugin then
|
|
|
|
if is_plugin_disabled_on_chat(plugin.name, msg) then return end
|
|
|
|
plugin:callback(callback, msg, self, config, param)
|
2016-07-02 12:35:14 +02:00
|
|
|
end
|
2016-07-02 15:03:54 +02:00
|
|
|
end
|
2016-07-02 12:35:14 +02:00
|
|
|
end
|
|
|
|
|
2016-07-13 01:00:32 +02:00
|
|
|
-- NOTE: To enable InlineQuerys, send /setinline to @BotFather
|
|
|
|
function bot:process_inline_query(inline_query, config) -- When an inline query is received
|
|
|
|
-- remove comment to enable debugging
|
|
|
|
-- vardump(inline_query)
|
|
|
|
|
|
|
|
if not config.enable_inline_for_everyone then
|
|
|
|
local is_whitelisted = redis:get('whitelist:user#id'..inline_query.from.id)
|
|
|
|
if not is_whitelisted then return end
|
|
|
|
end
|
|
|
|
|
|
|
|
if inline_query.query == '' then return end
|
2016-07-13 14:33:52 +02:00
|
|
|
if inline_query.query:match('"') then
|
|
|
|
inline_query.query = inline_query.query:gsub('"', '\\"')
|
|
|
|
end
|
2016-07-13 01:00:32 +02:00
|
|
|
for _, plugin in ipairs(self.plugins) do
|
|
|
|
match_inline_plugins(self, inline_query, config, plugin)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2016-05-27 05:28:44 +02:00
|
|
|
function bot:run(config)
|
2016-05-27 02:26:30 +02:00
|
|
|
bot.init(self, config) -- Actually start the script.
|
2015-08-29 08:15:01 +02:00
|
|
|
|
2016-04-14 05:48:20 +02:00
|
|
|
while self.is_started do -- Start a loop while the bot should be running.
|
2016-05-29 19:08:39 +02:00
|
|
|
local res = bindings.getUpdates(self, { timeout=20, offset = self.last_update+1 } )
|
2016-05-22 09:03:50 +02:00
|
|
|
if res then
|
|
|
|
for _,v in ipairs(res.result) do -- Go through every new message.
|
|
|
|
self.last_update = v.update_id
|
2016-07-12 23:04:39 +02:00
|
|
|
if v.inline_query then
|
|
|
|
bot.process_inline_query(self, v.inline_query, config)
|
|
|
|
elseif v.callback_query then
|
2016-07-02 12:35:14 +02:00
|
|
|
bot.on_callback_receive(self, v.callback_query, v.callback_query.message, config)
|
2016-06-27 15:44:11 +02:00
|
|
|
elseif v.message then
|
2016-05-27 02:26:30 +02:00
|
|
|
bot.on_msg_receive(self, v.message, config)
|
2016-04-14 05:48:20 +02:00
|
|
|
end
|
2016-04-08 23:12:02 +02:00
|
|
|
end
|
2016-05-22 09:03:50 +02:00
|
|
|
else
|
2016-06-07 05:13:26 +02:00
|
|
|
print('Connection error while fetching updates.')
|
2015-07-03 00:15:52 +02:00
|
|
|
end
|
|
|
|
|
2016-04-14 05:48:20 +02:00
|
|
|
if self.last_cron ~= os.date('%M') then -- Run cron jobs every minute.
|
|
|
|
self.last_cron = os.date('%M')
|
|
|
|
utilities.save_data(self.info.username..'.db', self.database) -- Save the database.
|
|
|
|
for i,v in ipairs(self.plugins) do
|
|
|
|
if v.cron then -- Call each plugin's cron function, if it has one.
|
2016-05-27 05:28:44 +02:00
|
|
|
local result, err = pcall(function() v.cron(self, config) end)
|
2016-05-29 19:08:39 +02:00
|
|
|
if not result then
|
2016-05-27 02:26:30 +02:00
|
|
|
utilities.handle_exception(self, err, 'CRON: ' .. i, config)
|
2016-04-14 05:48:20 +02:00
|
|
|
end
|
2016-01-13 19:00:17 +01:00
|
|
|
end
|
2015-07-15 08:15:23 +02:00
|
|
|
end
|
2015-07-03 00:15:52 +02:00
|
|
|
end
|
otouto 3.11
"things occurred"
Added some utilities (id_from_username, id_from_message), removed some utilities (latcyr, others?).
Removed cycle-wasting "shortcuts" -- no more automatic id_str or name; text_lower remains.
Moved userdata (nicknames, lastfm, etc) to a different tree in the database (automatic migration will occur). /me now returns userdata.
Speaking of migration, database now stores the latest version run to make future automigration easy.
Database now saves hourly rather than minutely.
Changed readme and some plugins to reflect above changes.
Removed broken rockspec (Brayden, feel free to re-add once it's working).
Added option to automatically block people (via drua) when blacklisted.
Fixed about.lua trigger problems.
administration 1.11 - Removed /kickme and /broadcast. Users should leave manually, and announcements should be made via channel rather than spam. /setqotd now handles forwarded messages correctly. /kick, /ban, /hammer,
/mod, /admin now support multiple arguments. Added get_targets function. No migration is necessary.
2016-07-05 09:29:11 +02:00
|
|
|
if self.last_database_save ~= os.date('%H') then
|
|
|
|
utilities.save_data(self.info.username..'.db', self.database) -- Save the database.
|
|
|
|
self.last_database_save = os.date('%H')
|
|
|
|
end
|
2015-07-03 00:15:52 +02:00
|
|
|
end
|
2015-08-29 08:15:01 +02:00
|
|
|
|
2016-04-14 05:48:20 +02:00
|
|
|
-- Save the database before exiting.
|
|
|
|
utilities.save_data(self.info.username..'.db', self.database)
|
|
|
|
print('Halted.')
|
2015-07-03 00:15:52 +02:00
|
|
|
end
|
2015-08-29 08:15:01 +02:00
|
|
|
|
2016-06-15 20:10:30 +02:00
|
|
|
-- Apply plugin.pre_process function
|
2016-06-17 20:44:28 +02:00
|
|
|
function pre_process_msg(self, msg, config)
|
2016-06-20 20:57:59 +02:00
|
|
|
for _,plugin in ipairs(self.plugins) do
|
2016-06-15 20:10:30 +02:00
|
|
|
if plugin.pre_process and msg then
|
2016-06-20 20:57:59 +02:00
|
|
|
-- print('Preprocess '..plugin.name) -- remove comment to restore old behaviour
|
2016-06-17 20:44:28 +02:00
|
|
|
new_msg = plugin:pre_process(msg, self, config)
|
2016-06-15 20:10:30 +02:00
|
|
|
end
|
|
|
|
end
|
2016-06-17 20:44:28 +02:00
|
|
|
return new_msg
|
2016-06-15 20:10:30 +02:00
|
|
|
end
|
|
|
|
|
2016-07-13 01:00:32 +02:00
|
|
|
function match_inline_plugins(self, inline_query, config, plugin)
|
|
|
|
for _, trigger in pairs(plugin.inline_triggers or {}) do
|
|
|
|
if string.match(string.lower(inline_query.query), trigger) then
|
|
|
|
local success, result = pcall(function()
|
|
|
|
for k, pattern in pairs(plugin.inline_triggers) do
|
|
|
|
matches = match_pattern(pattern, inline_query.query)
|
|
|
|
if matches then
|
|
|
|
break;
|
|
|
|
end
|
|
|
|
end
|
2016-07-13 01:21:50 +02:00
|
|
|
print('Inline: '..plugin.name..' triggered')
|
2016-07-13 01:00:32 +02:00
|
|
|
return plugin.inline_callback(self, inline_query, config, matches)
|
|
|
|
end)
|
|
|
|
if not success then
|
|
|
|
print(result)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2016-06-19 21:53:24 +02:00
|
|
|
function match_plugins(self, msg, config, plugin)
|
2016-07-05 13:14:22 +02:00
|
|
|
for _, trigger in pairs(plugin.triggers or {}) do
|
2016-06-19 21:53:24 +02:00
|
|
|
if string.match(msg.text_lower, trigger) then
|
|
|
|
-- Check if Plugin is disabled
|
|
|
|
if is_plugin_disabled_on_chat(plugin.name, msg) then return end
|
|
|
|
local success, result = pcall(function()
|
|
|
|
-- trying to port matches to otouto
|
|
|
|
for k, pattern in pairs(plugin.triggers) do
|
|
|
|
matches = match_pattern(pattern, msg.text)
|
|
|
|
if matches then
|
|
|
|
break;
|
2016-06-18 12:51:13 +02:00
|
|
|
end
|
2016-06-19 21:53:24 +02:00
|
|
|
end
|
2016-06-20 17:58:46 +02:00
|
|
|
print(plugin.name..' triggered')
|
2016-06-19 21:53:24 +02:00
|
|
|
return plugin.action(self, msg, config, matches)
|
|
|
|
end)
|
|
|
|
if not success then
|
|
|
|
-- If the plugin has an error message, send it. If it does
|
|
|
|
-- not, use the generic one specified in config. If it's set
|
|
|
|
-- to false, do nothing.
|
|
|
|
if plugin.error then
|
|
|
|
utilities.send_reply(self, msg, plugin.error)
|
|
|
|
elseif plugin.error == nil then
|
|
|
|
utilities.send_reply(self, msg, config.errors.generic, true)
|
|
|
|
end
|
|
|
|
utilities.handle_exception(self, result, msg.from.id .. ': ' .. msg.text, config)
|
|
|
|
return
|
|
|
|
end
|
|
|
|
-- If the action returns a table, make that table the new msg.
|
|
|
|
if type(result) == 'table' then
|
|
|
|
msg = result
|
|
|
|
-- If the action returns true, continue.
|
|
|
|
elseif result ~= true then
|
2016-06-18 12:51:13 +02:00
|
|
|
return
|
|
|
|
end
|
2016-06-19 21:53:24 +02:00
|
|
|
end
|
2016-06-18 12:51:13 +02:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
function is_plugin_disabled_on_chat(plugin_name, msg)
|
|
|
|
local hash = get_redis_hash(msg, 'disabled_plugins')
|
|
|
|
local disabled = redis:hget(hash, plugin_name)
|
|
|
|
|
|
|
|
-- Plugin is disabled
|
|
|
|
if disabled == 'true' then
|
|
|
|
print('Plugin '..plugin_name..' ist in diesem Chat deaktiviert')
|
|
|
|
return true
|
|
|
|
else
|
|
|
|
return false
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
function load_plugins()
|
|
|
|
enabled_plugins = redis:smembers('telegram:enabled_plugins')
|
|
|
|
if not enabled_plugins[1] then
|
|
|
|
create_plugin_set()
|
|
|
|
end
|
|
|
|
return enabled_plugins
|
|
|
|
end
|
|
|
|
|
|
|
|
-- create plugin set if it doesn't exist
|
|
|
|
function create_plugin_set()
|
|
|
|
enabled_plugins = {
|
|
|
|
'control',
|
|
|
|
'about',
|
2016-06-21 16:20:56 +02:00
|
|
|
'id',
|
2016-06-18 12:51:13 +02:00
|
|
|
'echo',
|
|
|
|
'banhammer',
|
|
|
|
'channels',
|
|
|
|
'plugins',
|
|
|
|
'help',
|
|
|
|
'greetings'
|
|
|
|
}
|
|
|
|
print ('enabling a few plugins - saving to redis set telegram:enabled_plugins')
|
|
|
|
for _,plugin in pairs(enabled_plugins) do
|
|
|
|
redis:sadd("telegram:enabled_plugins", plugin)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2016-06-11 14:46:41 +02:00
|
|
|
function load_cred()
|
|
|
|
if redis:exists("telegram:credentials") == false then
|
|
|
|
-- If credentials hash doesnt exists
|
|
|
|
print ("Created new credentials hash: telegram:credentials")
|
|
|
|
create_cred()
|
|
|
|
end
|
|
|
|
return redis:hgetall("telegram:credentials")
|
|
|
|
end
|
|
|
|
|
|
|
|
-- create credentials hash with redis
|
|
|
|
function create_cred()
|
|
|
|
cred = {
|
|
|
|
bitly_access_token = "",
|
|
|
|
cloudinary_apikey = "",
|
|
|
|
cloudinary_api_secret = "",
|
|
|
|
cloudinary_public_id = "",
|
|
|
|
derpibooru_apikey = "",
|
|
|
|
fb_access_token = "",
|
|
|
|
flickr_apikey = "",
|
|
|
|
ftp_site = "",
|
|
|
|
ftp_username = "",
|
|
|
|
ftp_password = "",
|
|
|
|
gender_apikey = "",
|
|
|
|
golem_apikey = "",
|
|
|
|
google_apikey = "",
|
|
|
|
google_cse_id = "",
|
|
|
|
gitlab_private_token = "",
|
|
|
|
gitlab_project_id = "",
|
|
|
|
instagram_access_token = "",
|
|
|
|
lyricsnmusic_apikey = "",
|
|
|
|
mal_username = "",
|
|
|
|
mal_pw = "",
|
|
|
|
neutrino_userid = "",
|
|
|
|
neutrino_apikey = "",
|
|
|
|
owm_apikey = "",
|
|
|
|
page2images_restkey = "",
|
|
|
|
soundcloud_client_id = "",
|
|
|
|
tw_consumer_key = "",
|
|
|
|
tw_consumer_secret = "",
|
|
|
|
tw_access_token = "",
|
|
|
|
tw_access_token_secret = "",
|
|
|
|
x_mashape_key = "",
|
|
|
|
yandex_translate_apikey = "",
|
|
|
|
yandex_rich_content_apikey = "",
|
|
|
|
yourls_site_url = "",
|
|
|
|
yourls_signature_token = ""
|
|
|
|
}
|
|
|
|
redis:hmset("telegram:credentials", cred)
|
|
|
|
print ('saved credentials into reds hash telegram:credentials')
|
|
|
|
end
|
|
|
|
|
2016-07-05 13:14:22 +02:00
|
|
|
return bot
|