- Portierung folgender Plugins:

+ QR
+ Random
- Remind eingedeutscht, funktioniert gut so, warum also das Rad neu erfinden?
This commit is contained in:
Andreas Bielawski 2016-06-19 22:39:47 +02:00
parent 4cbe28ea93
commit 16f4dd169d
3 changed files with 148 additions and 11 deletions

86
otouto/plugins/qr.lua Normal file
View File

@ -0,0 +1,86 @@
local qr = {}
local http = require('socket.http')
local URL = require('socket.url')
local utilities = require('otouto.utilities')
function qr:init(config)
qr.triggers = {
'^/qr "(%w+)" "(%w+)" (.+)$',
"^/qr (.+)$"
}
qr.doc = [[*
]]..config.cmd_pat..[[qr* _<Text>_: Sendet QR-Code mit diesem Text
*]]..config.cmd_pat..[[qr* _"[Hintergrundfarbe]"_ _"[Datenfarbe]"_ _[Text]_
Farbe mit Text: red|green|blue|purple|black|white|gray
Farbe als HEX: ("a56729" ist braun)
oder Farbe als Dezimalwert: ("255-192-203" ist pink)]]
end
qr.command = 'qr <Text>'
function qr:get_hex(str)
local colors = {
red = "f00",
blue = "00f",
green = "0f0",
yellow = "ff0",
purple = "f0f",
white = "fff",
black = "000",
gray = "ccc"
}
for color, value in pairs(colors) do
if color == str then
return value
end
end
return str
end
function qr:qr(text, color, bgcolor)
local url = "http://api.qrserver.com/v1/create-qr-code/?"
.."size=600x600" --fixed size otherways it's low detailed
.."&data="..URL.escape(utilities.trim(text))
if color then
url = url.."&color="..qr:get_hex(color)
end
if bgcolor then
url = url.."&bgcolor="..qr:get_hex(bgcolor)
end
local response, code, headers = http.request(url)
if code ~= 200 then
return nil
end
if #response > 0 then
return url
end
return nil
end
function qr:action(msg, config, matches)
local text = matches[1]
local color
local back
if #matches > 1 then
text = matches[3]
color = matches[2]
back = matches[1]
end
local image_url = qr:qr(text, color, back)
if not image_url then utilities.send_reply(self, msg, config.errors.connection) return end
local file = download_to_file(image_url, 'qr.png')
utilities.send_photo(self, msg.chat.id, file, nil, msg.message_id)
end
return qr

53
otouto/plugins/random.lua Normal file
View File

@ -0,0 +1,53 @@
local fun = {}
local utilities = require('otouto.utilities')
function fun:init(config)
fun.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('random', true).table
fun.doc = [[*
]]..config.cmd_pat..[[random* _<Username>_: Schau, was passiert!]]
end
fun.command = 'random <Username>'
function fun:choose_random(user_name, other_user)
randoms = {
user_name..' schlägt '..other_user..' mit einem stinkenden Fisch.',
user_name..' versucht, '..other_user..' mit einem Messer zu töten, bringt sich dabei aber selbst um.',
user_name..' versucht, '..other_user..' mit einem Messer zu töten, stolpert aber und schlitzt sich dabei das Knie auf.',
user_name..' ersticht '..other_user..'.',
user_name..' tritt '..other_user..'.',
user_name..' hat '..other_user..' umgebracht! Möge er in der Hölle schmoren!',
user_name..' hat die Schnauze voll von '..other_user..' und sperrt ihn in einen Schrank.',
user_name..' erwürgt '..other_user..'. BILD sprach als erstes mit der Hand.',
user_name..' schickt '..other_user..' nach /dev/null.',
user_name..' umarmt '..other_user..'.',
user_name..' verschenkt eine Kartoffel an '..other_user..'.',
user_name..' melkt '..other_user..'. *muuh* :D',
user_name..' wirft einen Gameboy auf '..other_user..'.',
user_name..' hetzt die NSA auf '..other_user..'.',
user_name..' ersetzt alle CDs von '..other_user..' durch Nickelback-CDs.',
}
math.randomseed(os.time())
math.randomseed(os.time())
local random = math.random(15)
return randoms[random]
end
function fun:action(msg, config, matches)
local input = utilities.input(msg.text)
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, fun.doc, true, msg.message_id, true)
return
end
end
local user_name = get_name(msg)
local result = fun:choose_random(user_name, input)
utilities.send_message(self, msg.chat.id, result)
end
return fun

View File

@ -2,16 +2,14 @@ local remind = {}
local utilities = require('otouto.utilities') local utilities = require('otouto.utilities')
remind.command = 'remind <duration> <message>' remind.command = 'remind <Länge> <Nachricht>'
function remind:init(config) function remind:init(config)
self.database.reminders = self.database.reminders or {} self.database.reminders = self.database.reminders 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 <duration> <message> ]]..config.cmd_pat..[[remind* _<Länge>_ _<Nachricht>_: Erinnert dich in X Minuten an die Nachricht]]
Repeats a message after a duration of time, in minutes.
```]]
end end
function remind:action(msg) function remind:action(msg)
@ -44,10 +42,10 @@ function remind:action(msg)
self.database.reminders[msg.chat.id_str] = self.database.reminders[msg.chat.id_str] or {} 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. -- 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 if msg.chat.type ~= 'private' and utilities.table_size(self.database.reminders[msg.chat.id_str]) > 9 then
utilities.send_reply(self, msg, 'Sorry, this group already has ten reminders.') utilities.send_reply(self, msg, 'Diese Gruppe hat schon zehn Erinnerungen!')
return return
elseif msg.chat.type == 'private' and utilities.table_size(self.database.reminders[msg.chat.id_str]) > 49 then elseif msg.chat.type == 'private' and utilities.table_size(self.database.reminders[msg.chat.id_str]) > 49 then
utilities.send_reply(msg, 'Sorry, you already have fifty reminders.') utilities.send_reply(msg, 'Du hast schon 50 Erinnerungen!')
return return
end end
-- 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.
@ -56,11 +54,11 @@ function remind:action(msg)
message = message message = message
} }
table.insert(self.database.reminders[msg.chat.id_str], reminder) table.insert(self.database.reminders[msg.chat.id_str], reminder)
local output = 'I will remind you in ' .. duration local output = 'Ich werde dich in ' .. duration
if duration == 1 then if duration == 1 then
output = output .. ' minute!' output = output .. ' Minute erinnern!'
else else
output = output .. ' minutes!' output = output .. ' Minuten erinnern!'
end end
utilities.send_reply(self, msg, output) utilities.send_reply(self, msg, output)
end end
@ -75,7 +73,7 @@ function remind:cron()
-- 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 = '*Reminder:*\n"' .. utilities.md_escape(reminder.message) .. '"' local output = '*ERINNERUNG:*\n"' .. utilities.md_escape(reminder.message) .. '"'
local res = utilities.send_message(self, chat_id, output, true, nil, true) local res = utilities.send_message(self, chat_id, output, true, nil, true)
-- If the message fails to send, save it for later. -- If the message fails to send, save it for later.
if not res then if not res then