Auf Upstream aktualisiert

This commit is contained in:
Andreas Bielawski 2016-06-17 13:58:26 +02:00
commit 515f994ae1
5 changed files with 99 additions and 92 deletions

View File

@ -18,6 +18,8 @@ otouto is free software; you are free to redistribute it and/or modify it under
| [Group Administration](#group-administration) | [Output style](#output-style) |
| [List of plugins](#list-of-plugins) | [Contributors](#contributors) |
* * *
## Setup
You _must_ have Lua (5.2+), luasocket, luasec, multipart-post, and dkjson installed. You should also have lpeg, though it is not required. It is recommended you install these with LuaRocks.
@ -192,6 +194,7 @@ Additionally, antiflood can be configured to automatically ban a user after he h
| `patterns.lua` | /s/from/to/ | Search-and-replace using Lua patterns. |
| `me.lua` | /me | Returns user-specific data stored by the bot. |
| `remind.lua` | /remind <duration> <message> | Reminds a user of something after a duration of minutes. |
| `channel.lua` | /ch <channel> \n <message> | Sends a markdown-enabled message to a channel. |
* * *
@ -286,7 +289,7 @@ Title lines should be **bold**, including any names and trailing punctuation (su
> **Star Wars: Episode IV - A New Hope (1977)**
>
> **Search results for** _star wars_**:**
> **Search results for** _star wars_ **:**
>
> **Changelog for otouto (**[Github](http://github.com/topkecleon/otouto)**):**

View File

@ -39,6 +39,9 @@
"/gadd 1 4 5" will add a grouo with the unlisted, antibot, and antiflood
flags.
1.10.4 - Kick notifications now include user IDs. Errors are silenced.
/flags can now be used with multiple arguments, similar to /gadd.
]]--
local JSON = require('dkjson')
@ -125,15 +128,15 @@ function administration.init_flags(cmd_pat) return {
} end
administration.antiflood = {
text = 10,
voice = 10,
audio = 10,
contact = 10,
photo = 20,
video = 20,
location = 20,
document = 20,
sticker = 30
text = 5,
voice = 5,
audio = 5,
contact = 5,
photo = 10,
video = 10,
location = 10,
document = 10,
sticker = 20
}
administration.ranks = {
@ -767,6 +770,38 @@ function administration.init_command(self_, config)
end
},
{ -- /setmotd
triggers = utilities.triggers(self_.info.username, config.cmd_pat):t('setmotd', true).table,
command = 'setmotd <motd>',
privilege = 2,
interior = true,
doc = 'Sets the group\'s message of the day. Markdown is supported. Pass "--" to delete the message.',
action = function(self, msg, group, config)
local input = utilities.input(msg.text)
if not input and msg.reply_to_message and msg.reply_to_message.text:len() > 0 then
input = msg.reply_to_message.text
end
if input then
if input == '--' or input == utilities.char.em_dash then
group.motd = nil
utilities.send_reply(self, msg, 'The MOTD has been cleared.')
else
input = utilities.trim(input)
group.motd = input
local output = '*MOTD for ' .. msg.chat.title .. ':*\n' .. input
utilities.send_message(self, msg.chat.id, output, true, nil, true)
end
if group.grouptype == 'supergroup' then
administration.update_desc(self, msg.chat.id, config)
end
else
utilities.send_reply(self, msg, 'Please specify the new message of the day.')
end
end
},
{ -- /setrules
triggers = utilities.triggers(self_.info.username, config.cmd_pat):t('setrules', true).table,
@ -834,38 +869,6 @@ function administration.init_command(self_, config)
end
},
{ -- /setmotd
triggers = utilities.triggers(self_.info.username, config.cmd_pat):t('setmotd', true).table,
command = 'setmotd <motd>',
privilege = 2,
interior = true,
doc = 'Sets the group\'s message of the day. Markdown is supported. Pass "--" to delete the message.',
action = function(self, msg, group, config)
local input = utilities.input(msg.text)
if not input and msg.reply_to_message and msg.reply_to_message.text:len() > 0 then
input = msg.reply_to_message.text
end
if input then
if input == '--' or input == utilities.char.em_dash then
group.motd = nil
utilities.send_reply(self, msg, 'The MOTD has been cleared.')
else
input = utilities.trim(input)
group.motd = input
local output = '*MOTD for ' .. msg.chat.title .. ':*\n' .. input
utilities.send_message(self, msg.chat.id, output, true, nil, true)
end
if group.grouptype == 'supergroup' then
administration.update_desc(self, msg.chat.id, config)
end
else
utilities.send_reply(self, msg, 'Please specify the new message of the day.')
end
end
},
{ -- /setlink
triggers = utilities.triggers(self_.info.username, config.cmd_pat):t('setlink', true).table,
@ -910,34 +913,40 @@ function administration.init_command(self_, config)
{ -- /flags
triggers = utilities.triggers(self_.info.username, config.cmd_pat):t('flags?', true).table,
command = 'flag \\[i]',
command = 'flag \\[i] ...',
privilege = 3,
interior = true,
doc = 'Returns a list of flags or toggles the specified flag.',
doc = 'Returns a list of flags or toggles the specified flags.',
action = function(self, msg, group, config)
local output = ''
local input = utilities.input(msg.text)
if input then
input = utilities.get_word(input, 1)
input = tonumber(input)
if not input or not administration.flags[input] then
local index = utilities.index(input)
for _, i in ipairs(index) do
n = tonumber(i)
if n and administration.flags[n] then
if group.flags[n] == true then
group.flags[n] = false
output = output .. administration.flags[n].disabled .. '\n'
else
group.flags[n] = true
output = output .. administration.flags[n].enabled .. '\n'
end
end
end
if output == '' then
input = false
end
end
if not input then
local output = '*Flags for ' .. msg.chat.title .. ':*\n'
for i,v in ipairs(administration.flags) do
output = '*Flags for ' .. msg.chat.title .. ':*\n'
for i, flag in ipairs(administration.flags) do
local status = group.flags[i] or false
output = output .. '`[' .. i .. ']` *' .. v.name .. '*` = ' .. tostring(status) .. '`\n' .. v.desc .. '\n'
output = output .. '*' .. i .. '. ' .. flag.name .. '* `[' .. tostring(status) .. ']`\n' .. flag.desc .. '\n'
end
utilities.send_message(self, msg.chat.id, output, true, nil, true)
elseif group.flags[input] == true then
group.flags[input] = false
utilities.send_reply(self, msg, administration.flags[input].disabled)
else
group.flags[input] = true
utilities.send_reply(self, msg, administration.flags[input].enabled)
end
utilities.send_message(self, msg.chat.id, output, true, nil, true)
end
},
@ -1208,10 +1217,10 @@ function administration.init_command(self_, config)
{ -- /gadd
triggers = utilities.triggers(self_.info.username, config.cmd_pat):t('gadd', true).table,
command = 'gadd [i] ...',
command = 'gadd \\[i] ...',
privilege = 5,
interior = false,
doc = 'Adds a group to the administration system. Pass numbers as arguments to enable those flags immediately. For example, this would add the group and enable the unlisted flag, antibot, and antiflood:\n/gadd 1 4 5',
doc = 'Adds a group to the administration system. Pass numbers as arguments to enable those flags immediately.\nExample usage:\n\t/gadd 1 4 5\nThis would add a group and enable the unlisted flag, antibot, and antiflood.',
action = function(self, msg, group, config)
if msg.chat.id == msg.from.id then
@ -1219,6 +1228,7 @@ function administration.init_command(self_, config)
elseif self.database.administration.groups[msg.chat.id_str] then
utilities.send_reply(self, msg, 'I am already administrating this group.')
else
local output = 'I am now administrating this group.'
local flags = {}
for i = 1, #administration.flags do
flags[i] = false
@ -1227,9 +1237,10 @@ function administration.init_command(self_, config)
if input then
local index = utilities.index(input)
for _, i in ipairs(index) do
i = tonumber(i)
if i and i < #administration.flags and i > 0 then
flags[i] = true
n = tonumber(i)
if n and administration.flags[n] and flags[n] ~= true then
flags[n] = true
output = output .. '\n' .. administration.flags[n].short
end
end
end
@ -1249,7 +1260,7 @@ function administration.init_command(self_, config)
}
administration.update_desc(self, msg.chat.id, config)
table.insert(self.database.administration.activity, msg.chat.id_str)
utilities.send_reply(self, msg, 'I am now administrating this group.')
utilities.send_reply(self, msg, output)
drua.channel_set_admin(msg.chat.id, self.info.id, 2)
end
end
@ -1334,18 +1345,6 @@ function administration.init_command(self_, config)
end
end
end
},
{ -- /buildwall :^)
triggers = utilities.triggers(self_.info.username, config.cmd_pat):t('buildwall').table,
privilege = 3,
interior = true,
action = function(self, msg, group, config)
for i = 2, 5 do
group.flags[i] = true
end
utilities.send_message(self, msg.chat.id, 'antisquig, antisquig++, antibot, and antiflood have been enabled.')
end
}
}

View File

@ -46,7 +46,7 @@ function control:action(msg, config)
for command in input:gmatch('(.-)\n') do
command = utilities.trim(command)
msg.text = command
bot.on_msg_receive(self, msg)
bot.on_msg_receive(self, msg, config)
end
end

View File

@ -24,25 +24,29 @@ function shout:action(msg)
end
end
input = utilities.trim(input)
if input:len() > 20 then
input = input:sub(1,20)
end
input = input:upper()
local output = ''
local inc = 0
for match in input:gmatch('([%z\1-\127\194-\244][\128-\191]*)') do
output = output .. match .. ' '
end
output = output .. '\n'
for match in input:sub(2):gmatch('([%z\1-\127\194-\244][\128-\191]*)') do
local spacing = ''
for _ = 1, inc do
spacing = spacing .. ' '
local ilen = 0
for match in input:gmatch(utilities.char.utf_8) do
if ilen < 20 then
ilen = ilen + 1
output = output .. match .. ' '
end
end
ilen = 0
output = output .. '\n'
for match in input:sub(2):gmatch(utilities.char.utf_8) do
if ilen < 19 then
local spacing = ''
for _ = 1, inc do
spacing = spacing .. ' '
end
inc = inc + 1
ilen = ilen + 1
output = output .. match .. ' ' .. spacing .. match .. '\n'
end
inc = inc + 1
output = output .. match .. ' ' .. spacing .. match .. '\n'
end
output = '```\n' .. utilities.trim(output) .. '\n```'
utilities.send_message(self, msg.chat.id, output, true, false, true)

View File

@ -586,7 +586,8 @@ utilities.char = {
arabic = '[\216-\219][\128-\191]',
rtl_override = '',
rtl_mark = '',
em_dash = ''
em_dash = '',
utf_8 = '([%z\1-\127\194-\244][\128-\191]*)',
}
-- Returns a table with matches or nil