Upstream
This commit is contained in:
@@ -5,33 +5,16 @@ local bot = require('otouto.bot')
|
||||
about.command = 'about'
|
||||
about.doc = '`Sendet Informationen über den Bot.`'
|
||||
|
||||
about.triggers = {
|
||||
function about:init(config)
|
||||
about.text = config.about_text..'\n[Brawlbot](https://github.com/Brawl345/Brawlbot-v2) v'..bot.version..', basierend auf [Otouto](http://github.com/topkecleon/otouto) von topkecleon.'
|
||||
about.triggers = {
|
||||
'/about',
|
||||
'/start'
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
function about:action(msg, config)
|
||||
|
||||
-- Filthy hack, but here is where we'll stop forwarded messages from hitting
|
||||
-- other plugins.
|
||||
-- disabled to restore old behaviour
|
||||
-- if msg.forward_from then return end
|
||||
|
||||
local output = config.about_text .. '\nBrawlbot v'..bot.version..', basierend auf Otouto von topkecleon.'
|
||||
|
||||
if
|
||||
(msg.new_chat_member and msg.new_chat_member.id == self.info.id)
|
||||
or msg.text_lower:match('^'..config.cmd_pat..'about$')
|
||||
or msg.text_lower:match('^'..config.cmd_pat..'about@'..self.info.username:lower()..'$')
|
||||
or msg.text_lower:match('^'..config.cmd_pat..'start$')
|
||||
or msg.text_lower:match('^'..config.cmd_pat..'start@'..self.info.username:lower()..'$')
|
||||
then
|
||||
utilities.send_message(self, msg.chat.id, output, true, nil, true)
|
||||
return
|
||||
end
|
||||
|
||||
return true
|
||||
|
||||
utilities.send_message(self, msg.chat.id, about.text, true, nil, true)
|
||||
end
|
||||
|
||||
return about
|
||||
|
||||
@@ -5,21 +5,27 @@ function cleverbot:init(config)
|
||||
"^/cbot (.+)$",
|
||||
"^[Bb]rawlbot, (.+)$",
|
||||
}
|
||||
|
||||
cleverbot.doc = [[*
|
||||
]]..config.cmd_pat..[[cbot* _<Text>_*: Befragt den Cleverbot]]
|
||||
cleverbot.url = config.chatter.cleverbot_api
|
||||
end
|
||||
|
||||
cleverbot.command = 'cbot <Text>'
|
||||
|
||||
function cleverbot:action(msg, config)
|
||||
local text = msg.text
|
||||
local url = "https://brawlbot.tk/apis/chatter-bot-api/cleverbot.php?text="..URL.escape(text)
|
||||
function cleverbot:action(msg, config, matches)
|
||||
utilities.send_typing(self, msg.chat.id, 'typing')
|
||||
local query = https.request(url)
|
||||
if query == nil then utilities.send_reply(self, msg, 'Ein Fehler ist aufgetreten :(') return end
|
||||
local decode = json.decode(query)
|
||||
local answer = string.gsub(decode.clever, "Ä", "Ä")
|
||||
local text = matches[1]
|
||||
local query, code = https.request(cleverbot.url..URL.escape(text))
|
||||
if code ~= 200 then
|
||||
utilities.send_reply(self, msg, 'Ich möchte jetzt nicht reden...')
|
||||
return
|
||||
end
|
||||
|
||||
local data = json.decode(query)
|
||||
if not data.clever then
|
||||
utilities.send_reply(self, msg, 'Ich möchte jetzt nicht reden...')
|
||||
return
|
||||
end
|
||||
|
||||
local answer = string.gsub(data.clever, "Ä", "Ä")
|
||||
local answer = string.gsub(answer, "ä", "ä")
|
||||
local answer = string.gsub(answer, "Ö", "Ö")
|
||||
local answer = string.gsub(answer, "ö", "ö")
|
||||
@@ -29,4 +35,4 @@ function cleverbot:action(msg, config)
|
||||
utilities.send_reply(self, msg, answer)
|
||||
end
|
||||
|
||||
return cleverbot
|
||||
return cleverbot
|
||||
@@ -26,7 +26,7 @@ function echo:inline_callback(inline_query, config, matches)
|
||||
end
|
||||
|
||||
function echo:action(msg)
|
||||
local input = utilities.input(msg.text)
|
||||
local input = utilities.input_from_msg(msg)
|
||||
if not input then
|
||||
utilities.send_message(self, msg.chat.id, echo.doc, true, msg.message_id, true)
|
||||
else
|
||||
|
||||
@@ -30,14 +30,10 @@ function gMaps:inline_callback(inline_query, config, matches)
|
||||
end
|
||||
|
||||
function gMaps:action(msg, config)
|
||||
local input = utilities.input(msg.text)
|
||||
local input = utilities.input_from_msg(msg)
|
||||
if not input then
|
||||
if msg.reply_to_message and msg.reply_to_message.text then
|
||||
input = msg.reply_to_message.text
|
||||
else
|
||||
utilities.send_message(self, msg.chat.id, gMaps.doc, true, msg.message_id, true)
|
||||
return
|
||||
end
|
||||
utilities.send_reply(self, msg, gMaps.doc, true)
|
||||
return
|
||||
end
|
||||
|
||||
utilities.send_typing(self, msg.chat.id, 'find_location')
|
||||
|
||||
@@ -51,14 +51,10 @@ function gSearch:stringlinks(results, stats)
|
||||
end
|
||||
|
||||
function gSearch:action(msg, config)
|
||||
local input = utilities.input(msg.text)
|
||||
local input = utilities.input_from_msg(msg)
|
||||
if not input then
|
||||
if msg.reply_to_message and msg.reply_to_message.text then
|
||||
input = msg.reply_to_message.text
|
||||
else
|
||||
utilities.send_message(self, msg.chat.id, gSearch.doc, true, msg.message_id, true)
|
||||
return
|
||||
end
|
||||
utilities.send_reply(self, msg, gImages.doc, true)
|
||||
return
|
||||
end
|
||||
|
||||
local results, stats = gSearch:googlethat(input, onfig)
|
||||
|
||||
@@ -67,14 +67,10 @@ function imdb:inline_callback(inline_query, config, matches)
|
||||
end
|
||||
|
||||
function imdb:action(msg, config)
|
||||
local input = utilities.input(msg.text)
|
||||
local input = utilities.input_from_msg(msg)
|
||||
if not input then
|
||||
if msg.reply_to_message and msg.reply_to_message.text then
|
||||
input = msg.reply_to_message.text
|
||||
else
|
||||
utilities.send_message(self, msg.chat.id, imdb.doc, true, msg.message_id, true)
|
||||
return
|
||||
end
|
||||
utilities.send_reply(self, msg, imdb.doc, true)
|
||||
return
|
||||
end
|
||||
|
||||
local url = BASE_URL..'/?t='..URL.escape(input)
|
||||
|
||||
@@ -2,11 +2,22 @@ local luarun = {}
|
||||
|
||||
function luarun:init(config)
|
||||
luarun.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('lua', true):t('return', true).table
|
||||
if config.luarun_serpent then
|
||||
serpent = require('serpent')
|
||||
luarun.serialize = function(t)
|
||||
return serpent.block(t, {comment=false})
|
||||
end
|
||||
else
|
||||
JSON = require('dkjson')
|
||||
luarun.serialize = function(t)
|
||||
return JSON.encode(t, {indent=true})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function luarun:action(msg, config)
|
||||
|
||||
if msg.from.id ~= config.admin then
|
||||
if not is_sudo(msg, config) then
|
||||
return true
|
||||
end
|
||||
|
||||
@@ -24,17 +35,18 @@ function luarun:action(msg, config)
|
||||
local bot = require('otouto.bot')
|
||||
local bindings = require('otouto.bindings')
|
||||
local utilities = require('otouto.utilities')
|
||||
local json = require('dkjson')
|
||||
local drua = require('otouto.drua-tg')
|
||||
local JSON = require('dkjson')
|
||||
local URL = require('socket.url')
|
||||
local http = require('socket.http')
|
||||
local https = require('ssl.https')
|
||||
local HTTP = require('socket.http')
|
||||
local HTTPS = require('ssl.https')
|
||||
return function (self, msg, config) ]] .. input .. [[ end
|
||||
]] )()(self, msg, config)
|
||||
if output == nil then
|
||||
output = 'Done!'
|
||||
else
|
||||
if type(output) == 'table' then
|
||||
local s = json.encode(output, {indent=true})
|
||||
local s = luarun.serialize(output)
|
||||
if URL.escape(s):len() < 4000 then
|
||||
output = s
|
||||
end
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
local patterns = {}
|
||||
|
||||
patterns.triggers = {
|
||||
'^/?s/.-/.-$'
|
||||
}
|
||||
function patterns:init(config)
|
||||
patterns.command = 's/<Pattern>/<Ersetzung>'
|
||||
patterns.triggers = {
|
||||
config.cmd_pat .. '?s/.-/.-$'
|
||||
}
|
||||
end
|
||||
|
||||
function patterns:action(msg)
|
||||
if not msg.reply_to_message then return true end
|
||||
|
||||
@@ -11,34 +11,31 @@ Returns a full-message, "unlinked" preview.
|
||||
end
|
||||
|
||||
function preview:action(msg)
|
||||
local input = utilities.input_from_msg(msg)
|
||||
if not input then
|
||||
utilities.send_reply(self, msg, preview.doc, true)
|
||||
return
|
||||
end
|
||||
|
||||
local input = utilities.input(msg.text)
|
||||
input = utilities.get_word(input, 1)
|
||||
if not input:match('^https?://.+') then
|
||||
input = 'http://' .. input
|
||||
end
|
||||
|
||||
if not input then
|
||||
utilities.send_message(self, msg.chat.id, preview.doc, true, nil, true)
|
||||
return
|
||||
end
|
||||
local res = http.request(input)
|
||||
if not res then
|
||||
utilities.send_reply(self, msg, 'Bitte gebe einen validen Link an.')
|
||||
return
|
||||
end
|
||||
|
||||
input = utilities.get_word(input, 1)
|
||||
if not input:match('^https?://.+') then
|
||||
input = 'http://' .. input
|
||||
end
|
||||
|
||||
local res = http.request(input)
|
||||
if not res then
|
||||
utilities.send_reply(self, msg, 'Please provide a valid link.')
|
||||
return
|
||||
end
|
||||
|
||||
if res:len() == 0 then
|
||||
utilities.send_reply(self, msg, 'Sorry, the link you provided is not letting us make a preview.')
|
||||
return
|
||||
end
|
||||
|
||||
-- Invisible zero-width, non-joiner.
|
||||
local output = '[](' .. input .. ')'
|
||||
utilities.send_message(self, msg.chat.id, output, false, nil, true)
|
||||
if res:len() == 0 then
|
||||
utilities.send_reply(self, msg, 'Sorry, dieser Link lässt uns keine Vorschau erstellen.')
|
||||
return
|
||||
end
|
||||
|
||||
-- Invisible zero-width, non-joiner.
|
||||
local output = '<a href="' .. input .. '">' .. utilities.char.zwnj .. '</a>'
|
||||
utilities.send_message(self, msg.chat.id, output, false, nil, 'HTML')
|
||||
end
|
||||
|
||||
return preview
|
||||
return preview
|
||||
@@ -7,88 +7,79 @@ function remind:init(config)
|
||||
|
||||
remind.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('remind', true).table
|
||||
remind.doc = [[*
|
||||
]]..config.cmd_pat..[[remind* _<Länge>_ _<Nachricht>_: Erinnert dich in X Minuten an die Nachricht]]
|
||||
]]..config.cmd_pat..[[remind* _<Länge>_ _<Nachricht>_
|
||||
Erinnert dich in der angegeben Länge in Minuten an eine Nachricht.
|
||||
Die maximale Länge einer Erinnerung beträgt %s Buchstaben, die maximale Zeit beträgt %s Minuten, die maximale Anzahl an Erinnerung für eine Gruppe ist %s und für private Chats %s.]]
|
||||
remind.doc = remind.doc:format(config.remind.max_length, config.remind.max_duration, config.remind.max_reminders_group, config.remind.max_reminders_private)
|
||||
end
|
||||
|
||||
function remind:action(msg)
|
||||
-- Ensure there are arguments. If not, send doc.
|
||||
function remind:action(msg, config)
|
||||
local input = utilities.input(msg.text)
|
||||
if not input then
|
||||
utilities.send_message(self, msg.chat.id, remind.doc, true, msg.message_id, true)
|
||||
utilities.send_reply(self, msg, remind.doc, true)
|
||||
return
|
||||
end
|
||||
|
||||
-- Ensure first arg is a number. If not, send doc.
|
||||
local duration = utilities.get_word(input, 1)
|
||||
if not tonumber(duration) then
|
||||
utilities.send_message(self, msg.chat.id, remind.doc, true, msg.message_id, true)
|
||||
local duration = tonumber(utilities.get_word(input, 1))
|
||||
if not duration then
|
||||
utilities.send_reply(self, msg, remind.doc, true)
|
||||
return
|
||||
end
|
||||
|
||||
-- Duration must be between one minute and one day (approximately).
|
||||
duration = tonumber(duration)
|
||||
if duration < 1 then
|
||||
duration = 1
|
||||
elseif duration > 1440 then
|
||||
duration = 1440
|
||||
elseif duration > config.remind.max_duration then
|
||||
duration = config.remind.max_duration
|
||||
end
|
||||
|
||||
-- Ensure there is a second arg.
|
||||
local message = utilities.input(input)
|
||||
if not message then
|
||||
utilities.send_message(self, msg.chat.id, remind.doc, true, msg.message_id, true)
|
||||
utilities.send_reply(self, msg, remind.doc, true)
|
||||
return
|
||||
end
|
||||
|
||||
if #message > config.remind.max_length then
|
||||
utilities.send_reply(self, msg, 'Die maximale Länge einer Erinnerung ist ' .. config.remind.max_length .. '.')
|
||||
return
|
||||
end
|
||||
|
||||
-- Make a database entry for the group/user if one does not exist.
|
||||
self.database.reminders[msg.chat.id_str] = self.database.reminders[msg.chat.id_str] or {}
|
||||
-- Limit group reminders to 10 and private reminders to 50.
|
||||
if msg.chat.type ~= 'private' and utilities.table_size(self.database.reminders[msg.chat.id_str]) > 9 then
|
||||
utilities.send_reply(self, msg, 'Diese Gruppe hat schon zehn Erinnerungen!')
|
||||
return
|
||||
elseif msg.chat.type == 'private' and utilities.table_size(self.database.reminders[msg.chat.id_str]) > 49 then
|
||||
utilities.send_reply(msg, 'Du hast schon 50 Erinnerungen!')
|
||||
return
|
||||
local chat_id_str = tostring(msg.chat.id)
|
||||
local output
|
||||
self.database.reminders[chat_id_str] = self.database.reminders[chat_id_str] or {}
|
||||
if msg.chat.type == 'private' and utilities.table_size(self.database.reminders[chat_id_str]) >= config.remind.max_reminders_private then
|
||||
output = 'Sorry, du kannst keine Erinnerungen mehr hinzufügen.'
|
||||
elseif msg.chat.type ~= 'private' and utilities.table_size(self.database.reminders[chat_id_str]) >= config.remind.max_reminders_group then
|
||||
output = 'Sorry, diese Gruppe kann keine Erinnerungen mehr hinzufügen.'
|
||||
else
|
||||
-- Put together the reminder with the expiration, message, and message to reply to.
|
||||
local timestamp = os.time() + duration * 60
|
||||
local reminder = {
|
||||
time = timestamp,
|
||||
message = message
|
||||
}
|
||||
table.insert(self.database.reminders[chat_id_str], reminder)
|
||||
local human_readable_time = convert_timestamp(timestamp, '%H:%M:%S')
|
||||
output = 'Ich werde dich um *'..human_readable_time..' Uhr* erinnern.'
|
||||
end
|
||||
|
||||
-- Put together the reminder with the expiration, message, and message to reply to.
|
||||
local timestamp = os.time() + duration * 60
|
||||
local reminder = {
|
||||
time = timestamp,
|
||||
message = message
|
||||
}
|
||||
table.insert(self.database.reminders[msg.chat.id_str], reminder)
|
||||
local human_readable_time = convert_timestamp(timestamp, '%H:%M:%S')
|
||||
local output = 'Ich werde dich um *'..human_readable_time..' Uhr* erinnern.'
|
||||
utilities.send_reply(self, msg, output, true)
|
||||
end
|
||||
|
||||
function remind:cron()
|
||||
function remind:cron(config)
|
||||
local time = os.time()
|
||||
-- Iterate over the group entries in the reminders database.
|
||||
for chat_id, group in pairs(self.database.reminders) do
|
||||
local new_group = {}
|
||||
-- Iterate over each reminder.
|
||||
for _, reminder in ipairs(group) do
|
||||
for k, reminder in pairs(group) do
|
||||
-- If the reminder is past-due, send it and nullify it.
|
||||
-- Otherwise, add it to the replacement table.
|
||||
if time > reminder.time then
|
||||
local output = '*ERINNERUNG:*\n"' .. utilities.md_escape(reminder.message) .. '"'
|
||||
local res = utilities.send_message(self, chat_id, output, true, nil, true)
|
||||
-- If the message fails to send, save it for later.
|
||||
if not res then
|
||||
table.insert(new_group, reminder)
|
||||
-- If the message fails to send, save it for later (if enabled in config).
|
||||
if res or not config.remind.persist then
|
||||
group[k] = nil
|
||||
end
|
||||
else
|
||||
table.insert(new_group, reminder)
|
||||
end
|
||||
end
|
||||
-- Nullify the original table and replace it with the new one.
|
||||
self.database.reminders[chat_id] = new_group
|
||||
-- Nullify the table if it is empty.
|
||||
if #new_group == 0 then
|
||||
self.database.reminders[chat_id] = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -91,7 +91,7 @@ function time:inline_callback(inline_query, config, matches)
|
||||
end
|
||||
|
||||
function time:action(msg, config)
|
||||
local input = utilities.input(msg.text)
|
||||
local input = utilities.input_from_msg(msg)
|
||||
if not input then
|
||||
local output = os.date("%A, %d. %B %Y, *%H:%M:%S Uhr*")
|
||||
utilities.send_reply(self, msg, time:localize(output), true)
|
||||
|
||||
Reference in New Issue
Block a user