- Inline-Querys werden jetzt unterstützt!

-> Das erste Plugin mit Inline-Query-Support ist "Echo", das wie @bold funktioniert
-> Neue Variable zur Config hinzugefügt, mit der man bestimmen kann, ob nur whitelisted User oder alle Inline-Querys benutzen können
- AFK zeigt AFK-Text jetzt fett an
This commit is contained in:
Andreas Bielawski 2016-07-13 01:00:32 +02:00
parent d09ddc7520
commit 7ce4411a65
6 changed files with 87 additions and 23 deletions

View File

@ -21,6 +21,10 @@ Brawlbot v2 ist freie Software; du darfst in modifizieren und weiterverbreiten,
* * * * * *
# Für User # Für User
## Setup ## Setup
### Ubuntu und Debian
Ubuntu und Debian liefern Luarocks nur für Lua 5.1 aus. Um Luarocks für Lua 5.2 zu verwenden, folge bitte der [Anleitung auf StackOverflow](http://stackoverflow.com/a/20359102)
### Setup
Du benötigst **Lua 5.2+**, eine aktive **Redis-Instanz** und die folgenden **LuaRocks-Module**: Du benötigst **Lua 5.2+**, eine aktive **Redis-Instanz** und die folgenden **LuaRocks-Module**:
* luasocket * luasocket
* luasec * luasec
@ -28,6 +32,7 @@ Du benötigst **Lua 5.2+**, eine aktive **Redis-Instanz** und die folgenden **Lu
* dkjson * dkjson
* lpeg * lpeg
* redis-lua * redis-lua
* fakeredis
* oauth * oauth
* xml * xml
* feedparser * feedparser

View File

@ -21,6 +21,10 @@ Sende /hilfe, um zu starten
-- The symbol that starts a command. Usually noted as '/' in documentation. -- The symbol that starts a command. Usually noted as '/' in documentation.
cmd_pat = '/', cmd_pat = '/',
-- 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,
errors = { -- Generic error messages used in various plugins. errors = { -- Generic error messages used in various plugins.
generic = 'An unexpected error occurred.', generic = 'An unexpected error occurred.',
connection = 'Verbindungsfehler.', connection = 'Verbindungsfehler.',

View File

@ -76,15 +76,6 @@ function bot:init(config) -- The function run when the bot is started or reloade
end end
function bot:process_inline_query(inline_query, config) -- When an inline query is received
-- remove comment to enable debugging
if inline_query.query == '' then return end
local result, error = bindings.request(self, 'answerInlineQuery', {
inline_query_id = inline_query.id,
results = '[{"type":"article","id":"'..math.random(100000000000000000)..'","thumb_url":"https://anditest.perseus.uberspace.de/b.jpg","title":"Fett","description":"*'..inline_query.query..'*","input_message_content":{"message_text":"*'..inline_query.query..'*","parse_mode":"Markdown"}}]'
} )
end
function bot:on_msg_receive(msg, config) -- The fn run whenever a message is received. function bot:on_msg_receive(msg, config) -- The fn run whenever a message is received.
-- remove comment to enable debugging -- remove comment to enable debugging
-- vardump(msg) -- vardump(msg)
@ -152,6 +143,23 @@ function bot:on_callback_receive(callback, msg, config) -- whenever a new callba
end end
end end
-- 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
for _, plugin in ipairs(self.plugins) do
match_inline_plugins(self, inline_query, config, plugin)
end
end
function bot:run(config) function bot:run(config)
bot.init(self, config) -- Actually start the script. bot.init(self, config) -- Actually start the script.
@ -207,6 +215,26 @@ function pre_process_msg(self, msg, config)
return new_msg return new_msg
end end
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
print(plugin.name..' triggered')
return plugin.inline_callback(self, inline_query, config, matches)
end)
if not success then
print(result)
end
end
end
end
function match_plugins(self, msg, config, plugin) function match_plugins(self, msg, config, plugin)
for _, trigger in pairs(plugin.triggers or {}) do for _, trigger in pairs(plugin.triggers or {}) do
if string.match(msg.text_lower, trigger) then if string.match(msg.text_lower, trigger) then

View File

@ -95,7 +95,9 @@ function afk:pre_process(msg, self)
redis:hset(hash, 'afk', false) redis:hset(hash, 'afk', false)
if afk_text then if afk_text then
redis:hset(hash, 'afk_text', false) redis:hset(hash, 'afk_text', false)
utilities.send_message(self, msg.chat.id, user_name..' ist wieder da (war: '..afk_text..' für '..duration..')!') local afk_text = afk_text:gsub("%*","")
local afk_text = afk_text:gsub("_","")
utilities.send_message(self, msg.chat.id, user_name..' ist wieder da (war: *'..afk_text..'* für '..duration..')!', true, nil, true)
else else
utilities.send_message(self, msg.chat.id, user_name..' ist wieder da (war '..duration..' weg)!') utilities.send_message(self, msg.chat.id, user_name..' ist wieder da (war '..duration..' weg)!')
end end

View File

@ -6,14 +6,28 @@ echo.command = 'echo <Text>'
function echo:init(config) function echo:init(config)
echo.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('echo', true).table echo.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('echo', true).table
echo.inline_triggers = {
"^e (.*)"
}
echo.doc = [[* echo.doc = [[*
]]..config.cmd_pat..[[echo* _<Text>_: Gibt den Text aus]] ]]..config.cmd_pat..[[echo* _<Text>_: Gibt den Text aus]]
end end
function echo:inline_callback(inline_query, config, matches)
local text = matches[1]
local results = '['
-- enable custom markdown button
if text:match('%[.*%]%(.*%)') or text:match('%*.*%*') or text:match('_.*_') or text:match('`.*`') then
results = results..'{"type":"article","id":"'..math.random(100000000000000000)..'","thumb_url":"https://anditest.perseus.uberspace.de/inlineQuerys/echo/custom.jpg","title":"Eigenes Markdown","description":"'..text..'","input_message_content":{"message_text":"'..text..'","parse_mode":"Markdown"}},'
end
local results = results..'{"type":"article","id":"'..math.random(100000000000000000)..'","thumb_url":"https://anditest.perseus.uberspace.de/inlineQuerys/echo/fett.jpg","title":"Fett","description":"*'..text..'*","input_message_content":{"message_text":"*'..text..'*","parse_mode":"Markdown"}},{"type":"article","id":"'..math.random(100000000000000000)..'","thumb_url":"https://anditest.perseus.uberspace.de/inlineQuerys/echo/kursiv.jpg","title":"Kursiv","description":"_'..text..'_","input_message_content":{"message_text":"_'..text..'_","parse_mode":"Markdown"}},{"type":"article","id":"'..math.random(100000000000000000)..'","thumb_url":"https://anditest.perseus.uberspace.de/inlineQuerys/echo/fixedsys.jpg","title":"Feste Breite","description":"`'..text..'`","input_message_content":{"message_text":"`'..text..'`","parse_mode":"Markdown"}}]'
utilities.answer_inline_query(self, inline_query, results, 0)
end
function echo:action(msg) function echo:action(msg)
local input = utilities.input(msg.text) local input = utilities.input(msg.text)
if not input then if not input then
utilities.send_message(self, msg.chat.id, echo.doc, true, msg.message_id, true) utilities.send_message(self, msg.chat.id, echo.doc, true, msg.message_id, true)
else else
@ -23,8 +37,6 @@ function echo:action(msg)
end end
utilities.send_message(self, msg.chat.id, input, true, nil, true) utilities.send_message(self, msg.chat.id, input, true, nil, true)
end end
end end
return echo return echo

View File

@ -191,6 +191,19 @@ function utilities:get_chat_administrators(chat_id)
} ) } )
end end
-- 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)
return bindings.request(self, 'answerInlineQuery', {
inline_query_id = inline_query.id,
results = results,
cache_time = cache_time,
is_personal = is_personal,
next_offset = next_offset,
switch_pm_text = switch_pm_text,
switch_pm_parameter = switch_pm_parameter
} )
end
-- get the indexed word in a string -- get the indexed word in a string
function utilities.get_word(s, i) function utilities.get_word(s, i)
s = s or '' s = s or ''