Merge remote-tracking branch 'upstream/master' into dev
This commit is contained in:
commit
34ed5a33cb
74
config.lua
Normal file
74
config.lua
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
return {
|
||||||
|
|
||||||
|
-- Your authorization token from the botfather.
|
||||||
|
bot_api_key = '235106290:AAF2acnyBgnE4kS70Kj4QDjU6Wbc0iU7SOM',
|
||||||
|
-- Your Telegram ID.
|
||||||
|
admin = 36623702,
|
||||||
|
-- Two-letter language code.
|
||||||
|
lang = 'de',
|
||||||
|
-- The channel, group, or user to send error reports to.
|
||||||
|
-- If this is not set, errors will be printed to the console.
|
||||||
|
log_chat = nil,
|
||||||
|
-- The port used to communicate with tg for administration.lua.
|
||||||
|
-- If you change this, make sure you also modify launch-tg.sh.
|
||||||
|
cli_port = 4567,
|
||||||
|
-- The block of text returned by /start.
|
||||||
|
about_text = [[
|
||||||
|
*Willkommen beim Brawlbot!*
|
||||||
|
Sende /hilfe, um zu starten.
|
||||||
|
]],
|
||||||
|
|
||||||
|
-- DO NOT CHANGE THIS
|
||||||
|
cmd_pat = '/',
|
||||||
|
|
||||||
|
-- Text for users, who are not approved
|
||||||
|
banhammer_text = [[
|
||||||
|
Dies ist ein privater Bot, der erst nach einer Freischaltung benutzt werden kann.
|
||||||
|
This is a private bot, which can only be used after an approval.
|
||||||
|
]],
|
||||||
|
|
||||||
|
-- false = only whitelisted users can use inline querys
|
||||||
|
-- NOTE that it doesn't matter, if the chat is whitelisted! The USER must be whitelisted!
|
||||||
|
enable_inline_for_everyone = true,
|
||||||
|
|
||||||
|
-- Path, where getFile.lua should store the files WITHOUT an ending slash!
|
||||||
|
-- Create the following folders in this folder: photo, document, video, voice
|
||||||
|
--getfile_path = '/home/anditest/tmp/tg',
|
||||||
|
|
||||||
|
-- Redis settings. Only edit if you know what you're doing.
|
||||||
|
redis = {
|
||||||
|
host = '127.0.0.1',
|
||||||
|
port = 6379,
|
||||||
|
use_socket = true,
|
||||||
|
socket_path = 'unix:///home/anditest/.redis/sock',
|
||||||
|
password = nil,
|
||||||
|
database = 1
|
||||||
|
},
|
||||||
|
|
||||||
|
errors = { -- Generic error messages used in various plugins.
|
||||||
|
generic = 'Ein unbekannter Fehler ist aufgetreten, bitte [melde diesen Bug](https://github.com/Brawl345/Brawlbot-v2/issues).',
|
||||||
|
connection = 'Verbindungsfehler.',
|
||||||
|
quotaexceeded = 'API-Quota aufgebraucht.',
|
||||||
|
results = 'Keine Ergebnisse gefunden.',
|
||||||
|
sudo = 'Du bist kein Superuser. Dieser Vorfall wird gemeldet!',
|
||||||
|
argument = 'Invalides Argument.',
|
||||||
|
syntax = 'Invalide Syntax.',
|
||||||
|
chatter_connection = 'Ich möchte gerade nicht reden',
|
||||||
|
chatter_response = 'Ich weiß nicht, was ich darauf antworten soll.'
|
||||||
|
},
|
||||||
|
|
||||||
|
remind = {
|
||||||
|
persist = true,
|
||||||
|
max_length = 1000,
|
||||||
|
max_duration = 1440,
|
||||||
|
max_reminders_group = 5,
|
||||||
|
max_reminders_private = 10
|
||||||
|
},
|
||||||
|
|
||||||
|
cleverbot = {
|
||||||
|
cleverbot_api = 'https://brawlbot.tk/apis/chatter-bot-api/cleverbot.php?text=',
|
||||||
|
connection = 'Ich möchte jetzt nicht reden...',
|
||||||
|
response = 'Keine Ahnung, was ich dazu sagen soll...'
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -61,7 +61,7 @@ Sende /hilfe, um zu starten
|
|||||||
max_reminders_private = 50
|
max_reminders_private = 50
|
||||||
},
|
},
|
||||||
|
|
||||||
chatter = {
|
cleverbot = {
|
||||||
cleverbot_api = 'https://brawlbot.tk/apis/chatter-bot-api/cleverbot.php?text=',
|
cleverbot_api = 'https://brawlbot.tk/apis/chatter-bot-api/cleverbot.php?text=',
|
||||||
connection = 'Ich möchte jetzt nicht reden.',
|
connection = 'Ich möchte jetzt nicht reden.',
|
||||||
response = 'Ich weiß nicht, wie ich darauf reagieren soll.'
|
response = 'Ich weiß nicht, wie ich darauf reagieren soll.'
|
||||||
|
@ -5,19 +5,8 @@
|
|||||||
See the "Bindings" section of README.md for usage information.
|
See the "Bindings" section of README.md for usage information.
|
||||||
|
|
||||||
Copyright 2016 topkecleon <drew@otou.to>
|
Copyright 2016 topkecleon <drew@otou.to>
|
||||||
|
Modified by Brawl345 <https://github.com/Brawl345>
|
||||||
This program is free software; you can redistribute it and/or modify it
|
This code is licensed under the GNU AGPLv3. See /LICENSE for details.
|
||||||
under the terms of the GNU Affero General Public License version 3 as
|
|
||||||
published by the Free Software Foundation.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License
|
|
||||||
for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software Foundation,
|
|
||||||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
]]--
|
]]--
|
||||||
|
|
||||||
local bindings = {}
|
local bindings = {}
|
||||||
@ -26,7 +15,7 @@ local https = require('ssl.https')
|
|||||||
https.TIMEOUT = 10
|
https.TIMEOUT = 10
|
||||||
local json = require('dkjson')
|
local json = require('dkjson')
|
||||||
local ltn12 = require('ltn12')
|
local ltn12 = require('ltn12')
|
||||||
local mp_encode = require('multipart-post').encode
|
local mp = require('multipart-post')
|
||||||
|
|
||||||
function bindings.init(token)
|
function bindings.init(token)
|
||||||
bindings.BASE_URL = 'https://api.telegram.org/bot' .. token .. '/'
|
bindings.BASE_URL = 'https://api.telegram.org/bot' .. token .. '/'
|
||||||
@ -65,7 +54,7 @@ function bindings.request(method, parameters, file)
|
|||||||
parameters = {''}
|
parameters = {''}
|
||||||
end
|
end
|
||||||
local response = {}
|
local response = {}
|
||||||
local body, boundary = mp_encode(parameters)
|
local body, boundary = mp.encode(parameters)
|
||||||
local success, code = https.request{
|
local success, code = https.request{
|
||||||
url = bindings.BASE_URL .. method,
|
url = bindings.BASE_URL .. method,
|
||||||
method = 'POST',
|
method = 'POST',
|
||||||
@ -86,8 +75,9 @@ function bindings.request(method, parameters, file)
|
|||||||
return false, false
|
return false, false
|
||||||
elseif result.ok then
|
elseif result.ok then
|
||||||
return result
|
return result
|
||||||
|
elseif result.description == 'Method not found' then
|
||||||
|
error(method .. ': Method not found.')
|
||||||
else
|
else
|
||||||
assert(result.description ~= 'Method not found', method .. ': Method not found.')
|
|
||||||
return false, result
|
return false, result
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
local bot = {}
|
local bot = {}
|
||||||
|
|
||||||
bot.version = '2.2.7'
|
bot.version = '2.3'
|
||||||
|
|
||||||
function bot:init(config) -- The function run when the bot is started or reloaded.
|
function bot:init(config) -- The function run when the bot is started or reloaded.
|
||||||
assert(config.bot_api_key, 'Dein Bot-Token ist nicht in der Config gesetzt!')
|
assert(config.bot_api_key, 'Dein Bot-Token ist nicht in der Config gesetzt!')
|
||||||
@ -40,6 +40,16 @@ function bot:init(config) -- The function run when the bot is started or reloade
|
|||||||
self.database = utilities.load_data(self.info.username..'.db')
|
self.database = utilities.load_data(self.info.username..'.db')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Migration code 2.2.7 -> 2.3
|
||||||
|
-- "database.reminders" -> "database.remind"
|
||||||
|
if self.database.version ~= '2.3' then
|
||||||
|
self.database.remind = self.database.reminders
|
||||||
|
self.database.reminders = nil
|
||||||
|
end
|
||||||
|
-- End migration code.
|
||||||
|
|
||||||
|
self.database.version = bot.version
|
||||||
|
|
||||||
self.plugins = {} -- Load plugins.
|
self.plugins = {} -- Load plugins.
|
||||||
enabled_plugins = load_plugins()
|
enabled_plugins = load_plugins()
|
||||||
for k,v in pairs(enabled_plugins) do
|
for k,v in pairs(enabled_plugins) do
|
||||||
@ -72,7 +82,7 @@ function bot:on_msg_receive(msg, config) -- The fn run whenever a message is rec
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- Support deep linking.
|
-- Support deep linking.
|
||||||
if msg.text:match('^'..config.cmd_pat..'start .+') then
|
if msg.text:match('^/start .+') then
|
||||||
msg.text = config.cmd_pat .. utilities.input(msg.text)
|
msg.text = config.cmd_pat .. utilities.input(msg.text)
|
||||||
msg.text_lower = msg.text:lower()
|
msg.text_lower = msg.text:lower()
|
||||||
end
|
end
|
||||||
@ -302,6 +312,7 @@ function match_plugins(self, msg, config, plugin)
|
|||||||
end)
|
end)
|
||||||
if not success then
|
if not success then
|
||||||
utilities.handle_exception(self, result, msg.from.id .. ': ' .. msg.text, config.log_chat)
|
utilities.handle_exception(self, result, msg.from.id .. ': ' .. msg.text, config.log_chat)
|
||||||
|
msg = nil
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
-- if one pattern matches, end
|
-- if one pattern matches, end
|
||||||
|
@ -6,7 +6,7 @@ function cleverbot:init(config)
|
|||||||
"^[Bb]rawlbot, (.+)$",
|
"^[Bb]rawlbot, (.+)$",
|
||||||
"^[Bb]ot, (.+)$"
|
"^[Bb]ot, (.+)$"
|
||||||
}
|
}
|
||||||
cleverbot.url = config.chatter.cleverbot_api
|
cleverbot.url = config.cleverbot.cleverbot_api
|
||||||
end
|
end
|
||||||
|
|
||||||
cleverbot.command = 'cbot <Text>'
|
cleverbot.command = 'cbot <Text>'
|
||||||
@ -16,13 +16,13 @@ function cleverbot:action(msg, config, matches)
|
|||||||
local text = matches[1]
|
local text = matches[1]
|
||||||
local query, code = https.request(cleverbot.url..URL.escape(text))
|
local query, code = https.request(cleverbot.url..URL.escape(text))
|
||||||
if code ~= 200 then
|
if code ~= 200 then
|
||||||
utilities.send_reply(msg, 'Ich möchte jetzt nicht reden...')
|
utilities.send_reply(msg, config.cleverbot.connection)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local data = json.decode(query)
|
local data = json.decode(query)
|
||||||
if not data.clever then
|
if not data.clever then
|
||||||
utilities.send_reply(msg, 'Ich möchte jetzt nicht reden...')
|
utilities.send_reply(msg, config.cleverbot.response)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -3,14 +3,19 @@ local remind = {}
|
|||||||
remind.command = 'remind <Länge> <Nachricht>'
|
remind.command = 'remind <Länge> <Nachricht>'
|
||||||
|
|
||||||
function remind:init(config)
|
function remind:init(config)
|
||||||
self.database.reminders = self.database.reminders or {}
|
self.database.remind = self.database.remind or {}
|
||||||
|
|
||||||
remind.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('remind', true).table
|
remind.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('remind', true).table
|
||||||
remind.doc = [[*
|
remind.doc = [[*
|
||||||
]]..config.cmd_pat..[[remind* _<Länge>_ _<Nachricht>_
|
]]..config.cmd_pat..[[remind* _<Länge>_ _<Nachricht>_
|
||||||
Erinnert dich in der angegeben Länge in Minuten an eine 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.]]
|
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)
|
remind.doc = remind.doc:format(
|
||||||
|
config.remind.max_length,
|
||||||
|
config.remind.max_duration,
|
||||||
|
config.remind.max_reminders_group,
|
||||||
|
config.remind.max_reminders_private
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
function remind:action(msg, config)
|
function remind:action(msg, config)
|
||||||
@ -49,10 +54,10 @@ function remind:action(msg, config)
|
|||||||
|
|
||||||
local chat_id_str = tostring(msg.chat.id)
|
local chat_id_str = tostring(msg.chat.id)
|
||||||
local output
|
local output
|
||||||
self.database.reminders[chat_id_str] = self.database.reminders[chat_id_str] or {}
|
self.database.remind[chat_id_str] = self.database.remind[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
|
if msg.chat.type == 'private' and utilities.table_size(self.database.remind[chat_id_str]) >= config.remind.max_reminders_private then
|
||||||
output = 'Sorry, du kannst keine Erinnerungen mehr hinzufügen.'
|
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
|
elseif msg.chat.type ~= 'private' and utilities.table_size(self.database.remind[chat_id_str]) >= config.remind.max_reminders_group then
|
||||||
output = 'Sorry, diese Gruppe kann keine Erinnerungen mehr hinzufügen.'
|
output = 'Sorry, diese Gruppe kann keine Erinnerungen mehr hinzufügen.'
|
||||||
else
|
else
|
||||||
-- Put together the reminder with the expiration, message, and message to reply to.
|
-- Put together the reminder with the expiration, message, and message to reply to.
|
||||||
@ -61,7 +66,7 @@ function remind:action(msg, config)
|
|||||||
time = timestamp,
|
time = timestamp,
|
||||||
message = message
|
message = message
|
||||||
}
|
}
|
||||||
table.insert(self.database.reminders[chat_id_str], reminder)
|
table.insert(self.database.remind[chat_id_str], reminder)
|
||||||
local human_readable_time = convert_timestamp(timestamp, '%H:%M:%S')
|
local human_readable_time = convert_timestamp(timestamp, '%H:%M:%S')
|
||||||
output = 'Ich werde dich um *'..human_readable_time..' Uhr* erinnern.'
|
output = 'Ich werde dich um *'..human_readable_time..' Uhr* erinnern.'
|
||||||
end
|
end
|
||||||
@ -71,13 +76,13 @@ end
|
|||||||
function remind:cron(config)
|
function remind:cron(config)
|
||||||
local time = os.time()
|
local time = os.time()
|
||||||
-- Iterate over the group entries in the reminders database.
|
-- Iterate over the group entries in the reminders database.
|
||||||
for chat_id, group in pairs(self.database.reminders) do
|
for chat_id, group in pairs(self.database.remind) do
|
||||||
-- Iterate over each reminder.
|
-- Iterate over each reminder.
|
||||||
for k, reminder in pairs(group) do
|
for k, reminder in pairs(group) do
|
||||||
-- If the reminder is past-due, send it and nullify it.
|
-- If the reminder is past-due, send it and nullify it.
|
||||||
-- Otherwise, add it to the replacement table.
|
-- Otherwise, add it to the replacement table.
|
||||||
if time > reminder.time then
|
if time > reminder.time then
|
||||||
local output = '*ERINNERUNG:*\n"' .. utilities.md_escape(reminder.message) .. '"'
|
local output = '<b>ERINNERUNG:</b>\n"'..utilities.html_escape(reminder.message)..'"'
|
||||||
local res = utilities.send_message(chat_id, output, true, nil, true)
|
local res = utilities.send_message(chat_id, output, true, nil, true)
|
||||||
-- If the message fails to send, save it for later (if enabled in config).
|
-- If the message fails to send, save it for later (if enabled in config).
|
||||||
if res or not config.remind.persist then
|
if res or not config.remind.persist then
|
||||||
|
@ -4,22 +4,9 @@
|
|||||||
|
|
||||||
Copyright 2016 topkecleon <drew@otou.to>
|
Copyright 2016 topkecleon <drew@otou.to>
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it
|
This code is licensed under the GNU AGPLv3. See /LICENSE for details.
|
||||||
under the terms of the GNU Affero General Public License version 3 as
|
|
||||||
published by the Free Software Foundation.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License
|
|
||||||
for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program; if not, write to the Free Software Foundation,
|
|
||||||
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
]]--
|
]]--
|
||||||
|
|
||||||
local utilities = {}
|
|
||||||
|
|
||||||
utf8 = require('lua-utf8')
|
utf8 = require('lua-utf8')
|
||||||
ltn12 = require('ltn12')
|
ltn12 = require('ltn12')
|
||||||
http = require('socket.http')
|
http = require('socket.http')
|
||||||
@ -36,6 +23,8 @@ helpers = require "OAuth.helpers"
|
|||||||
http.TIMEOUT = 10
|
http.TIMEOUT = 10
|
||||||
https.TIMEOUT = 10
|
https.TIMEOUT = 10
|
||||||
|
|
||||||
|
local utilities = {}
|
||||||
|
|
||||||
-- For the sake of ease to new contributors and familiarity to old contributors,
|
-- For the sake of ease to new contributors and familiarity to old contributors,
|
||||||
-- we'll provide a couple of aliases to real bindings here.
|
-- we'll provide a couple of aliases to real bindings here.
|
||||||
function utilities.send_message(chat_id, text, disable_web_page_preview, reply_to_message_id, use_markdown, reply_markup)
|
function utilities.send_message(chat_id, text, disable_web_page_preview, reply_to_message_id, use_markdown, reply_markup)
|
||||||
@ -295,7 +284,7 @@ end
|
|||||||
-- https://core.telegram.org/bots/api#answerinlinequery
|
-- https://core.telegram.org/bots/api#answerinlinequery
|
||||||
function utilities.answer_inline_query(inline_query, results, cache_time, is_personal, next_offset, switch_pm_text, switch_pm_parameter)
|
function utilities.answer_inline_query(inline_query, results, cache_time, is_personal, next_offset, switch_pm_text, switch_pm_parameter)
|
||||||
return bindings.request(
|
return bindings.request(
|
||||||
'answerInlineQuery',
|
'answerlineQuery',
|
||||||
{
|
{
|
||||||
inline_query_id = inline_query.id,
|
inline_query_id = inline_query.id,
|
||||||
results = results,
|
results = results,
|
||||||
@ -310,7 +299,7 @@ end
|
|||||||
|
|
||||||
function abort_inline_query(inline_query)
|
function abort_inline_query(inline_query)
|
||||||
return bindings.request(
|
return bindings.request(
|
||||||
'answerInlineQuery',
|
'answerlineQuery',
|
||||||
{
|
{
|
||||||
inline_query_id = inline_query.id,
|
inline_query_id = inline_query.id,
|
||||||
cache_time = 5,
|
cache_time = 5,
|
||||||
@ -461,7 +450,7 @@ end
|
|||||||
-- Get the number of values in a key/value table.
|
-- Get the number of values in a key/value table.
|
||||||
function utilities.table_size(tab)
|
function utilities.table_size(tab)
|
||||||
local i = 0
|
local i = 0
|
||||||
for _,_ in pairs(tab) do
|
for _ in pairs(tab) do
|
||||||
i = i + 1
|
i = i + 1
|
||||||
end
|
end
|
||||||
return i
|
return i
|
||||||
|
Reference in New Issue
Block a user