From 01bdfab0aa61bf36047e71a895819a6241ea08ef Mon Sep 17 00:00:00 2001 From: Andreas Bielawski Date: Sun, 31 Jul 2016 20:20:44 +0200 Subject: [PATCH] =?UTF-8?q?Channel:=20Das=20Plugin=20nutzt=20jetzt=20match?= =?UTF-8?q?es,=20wobei=20sich=20der=20Code=20verringert=20und=20das=20ganz?= =?UTF-8?q?e=20jetzt=20=C3=BCbersichtlicher=20aussieht.=20InlineKeyboards?= =?UTF-8?q?=20mit=20URL-Buttons=20werden=20jetzt=20unterst=C3=BCtzt=20und?= =?UTF-8?q?=20k=C3=B6nnen=20an=20Gruppen=20gesendet=20werden!=20Yay!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- otouto/plugins/channel.lua | 91 ++++++++++++++++++++------------------ 1 file changed, 49 insertions(+), 42 deletions(-) diff --git a/otouto/plugins/channel.lua b/otouto/plugins/channel.lua index 00bb50a..9838083 100644 --- a/otouto/plugins/channel.lua +++ b/otouto/plugins/channel.lua @@ -5,59 +5,66 @@ local utilities = require('otouto.utilities') channel.command = 'ch \\n ' channel.doc = [[* -/ch*_ _ +/ch*_ _|_[Inline-Keyboard]_ __ Sendet eine Nachricht in den Kanal. Der Kanal kann per Username oder ID bestimmt werden, Markdown wird unterstützt. Du musst Administrator oder Besitzer des Kanals sein. - -Markdown-Syntax: - *Fetter Text* - _Kursiver Text_ - [Text](URL) - `Inline-Codeblock` - `‌`‌`Größere Code-Block über mehrere Zeilen`‌`‌` + +Inline-Keyboards sind OPTIONAL, in dem Falle einfach den Strich weglassen. Es werden NUR URL-Buttons unterstützt! Eine Beispielsyntax für einen Button findest du [auf GitHub](https://gist.githubusercontent.com/Brawl345/e671b60e24243da81934/raw/Inline-Keyboard.json). *Der Kanalname muss mit einem @ beginnen!*]] function channel:init(config) - channel.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('ch', true).table + channel.triggers = { + "^/ch @([A-Za-z0-9-_-]+)|(.+)\n(.*)", + "^/ch @([A-Za-z0-9-_-]+)\n(.*)" + } end function channel:action(msg, config) - local input = utilities.input(msg.text) - local output - if input then - local chat_id = utilities.get_word(input, 1) - local admin_list, t = bindings.getChatAdministrators(self, { chat_id = chat_id } ) - if admin_list then - local is_admin = false - for _, admin in ipairs(admin_list.result) do - if admin.user.id == msg.from.id then - is_admin = true - end - end - if is_admin then - local text = input:match('\n(.+)') - if text then - local success, result = utilities.send_message(self, chat_id, text, true, nil, true) - if success then - output = 'Deine Nachricht wurde versendet!' - else - output = 'Sorry, ich konnte deine Nachricht nicht senden.\n`' .. result.description .. '`' - end - else - output = 'Bitte gebe deine Nachricht ein. Markdown wird unterstützt.' - end - else - output = 'Es sieht nicht so aus, als wärst du der Administrator dieses Kanals.' - end - else - output = 'Sorry, ich konnte die Administratorenliste nicht abrufen. Falls du den Kanalnamen benutzt: Beginnt er mit einem @?\n`' .. t.description .. '`' - end - else - output = channel.doc + local input = utilities.input(msg.text) + local output + local chat_id = '@'..matches[1] + local admin_list, gca_results = utilities.get_chat_administrators(self, chat_id) + + if admin_list then + local is_admin = false + for _, admin in ipairs(admin_list.result) do + if admin.user.id == msg.from.id then + is_admin = true + end end - utilities.send_reply(self, msg, output, true) + if is_admin then + if matches[3] then + text = matches[3] + reply_markup = matches[2] + -- Yeah, channels don't allow this buttons currently, but when they're ready + -- this plugin will also be ready :P + -- Also, URL buttons work!? Maybe beta? + if reply_markup:match('"callback_data":"') then + utilities.send_reply(self, msg, 'callback_data ist in Buttons nicht erlaubt.') + return + elseif reply_markup:match('"switch_inline_query":"') then + utilities.send_reply(self, msg, 'switch_inline_query ist in Buttons nicht erlaubt.') + return + end + else + text = matches[2] + reply_markup = nil + end + local success, result = utilities.send_message(self, chat_id, text, true, nil, true, reply_markup) + if success then + output = 'Deine Nachricht wurde versendet!' + else + output = 'Sorry, ich konnte deine Nachricht nicht senden.\n`' .. result.description .. '`' + end + else + output = 'Es sieht nicht so aus, als wärst du der Administrator dieses Kanals.' + end + else + output = 'Sorry, ich konnte die Administratorenliste nicht abrufen!\n`'..gca_results.description..'`' + end + utilities.send_reply(self, msg, output, true) end return channel