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