otouto v3.12
Minor changes across the board. More planned. I also may have accidentally screwed with access permissions (so looks like every file is marked modified). Moved drua-tg.lua into the otouto/ directory. Added pokego-calculator.lua plugin (similar to pidgeycalc.com).
This commit is contained in:
parent
701f6bbd41
commit
b7c81c464f
0
.editorconfig
Normal file → Executable file
0
.editorconfig
Normal file → Executable file
1
.gitignore
vendored
Normal file → Executable file
1
.gitignore
vendored
Normal file → Executable file
@ -1,3 +1,4 @@
|
|||||||
otouto/plugins/mokubot*
|
otouto/plugins/mokubot*
|
||||||
|
otouto/plugins/oubot*
|
||||||
*.db
|
*.db
|
||||||
tg
|
tg
|
||||||
|
0
config.lua
Executable file → Normal file
0
config.lua
Executable file → Normal file
0
otouto/bindings.lua
Executable file → Normal file
0
otouto/bindings.lua
Executable file → Normal file
20
otouto/bot.lua
Executable file → Normal file
20
otouto/bot.lua
Executable file → Normal file
@ -4,7 +4,7 @@ local bot = {}
|
|||||||
local bindings -- Load Telegram bindings.
|
local bindings -- Load Telegram bindings.
|
||||||
local utilities -- Load miscellaneous and cross-plugin functions.
|
local utilities -- Load miscellaneous and cross-plugin functions.
|
||||||
|
|
||||||
bot.version = '3.11'
|
bot.version = '3.12'
|
||||||
|
|
||||||
function bot:init(config) -- The function run when the bot is started or reloaded.
|
function bot:init(config) -- The function run when the bot is started or reloaded.
|
||||||
|
|
||||||
@ -12,7 +12,7 @@ function bot:init(config) -- The function run when the bot is started or reloade
|
|||||||
utilities = require('otouto.utilities')
|
utilities = require('otouto.utilities')
|
||||||
|
|
||||||
assert(
|
assert(
|
||||||
config.bot_api_key and config.bot_api_key ~= '',
|
config.bot_api_key ~= '',
|
||||||
'You did not set your bot token in the config!'
|
'You did not set your bot token in the config!'
|
||||||
)
|
)
|
||||||
self.BASE_URL = 'https://api.telegram.org/bot' .. config.bot_api_key .. '/'
|
self.BASE_URL = 'https://api.telegram.org/bot' .. config.bot_api_key .. '/'
|
||||||
@ -29,21 +29,6 @@ function bot:init(config) -- The function run when the bot is started or reloade
|
|||||||
self.database = utilities.load_data(self.info.username..'.db')
|
self.database = utilities.load_data(self.info.username..'.db')
|
||||||
end
|
end
|
||||||
|
|
||||||
-- MIGRATION CODE 3.10 -> 3.11
|
|
||||||
if self.database.users and self.database.version ~= '3.11' then
|
|
||||||
self.database.userdata = {}
|
|
||||||
for id, user in pairs(self.database.users) do
|
|
||||||
self.database.userdata[id] = {}
|
|
||||||
self.database.userdata[id].nickname = user.nickname
|
|
||||||
self.database.userdata[id].lastfm = user.lastfm
|
|
||||||
user.nickname = nil
|
|
||||||
user.lastfm = nil
|
|
||||||
user.id_str = nil
|
|
||||||
user.name = nil
|
|
||||||
end
|
|
||||||
end
|
|
||||||
-- END MIGRATION CODE
|
|
||||||
|
|
||||||
-- Table to cache user info (usernames, IDs, etc).
|
-- Table to cache user info (usernames, IDs, etc).
|
||||||
self.database.users = self.database.users or {}
|
self.database.users = self.database.users or {}
|
||||||
-- Table to store userdata (nicknames, lastfm usernames, etc).
|
-- Table to store userdata (nicknames, lastfm usernames, etc).
|
||||||
@ -58,6 +43,7 @@ function bot:init(config) -- The function run when the bot is started or reloade
|
|||||||
local p = require('otouto.plugins.'..v)
|
local p = require('otouto.plugins.'..v)
|
||||||
table.insert(self.plugins, p)
|
table.insert(self.plugins, p)
|
||||||
if p.init then p.init(self, config) end
|
if p.init then p.init(self, config) end
|
||||||
|
if p.doc then p.doc = '```\n'..p.doc..'\n```' end
|
||||||
end
|
end
|
||||||
|
|
||||||
print('@' .. self.info.username .. ', AKA ' .. self.info.first_name ..' ('..self.info.id..')')
|
print('@' .. self.info.username .. ', AKA ' .. self.info.first_name ..' ('..self.info.id..')')
|
||||||
|
@ -1,14 +1,36 @@
|
|||||||
--[[
|
--[[
|
||||||
drua-tg
|
drua-tg
|
||||||
A fork of JuanPotato's lua-tg (https://github.com/juanpotato/lua-tg),
|
Based on JuanPotato's lua-tg (https://github.com/juanpotato/lua-tg),
|
||||||
modified to work more naturally from an API bot.
|
modified to work more naturally from an API bot.
|
||||||
|
|
||||||
Usage:
|
Usage:
|
||||||
drua = require('drua-tg')
|
drua = require('drua-tg')
|
||||||
drua.IP = 'localhost'
|
drua.IP = 'localhost' -- 'localhost' is default
|
||||||
drua.PORT = 4567
|
drua.PORT = 4567 -- 4567 is default
|
||||||
drua.message(chat_id, text)
|
drua.message(chat_id, text)
|
||||||
]]--
|
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2015-2016 Juan Potato
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
]]
|
||||||
|
|
||||||
local SOCKET = require('socket')
|
local SOCKET = require('socket')
|
||||||
|
|
2
otouto/plugins/about.lua
Executable file → Normal file
2
otouto/plugins/about.lua
Executable file → Normal file
@ -4,7 +4,7 @@ local bot = require('otouto.bot')
|
|||||||
local utilities = require('otouto.utilities')
|
local utilities = require('otouto.utilities')
|
||||||
|
|
||||||
about.command = 'about'
|
about.command = 'about'
|
||||||
about.doc = '`Returns information about the bot.`'
|
about.doc = 'Returns information about the bot.'
|
||||||
|
|
||||||
about.triggers = {
|
about.triggers = {
|
||||||
''
|
''
|
||||||
|
@ -19,10 +19,11 @@
|
|||||||
now support multiple arguments. Added get_targets function. No migration is
|
now support multiple arguments. Added get_targets function. No migration is
|
||||||
necessary.
|
necessary.
|
||||||
|
|
||||||
]]--
|
1.11.1 - Bugfixes. /hammer can now be used in PM.
|
||||||
|
]]
|
||||||
|
|
||||||
local JSON = require('dkjson')
|
local JSON = require('dkjson')
|
||||||
local drua = dofile('drua-tg.lua')
|
local drua = require('otouto.drua-tg')
|
||||||
local bindings = require('otouto.bindings')
|
local bindings = require('otouto.bindings')
|
||||||
local utilities = require('otouto.utilities')
|
local utilities = require('otouto.utilities')
|
||||||
|
|
||||||
@ -49,7 +50,7 @@ function administration:init(config)
|
|||||||
administration.flags = administration.init_flags(config.cmd_pat)
|
administration.flags = administration.init_flags(config.cmd_pat)
|
||||||
administration.init_command(self, config)
|
administration.init_command(self, config)
|
||||||
|
|
||||||
administration.doc = '`Returns a list of administrated groups.\nUse '..config.cmd_pat..'ahelp for more administrative commands.`'
|
administration.doc = 'Returns a list of administrated groups.\nUse '..config.cmd_pat..'ahelp for more administrative commands.'
|
||||||
administration.command = 'groups [query]'
|
administration.command = 'groups [query]'
|
||||||
|
|
||||||
-- In the worst case, don't send errors in reply to random messages.
|
-- In the worst case, don't send errors in reply to random messages.
|
||||||
@ -1199,7 +1200,9 @@ function administration.init_command(self_, config_)
|
|||||||
elseif target.rank >= administration.get_rank(self, msg.from.id, msg.chat.id, config) then
|
elseif target.rank >= administration.get_rank(self, msg.from.id, msg.chat.id, config) then
|
||||||
output = output .. target.name .. ' is too privileged to be globally banned.\n'
|
output = output .. target.name .. ' is too privileged to be globally banned.\n'
|
||||||
else
|
else
|
||||||
|
if group then
|
||||||
administration.kick_user(self, msg.chat.id, target.id, 'hammered by ' .. utilities.build_name(msg.from.first_name, msg.from.last_name), config)
|
administration.kick_user(self, msg.chat.id, target.id, 'hammered by ' .. utilities.build_name(msg.from.first_name, msg.from.last_name), config)
|
||||||
|
end
|
||||||
if #targets == 1 then
|
if #targets == 1 then
|
||||||
for k,v in pairs(self.database.administration.groups) do
|
for k,v in pairs(self.database.administration.groups) do
|
||||||
if not v.flags[6] then
|
if not v.flags[6] then
|
||||||
@ -1209,7 +1212,7 @@ function administration.init_command(self_, config_)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
self.database.blacklist[target.id_str] = true
|
self.database.blacklist[target.id_str] = true
|
||||||
if group.flags[6] == true then
|
if group and group.flags[6] == true then
|
||||||
group.mods[target.id_str] = nil
|
group.mods[target.id_str] = nil
|
||||||
group.bans[target.id_str] = true
|
group.bans[target.id_str] = true
|
||||||
output = output .. target.name .. ' has been globally and locally banned.\n'
|
output = output .. target.name .. ' has been globally and locally banned.\n'
|
||||||
|
13
otouto/plugins/apod.lua
Executable file → Normal file
13
otouto/plugins/apod.lua
Executable file → Normal file
@ -12,16 +12,17 @@ apod.command = 'apod [date]'
|
|||||||
function apod:init(config)
|
function apod:init(config)
|
||||||
apod.triggers = utilities.triggers(self.info.username, config.cmd_pat)
|
apod.triggers = utilities.triggers(self.info.username, config.cmd_pat)
|
||||||
:t('apod', true):t('apodhd', true):t('apodtext', true).table
|
:t('apod', true):t('apodhd', true):t('apodtext', true).table
|
||||||
apod.doc = [[```
|
apod.doc = config.cmd_pat .. [[apod [query]
|
||||||
]]..config.cmd_pat..[[apod [query]
|
|
||||||
Returns the Astronomy Picture of the Day.
|
Returns the Astronomy Picture of the Day.
|
||||||
If the query is a date, in the format YYYY-MM-DD, the APOD of that day is returned.
|
If the query is a date, in the format YYYY-MM-DD, the APOD of that day is returned.
|
||||||
]]..config.cmd_pat..[[apodhd [query]
|
Examples:
|
||||||
|
]] .. config.cmd_pat .. [[apodhd [query]
|
||||||
Returns the image in HD, if available.
|
Returns the image in HD, if available.
|
||||||
]]..config.cmd_pat..[[apodtext [query]
|
|
||||||
|
]] .. config.cmd_pat .. [[apodtext [query]
|
||||||
Returns the explanation of the APOD.
|
Returns the explanation of the APOD.
|
||||||
Source: nasa.gov
|
|
||||||
```]]
|
Source: nasa.gov]]
|
||||||
end
|
end
|
||||||
|
|
||||||
function apod:action(msg, config)
|
function apod:action(msg, config)
|
||||||
|
5
otouto/plugins/bandersnatch.lua
Executable file → Normal file
5
otouto/plugins/bandersnatch.lua
Executable file → Normal file
@ -6,10 +6,7 @@ bandersnatch.command = 'bandersnatch'
|
|||||||
|
|
||||||
function bandersnatch:init(config)
|
function bandersnatch:init(config)
|
||||||
bandersnatch.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('bandersnatch'):t('bc').table
|
bandersnatch.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('bandersnatch'):t('bc').table
|
||||||
bandersnatch.doc = [[```
|
bandersnatch.doc = 'Shun the frumious Bandersnatch. \nAlias: ' .. config.cmd_pat .. 'bc'
|
||||||
Shun the frumious Bandersnatch.
|
|
||||||
Alias: ]]..config.cmd_pat..[[bc
|
|
||||||
```]]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
local fullnames = { "Wimbledon Tennismatch", "Rinkydink Curdlesnoot", "Butawhiteboy Cantbekhan", "Benadryl Claritin", "Bombadil Rivendell", "Wanda's Crotchfruit", "Biblical Concubine", "Syphilis Cankersore", "Buckminster Fullerene", "Bourgeoisie Capitalist" }
|
local fullnames = { "Wimbledon Tennismatch", "Rinkydink Curdlesnoot", "Butawhiteboy Cantbekhan", "Benadryl Claritin", "Bombadil Rivendell", "Wanda's Crotchfruit", "Biblical Concubine", "Syphilis Cankersore", "Buckminster Fullerene", "Bourgeoisie Capitalist" }
|
||||||
|
6
otouto/plugins/bible.lua
Executable file → Normal file
6
otouto/plugins/bible.lua
Executable file → Normal file
@ -12,11 +12,9 @@ function bible:init(config)
|
|||||||
end
|
end
|
||||||
|
|
||||||
bible.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('bible', true):t('b', true).table
|
bible.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('bible', true):t('b', true).table
|
||||||
bible.doc = [[```
|
bible.doc = config.cmd_pat .. [[bible <reference>
|
||||||
]]..config.cmd_pat..[[bible <reference>
|
|
||||||
Returns a verse from the American Standard Version of the Bible, or an apocryphal verse from the King James Version. Results from biblia.com.
|
Returns a verse from the American Standard Version of the Bible, or an apocryphal verse from the King James Version. Results from biblia.com.
|
||||||
Alias: ]]..config.cmd_pat..[[b
|
Alias: ]] .. config.cmd_pat .. 'b'
|
||||||
```]]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
bible.command = 'bible <reference>'
|
bible.command = 'bible <reference>'
|
||||||
|
@ -11,11 +11,6 @@ local ltn12 = require('ltn12')
|
|||||||
local utilities = require('otouto.utilities')
|
local utilities = require('otouto.utilities')
|
||||||
|
|
||||||
bing.command = 'bing <query>'
|
bing.command = 'bing <query>'
|
||||||
bing.doc = [[```
|
|
||||||
/bing <query>
|
|
||||||
Returns the top web search results from Bing.
|
|
||||||
Aliases: /g, /google
|
|
||||||
```]]
|
|
||||||
|
|
||||||
bing.search_url = 'https://api.datamarket.azure.com/Data.ashx/Bing/Search/Web?Query=\'%s\'&$format=json'
|
bing.search_url = 'https://api.datamarket.azure.com/Data.ashx/Bing/Search/Web?Query=\'%s\'&$format=json'
|
||||||
|
|
||||||
@ -26,6 +21,9 @@ function bing:init(config)
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
bing.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('bing', true):t('g', true):t('google', true).table
|
bing.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('bing', true):t('g', true):t('google', true).table
|
||||||
|
bing.doc = config.cmd_pat .. [[bing <query>
|
||||||
|
Returns the top web search results from Bing.
|
||||||
|
Aliases: ]] .. config.cmd_pat .. 'g, ' .. config.cmd_pat .. 'google'
|
||||||
end
|
end
|
||||||
|
|
||||||
function bing:action(msg, config)
|
function bing:action(msg, config)
|
||||||
|
4
otouto/plugins/blacklist.lua
Executable file → Normal file
4
otouto/plugins/blacklist.lua
Executable file → Normal file
@ -93,7 +93,7 @@ function blacklist:action(msg, config)
|
|||||||
self.database.blacklist[target.id_str] = true
|
self.database.blacklist[target.id_str] = true
|
||||||
output = output .. target.name .. ' is now blacklisted.\n'
|
output = output .. target.name .. ' is now blacklisted.\n'
|
||||||
if config.drua_block_on_blacklist and target.id > 0 then
|
if config.drua_block_on_blacklist and target.id > 0 then
|
||||||
require('drua-tg').block(target.id)
|
require('otouto.drua-tg').block(target.id)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -107,7 +107,7 @@ function blacklist:action(msg, config)
|
|||||||
self.database.blacklist[target.id_str] = nil
|
self.database.blacklist[target.id_str] = nil
|
||||||
output = output .. target.name .. ' is no longer blacklisted.\n'
|
output = output .. target.name .. ' is no longer blacklisted.\n'
|
||||||
if config.drua_block_on_blacklist and target.id > 0 then
|
if config.drua_block_on_blacklist and target.id > 0 then
|
||||||
require('drua-tg').unblock(target.id)
|
require('otouto.drua-tg').unblock(target.id)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
6
otouto/plugins/calc.lua
Executable file → Normal file
6
otouto/plugins/calc.lua
Executable file → Normal file
@ -8,10 +8,8 @@ calc.command = 'calc <expression>'
|
|||||||
|
|
||||||
function calc:init(config)
|
function calc:init(config)
|
||||||
calc.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('calc', true).table
|
calc.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('calc', true).table
|
||||||
calc.doc = [[```
|
calc.doc = config.cmd_pat .. [[calc <expression>
|
||||||
]]..config.cmd_pat..[[calc <expression>
|
Returns solutions to mathematical expressions and conversions between common units. Results provided by mathjs.org.]]
|
||||||
Returns solutions to mathematical expressions and conversions between common units. Results provided by mathjs.org.
|
|
||||||
```]]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function calc:action(msg, config)
|
function calc:action(msg, config)
|
||||||
|
2
otouto/plugins/cats.lua
Executable file → Normal file
2
otouto/plugins/cats.lua
Executable file → Normal file
@ -13,7 +13,7 @@ function cats:init(config)
|
|||||||
end
|
end
|
||||||
|
|
||||||
cats.command = 'cat'
|
cats.command = 'cat'
|
||||||
cats.doc = '`Returns a cat!`'
|
cats.doc = 'Returns a cat!'
|
||||||
|
|
||||||
function cats:action(msg, config)
|
function cats:action(msg, config)
|
||||||
|
|
||||||
|
@ -3,9 +3,10 @@ local channel = {}
|
|||||||
local bindings = require('otouto.bindings')
|
local bindings = require('otouto.bindings')
|
||||||
local utilities = require('otouto.utilities')
|
local utilities = require('otouto.utilities')
|
||||||
|
|
||||||
--channel.command = 'ch <channel> \\n <message>'
|
function channel:init(config)
|
||||||
channel.doc = [[```
|
channel.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('ch', true).table
|
||||||
/ch <channel>
|
channel.command = 'ch <channel> \\n <message>'
|
||||||
|
channel.doc = config.cmd_pat .. [[ch <channel>
|
||||||
<message>
|
<message>
|
||||||
|
|
||||||
Sends a message to a channel. Channel may be specified via ID or username. Messages are markdown-enabled. Users may only send messages to channels for which they are the owner or an administrator.
|
Sends a message to a channel. Channel may be specified via ID or username. Messages are markdown-enabled. Users may only send messages to channels for which they are the owner or an administrator.
|
||||||
@ -15,13 +16,7 @@ The following markdown syntax is supported:
|
|||||||
_italic text_
|
_italic text_
|
||||||
[text](URL)
|
[text](URL)
|
||||||
`inline fixed-width code`
|
`inline fixed-width code`
|
||||||
```pre-formatted fixed-width code block```
|
```pre-formatted fixed-width code block```]]
|
||||||
|
|
||||||
Due to the frequent dysfunction and incompletion of the API method used to determine the administrators of a channel, this command may not work for the owners of some channels.
|
|
||||||
```]]
|
|
||||||
|
|
||||||
function channel:init(config)
|
|
||||||
channel.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('ch', true).table
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function channel:action(msg, config)
|
function channel:action(msg, config)
|
||||||
@ -51,7 +46,7 @@ function channel:action(msg, config)
|
|||||||
output = 'Please enter a message to be sent. Markdown is supported.'
|
output = 'Please enter a message to be sent. Markdown is supported.'
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
output = 'Sorry, you do not appear to be an administrator for that channel.\nThere is currently a known bug in the getChatAdministrators method, where administrator lists will often not show a channel\'s owner.'
|
output = 'Sorry, you do not appear to be an administrator for that channel.'
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
output = 'Sorry, I was unable to retrieve a list of administrators for that channel.\n`' .. t.description .. '`'
|
output = 'Sorry, I was unable to retrieve a list of administrators for that channel.\n`' .. t.description .. '`'
|
||||||
|
0
otouto/plugins/chatter.lua
Executable file → Normal file
0
otouto/plugins/chatter.lua
Executable file → Normal file
2
otouto/plugins/commit.lua
Executable file → Normal file
2
otouto/plugins/commit.lua
Executable file → Normal file
@ -5,7 +5,7 @@ local commit = {}
|
|||||||
local utilities = require('otouto.utilities')
|
local utilities = require('otouto.utilities')
|
||||||
|
|
||||||
commit.command = 'commit'
|
commit.command = 'commit'
|
||||||
commit.doc = '`Returns a commit message from whatthecommit.com.`'
|
commit.doc = 'Returns a commit message from whatthecommit.com.'
|
||||||
|
|
||||||
function commit:init(config)
|
function commit:init(config)
|
||||||
commit.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('commit').table
|
commit.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('commit').table
|
||||||
|
@ -27,6 +27,7 @@ function control:action(msg, config)
|
|||||||
end
|
end
|
||||||
package.loaded['otouto.bindings'] = nil
|
package.loaded['otouto.bindings'] = nil
|
||||||
package.loaded['otouto.utilities'] = nil
|
package.loaded['otouto.utilities'] = nil
|
||||||
|
package.loaded['otouto.drua-tg'] = nil
|
||||||
package.loaded['config'] = nil
|
package.loaded['config'] = nil
|
||||||
if not msg.text_lower:match('%-config') then
|
if not msg.text_lower:match('%-config') then
|
||||||
for k, v in pairs(require('config')) do
|
for k, v in pairs(require('config')) do
|
||||||
|
8
otouto/plugins/currency.lua
Executable file → Normal file
8
otouto/plugins/currency.lua
Executable file → Normal file
@ -7,12 +7,10 @@ currency.command = 'cash [amount] <from> to <to>'
|
|||||||
|
|
||||||
function currency:init(config)
|
function currency:init(config)
|
||||||
currency.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('cash', true).table
|
currency.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('cash', true).table
|
||||||
currency.doc = [[```
|
currency.doc = config.cmd_pat .. [[cash [amount] <from> to <to>
|
||||||
]]..config.cmd_pat..[[cash [amount] <from> to <to>
|
Example: ]] .. config.cmd_pat .. [[cash 5 USD to EUR
|
||||||
Example: ]]..config.cmd_pat..[[cash 5 USD to EUR
|
|
||||||
Returns exchange rates for various currencies.
|
Returns exchange rates for various currencies.
|
||||||
Source: Google Finance.
|
Source: Google Finance.]]
|
||||||
```]]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function currency:action(msg, config)
|
function currency:action(msg, config)
|
||||||
|
6
otouto/plugins/dice.lua
Executable file → Normal file
6
otouto/plugins/dice.lua
Executable file → Normal file
@ -6,10 +6,8 @@ dice.command = 'roll <nDr>'
|
|||||||
|
|
||||||
function dice:init(config)
|
function dice:init(config)
|
||||||
dice.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('roll', true).table
|
dice.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('roll', true).table
|
||||||
dice.doc = [[```
|
dice.doc = config.cmd_pat .. [[roll <nDr>
|
||||||
]]..config.cmd_pat..[[roll <nDr>
|
Returns a set of dice rolls, where n is the number of rolls and r is the range. If only a range is given, returns only one roll.]]
|
||||||
Returns a set of dice rolls, where n is the number of rolls and r is the range. If only a range is given, returns only one roll.
|
|
||||||
```]]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function dice:action(msg)
|
function dice:action(msg)
|
||||||
|
@ -9,12 +9,10 @@ dilbert.command = 'dilbert [date]'
|
|||||||
|
|
||||||
function dilbert:init(config)
|
function dilbert:init(config)
|
||||||
dilbert.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('dilbert', true).table
|
dilbert.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('dilbert', true).table
|
||||||
dilbert.doc = [[```
|
dilbert.doc = config.cmd_pat .. [[dilbert [YYYY-MM-DD]
|
||||||
]]..config.cmd_pat..[[dilbert [YYYY-MM-DD]
|
|
||||||
Returns the latest Dilbert strip or that of the provided date.
|
Returns the latest Dilbert strip or that of the provided date.
|
||||||
Dates before the first strip will return the first strip. Dates after the last trip will return the last strip.
|
Dates before the first strip will return the first strip. Dates after the last trip will return the last strip.
|
||||||
Source: dilbert.com
|
Source: dilbert.com]]
|
||||||
```]]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function dilbert:action(msg, config)
|
function dilbert:action(msg, config)
|
||||||
|
5
otouto/plugins/echo.lua
Executable file → Normal file
5
otouto/plugins/echo.lua
Executable file → Normal file
@ -6,10 +6,7 @@ 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.doc = [[```
|
echo.doc = config.cmd_pat .. 'echo <text> \nRepeats a string of text.'
|
||||||
]]..config.cmd_pat..[[echo <text>
|
|
||||||
Repeats a string of text.
|
|
||||||
```]]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function echo:action(msg)
|
function echo:action(msg)
|
||||||
|
2
otouto/plugins/eightball.lua
Executable file → Normal file
2
otouto/plugins/eightball.lua
Executable file → Normal file
@ -3,7 +3,7 @@ local eightball = {}
|
|||||||
local utilities = require('otouto.utilities')
|
local utilities = require('otouto.utilities')
|
||||||
|
|
||||||
eightball.command = '8ball'
|
eightball.command = '8ball'
|
||||||
eightball.doc = '`Returns an answer from a magic 8-ball!`'
|
eightball.doc = 'Returns an answer from a magic 8-ball!'
|
||||||
|
|
||||||
function eightball:init(config)
|
function eightball:init(config)
|
||||||
eightball.triggers = utilities.triggers(self.info.username, config.cmd_pat,
|
eightball.triggers = utilities.triggers(self.info.username, config.cmd_pat,
|
||||||
|
2
otouto/plugins/fortune.lua
Executable file → Normal file
2
otouto/plugins/fortune.lua
Executable file → Normal file
@ -16,7 +16,7 @@ function fortune:init(config)
|
|||||||
end
|
end
|
||||||
|
|
||||||
fortune.command = 'fortune'
|
fortune.command = 'fortune'
|
||||||
fortune.doc = '`Returns a UNIX fortune.`'
|
fortune.doc = 'Returns a UNIX fortune.'
|
||||||
|
|
||||||
function fortune:action(msg)
|
function fortune:action(msg)
|
||||||
|
|
||||||
|
8
otouto/plugins/gImages.lua
Executable file → Normal file
8
otouto/plugins/gImages.lua
Executable file → Normal file
@ -20,11 +20,9 @@ function gImages:init(config)
|
|||||||
end
|
end
|
||||||
|
|
||||||
gImages.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('image', true):t('i', true):t('insfw', true).table
|
gImages.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('image', true):t('i', true):t('insfw', true).table
|
||||||
gImages.doc = [[```
|
gImages.doc = config.cmd_pat .. [[image <query>
|
||||||
]]..config.cmd_pat..[[image <query>
|
Returns a randomized top result from Google Images. Safe search is enabled by default; use "]] .. config.cmd_pat .. [[insfw" to disable it. NSFW results will not display an image preview.
|
||||||
Returns a randomized top result from Google Images. Safe search is enabled by default; use "]]..config.cmd_pat..[[insfw" to disable it. NSFW results will not display an image preview.
|
Alias: ]] .. config.cmd_pat .. 'i'
|
||||||
Alias: ]]..config.cmd_pat..[[i
|
|
||||||
```]]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
gImages.command = 'image <query>'
|
gImages.command = 'image <query>'
|
||||||
|
6
otouto/plugins/gMaps.lua
Executable file → Normal file
6
otouto/plugins/gMaps.lua
Executable file → Normal file
@ -7,11 +7,9 @@ gMaps.command = 'location <query>'
|
|||||||
|
|
||||||
function gMaps:init(config)
|
function gMaps:init(config)
|
||||||
gMaps.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('location', true):t('loc', true).table
|
gMaps.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('location', true):t('loc', true).table
|
||||||
gMaps.doc = [[```
|
gMaps.doc = config.cmd_pat .. [[location <query>
|
||||||
]]..config.cmd_pat..[[location <query>
|
|
||||||
Returns a location from Google Maps.
|
Returns a location from Google Maps.
|
||||||
Alias: ]]..config.cmd_pat..[[loc
|
Alias: ]] .. config.cmd_pat .. 'loc'
|
||||||
```]]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function gMaps:action(msg, config)
|
function gMaps:action(msg, config)
|
||||||
|
8
otouto/plugins/gSearch.lua
Executable file → Normal file
8
otouto/plugins/gSearch.lua
Executable file → Normal file
@ -9,11 +9,9 @@ gSearch.command = 'google <query>'
|
|||||||
|
|
||||||
function gSearch:init(config)
|
function gSearch:init(config)
|
||||||
gSearch.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('g', true):t('google', true):t('gnsfw', true).table
|
gSearch.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('g', true):t('google', true):t('gnsfw', true).table
|
||||||
gSearch.doc = [[```
|
gSearch.doc = config.cmd_pat .. [[google <query>
|
||||||
]]..config.cmd_pat..[[google <query>
|
Returns four (if group) or eight (if private message) results from Google. Safe search is enabled by default, use "]] .. config.cmd_pat .. [[gnsfw" to disable it.
|
||||||
Returns four (if group) or eight (if private message) results from Google. Safe search is enabled by default, use "]]..config.cmd_pat..[[gnsfw" to disable it.
|
Alias: ]] .. config.cmd_pat .. 'g'
|
||||||
Alias: ]]..config.cmd_pat..[[g
|
|
||||||
```]]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function gSearch:action(msg, config)
|
function gSearch:action(msg, config)
|
||||||
|
0
otouto/plugins/greetings.lua
Executable file → Normal file
0
otouto/plugins/greetings.lua
Executable file → Normal file
6
otouto/plugins/hackernews.lua
Executable file → Normal file
6
otouto/plugins/hackernews.lua
Executable file → Normal file
@ -9,10 +9,8 @@ hackernews.command = 'hackernews'
|
|||||||
|
|
||||||
function hackernews:init(config)
|
function hackernews:init(config)
|
||||||
hackernews.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('hackernews', true):t('hn', true).table
|
hackernews.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('hackernews', true):t('hn', true).table
|
||||||
hackernews.doc = [[```
|
hackernews.doc = [[Returns four (if group) or eight (if private message) top stories from Hacker News.
|
||||||
Returns four (if group) or eight (if private message) top stories from Hacker News.
|
Alias: ]] .. config.cmd_pat .. 'hn'
|
||||||
Alias: ]]..config.cmd_pat..[[hn
|
|
||||||
```]]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function hackernews:action(msg, config)
|
function hackernews:action(msg, config)
|
||||||
|
6
otouto/plugins/hearthstone.lua
Executable file → Normal file
6
otouto/plugins/hearthstone.lua
Executable file → Normal file
@ -37,11 +37,9 @@ function hearthstone:init(config)
|
|||||||
end
|
end
|
||||||
|
|
||||||
hearthstone.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('hearthstone', true):t('hs').table
|
hearthstone.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('hearthstone', true):t('hs').table
|
||||||
hearthstone.doc = [[```
|
hearthstone.doc = config.cmd_pat .. [[hearthstone <query>
|
||||||
]]..config.cmd_pat..[[hearthstone <query>
|
|
||||||
Returns Hearthstone card info.
|
Returns Hearthstone card info.
|
||||||
Alias: ]]..config.cmd_pat..[[hs
|
Alias: ]] .. config.cmd_pat .. 'hs'
|
||||||
```]]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
hearthstone.command = 'hearthstone <query>'
|
hearthstone.command = 'hearthstone <query>'
|
||||||
|
41
otouto/plugins/help.lua
Executable file → Normal file
41
otouto/plugins/help.lua
Executable file → Normal file
@ -8,54 +8,45 @@ local utilities = require('otouto.utilities')
|
|||||||
local help_text
|
local help_text
|
||||||
|
|
||||||
function help:init(config)
|
function help:init(config)
|
||||||
|
|
||||||
local commandlist = {}
|
local commandlist = {}
|
||||||
help_text = '*Available commands:*\n• '..config.cmd_pat
|
help_text = '*Available commands:*\n• '..config.cmd_pat
|
||||||
|
|
||||||
for _,plugin in ipairs(self.plugins) do
|
for _,plugin in ipairs(self.plugins) do
|
||||||
if plugin.command then
|
if plugin.command then
|
||||||
table.insert(commandlist, plugin.command)
|
table.insert(commandlist, plugin.command)
|
||||||
--help_text = help_text .. '\n• '..config.cmd_pat .. plugin.command:gsub('%[', '\\[')
|
if plugin.doc then
|
||||||
|
plugin.help_word = utilities.get_word(plugin.command, 1)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
table.insert(commandlist, 'help [command]')
|
table.insert(commandlist, 'help [command]')
|
||||||
table.sort(commandlist)
|
table.sort(commandlist)
|
||||||
|
|
||||||
help_text = help_text .. table.concat(commandlist, '\n• '..config.cmd_pat) .. '\nArguments: <required> [optional]'
|
help_text = help_text .. table.concat(commandlist, '\n• '..config.cmd_pat) .. '\nArguments: <required> [optional]'
|
||||||
|
|
||||||
help_text = help_text:gsub('%[', '\\[')
|
help_text = help_text:gsub('%[', '\\[')
|
||||||
|
|
||||||
help.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('help', true):t('h', true).table
|
help.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('help', true):t('h', true).table
|
||||||
|
help.doc = config.cmd_pat .. 'help [command] \nReturns usage information for a given command.'
|
||||||
end
|
end
|
||||||
|
|
||||||
function help:action(msg)
|
function help:action(msg)
|
||||||
|
|
||||||
local input = utilities.input(msg.text_lower)
|
local input = utilities.input(msg.text_lower)
|
||||||
|
if input then
|
||||||
-- Attempts to send the help message via PM.
|
for _,plugin in ipairs(self.plugins) do
|
||||||
-- If msg is from a group, it tells the group whether the PM was successful.
|
if plugin.help_word == input:gsub('^/', '') then
|
||||||
if not input then
|
local output = '*Help for* _' .. plugin.help_word .. '_ *:*\n' .. plugin.doc
|
||||||
|
utilities.send_message(self, msg.chat.id, output, true, nil, true)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
utilities.send_reply(self, msg, 'Sorry, there is no help for that command.')
|
||||||
|
else
|
||||||
|
-- Attempt to send the help message via PM.
|
||||||
|
-- If msg is from a group, tell the group whether the PM was successful.
|
||||||
local res = utilities.send_message(self, msg.from.id, help_text, true, nil, true)
|
local res = utilities.send_message(self, msg.from.id, help_text, true, nil, true)
|
||||||
if not res then
|
if not res then
|
||||||
utilities.send_reply(self, msg, 'Please [message me privately](http://telegram.me/' .. self.info.username .. '?start=help) for a list of commands.', true)
|
utilities.send_reply(self, msg, 'Please [message me privately](http://telegram.me/' .. self.info.username .. '?start=help) for a list of commands.', true)
|
||||||
elseif msg.chat.type ~= 'private' then
|
elseif msg.chat.type ~= 'private' then
|
||||||
utilities.send_reply(self, msg, 'I have sent you the requested information in a private message.')
|
utilities.send_reply(self, msg, 'I have sent you the requested information in a private message.')
|
||||||
end
|
end
|
||||||
return
|
|
||||||
end
|
end
|
||||||
|
|
||||||
for _,plugin in ipairs(self.plugins) do
|
|
||||||
if plugin.command and utilities.get_word(plugin.command, 1) == input and plugin.doc then
|
|
||||||
local output = '*Help for* _' .. utilities.get_word(plugin.command, 1) .. '_ *:*\n' .. plugin.doc
|
|
||||||
utilities.send_message(self, msg.chat.id, output, true, nil, true)
|
|
||||||
return
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
utilities.send_reply(self, msg, 'Sorry, there is no help for that command.')
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
return help
|
return help
|
||||||
|
5
otouto/plugins/imdb.lua
Executable file → Normal file
5
otouto/plugins/imdb.lua
Executable file → Normal file
@ -9,10 +9,7 @@ imdb.command = 'imdb <query>'
|
|||||||
|
|
||||||
function imdb:init(config)
|
function imdb:init(config)
|
||||||
imdb.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('imdb', true).table
|
imdb.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('imdb', true).table
|
||||||
imdb.doc = [[```
|
imdb.doc = config.cmd_pat .. 'imdb <query> \nReturns an IMDb entry.'
|
||||||
]]..config.cmd_pat..[[imdb <query>
|
|
||||||
Returns an IMDb entry.
|
|
||||||
```]]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function imdb:action(msg, config)
|
function imdb:action(msg, config)
|
||||||
|
8
otouto/plugins/lastfm.lua
Executable file → Normal file
8
otouto/plugins/lastfm.lua
Executable file → Normal file
@ -16,13 +16,11 @@ function lastfm:init(config)
|
|||||||
end
|
end
|
||||||
|
|
||||||
lastfm.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('lastfm', true):t('np', true):t('fmset', true).table
|
lastfm.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('lastfm', true):t('np', true):t('fmset', true).table
|
||||||
lastfm.doc = [[```
|
lastfm.doc = config.cmd_pat .. [[np [username]
|
||||||
]]..config.cmd_pat..[[np [username]
|
|
||||||
Returns what you are or were last listening to. If you specify a username, info will be returned for that username.
|
Returns what you are or were last listening to. If you specify a username, info will be returned for that username.
|
||||||
|
|
||||||
]]..config.cmd_pat..[[fmset <username>
|
]] .. config.cmd_pat .. [[fmset <username>
|
||||||
Sets your last.fm username. Otherwise, ]]..config.cmd_pat..[[np will use your Telegram username. Use "]]..config.cmd_pat..[[fmset --" to delete it.
|
Sets your last.fm username. Otherwise, ]] .. config.cmd_pat .. [[np will use your Telegram username. Use "]] .. config.cmd_pat .. [[fmset --" to delete it.]]
|
||||||
```]]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
lastfm.command = 'lastfm'
|
lastfm.command = 'lastfm'
|
||||||
|
@ -5,7 +5,7 @@ local utilities = require('otouto.utilities')
|
|||||||
function me:init(config)
|
function me:init(config)
|
||||||
me.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('me', true).table
|
me.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('me', true).table
|
||||||
me.command = 'me'
|
me.command = 'me'
|
||||||
me.doc = '`Returns userdata stored by the bot.`'
|
me.doc = 'Returns userdata stored by the bot.'
|
||||||
end
|
end
|
||||||
|
|
||||||
function me:action(msg, config)
|
function me:action(msg, config)
|
||||||
|
6
otouto/plugins/nick.lua
Executable file → Normal file
6
otouto/plugins/nick.lua
Executable file → Normal file
@ -6,10 +6,8 @@ nick.command = 'nick <nickname>'
|
|||||||
|
|
||||||
function nick:init(config)
|
function nick:init(config)
|
||||||
nick.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('nick', true).table
|
nick.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('nick', true).table
|
||||||
nick.doc = [[```
|
nick.doc = config.cmd_pat .. [[nick <nickname>
|
||||||
]]..config.cmd_pat..[[nick <nickname>
|
Set your nickname. Use "]] .. config.cmd_pat .. 'nick --" to delete it.'
|
||||||
Set your nickname. Use "]]..config.cmd_pat..[[nick --" to delete it.
|
|
||||||
```]]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function nick:action(msg, config)
|
function nick:action(msg, config)
|
||||||
|
0
otouto/plugins/ping.lua
Executable file → Normal file
0
otouto/plugins/ping.lua
Executable file → Normal file
6
otouto/plugins/pokedex.lua
Executable file → Normal file
6
otouto/plugins/pokedex.lua
Executable file → Normal file
@ -9,11 +9,9 @@ pokedex.command = 'pokedex <query>'
|
|||||||
|
|
||||||
function pokedex:init(config)
|
function pokedex:init(config)
|
||||||
pokedex.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('pokedex', true):t('dex', true).table
|
pokedex.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('pokedex', true):t('dex', true).table
|
||||||
pokedex.doc = [[```
|
pokedex.doc = config.cmd_pat .. [[pokedex <query>
|
||||||
]]..config.cmd_pat..[[pokedex <query>
|
|
||||||
Returns a Pokedex entry from pokeapi.co.
|
Returns a Pokedex entry from pokeapi.co.
|
||||||
Alias: ]]..config.cmd_pat..[[dex
|
Alias: ]] .. config.cmd_pat .. 'dex'
|
||||||
```]]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function pokedex:action(msg, config)
|
function pokedex:action(msg, config)
|
||||||
|
108
otouto/plugins/pokego-calculator.lua
Normal file
108
otouto/plugins/pokego-calculator.lua
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
local utilities = require('otouto.utilities')
|
||||||
|
|
||||||
|
local pgc = {}
|
||||||
|
|
||||||
|
function pgc:init(config)
|
||||||
|
pgc.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('gocalc', true).table
|
||||||
|
pgc.doc = config.cmd_pat .. [[gocalc <required candy> <number of Pokémon> <number of candy>
|
||||||
|
Calculates the number of Pokémon that must be transferred before evolving, how many evolutions the user is able to perform, and how many Pokémon and candy will be left over.
|
||||||
|
All arguments must be positive numbers. Batch jobs may be performed by separating valid sets of arguments by lines.
|
||||||
|
Example (forty pidgeys and three hundred pidgey candies):
|
||||||
|
]] .. config.cmd_pat .. 'gocalc 12 40 300'
|
||||||
|
pgc.command = 'gocalc <required candy> <#pokemon> <#candy>'
|
||||||
|
end
|
||||||
|
|
||||||
|
-- This function written by Juan Potato. MIT-licensed.
|
||||||
|
local pidgey_calc = function(candies_to_evolve, mons, candies)
|
||||||
|
local transferred = 0;
|
||||||
|
local evolved = 0;
|
||||||
|
|
||||||
|
while true do
|
||||||
|
if math.floor(candies / candies_to_evolve) == 0 or mons == 0 then
|
||||||
|
break
|
||||||
|
else
|
||||||
|
mons = mons - 1
|
||||||
|
candies = candies - candies_to_evolve + 1
|
||||||
|
evolved = evolved + 1
|
||||||
|
if mons == 0 then
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
while true do
|
||||||
|
if (candies + mons) < (candies_to_evolve + 1) or mons == 0 then
|
||||||
|
break
|
||||||
|
end
|
||||||
|
while candies < candies_to_evolve do
|
||||||
|
transferred = transferred + 1
|
||||||
|
mons = mons - 1
|
||||||
|
candies = candies + 1
|
||||||
|
end
|
||||||
|
mons = mons - 1
|
||||||
|
candies = candies - candies_to_evolve + 1
|
||||||
|
evolved = evolved + 1
|
||||||
|
end
|
||||||
|
|
||||||
|
return {
|
||||||
|
transfer = transferred,
|
||||||
|
evolve = evolved,
|
||||||
|
leftover_mons = mons,
|
||||||
|
leftover_candy = candies
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
local single_job = function(input)
|
||||||
|
local req_candy, mons, candies = input:match('^(%d+) (%d+) (%d+)$')
|
||||||
|
req_candy = tonumber(req_candy)
|
||||||
|
mons = tonumber(mons)
|
||||||
|
candies = tonumber(candies)
|
||||||
|
if not (req_candy and mons and candies) then
|
||||||
|
return { err = 'Invalid input: Three numbers expected.' }
|
||||||
|
elseif req_candy > 400 then
|
||||||
|
return { err = 'Invalid required candy: Maximum is 400.' }
|
||||||
|
elseif mons > 1000 then
|
||||||
|
return { err = 'Invalid number of Pokémon: Maximum is 1000.' }
|
||||||
|
elseif candies > 10000 then
|
||||||
|
return { err = 'Invalid number of candies: Maximum is 10000.' }
|
||||||
|
else
|
||||||
|
return pidgey_calc(req_candy, mons, candies)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function pgc:action(msg)
|
||||||
|
local input = utilities.input(msg.text)
|
||||||
|
if not input then
|
||||||
|
utilities.send_reply(self, msg, pgc.doc, true)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
input = input .. '\n'
|
||||||
|
local output = ''
|
||||||
|
local total_evolutions = 0
|
||||||
|
for line in input:gmatch('(.-)\n') do
|
||||||
|
local info = single_job(line)
|
||||||
|
output = output .. '`' .. line .. '`\n'
|
||||||
|
if info.err then
|
||||||
|
output = output .. info.err .. '\n\n'
|
||||||
|
else
|
||||||
|
total_evolutions = total_evolutions + info.evolve
|
||||||
|
local s = '*Transfer:* %s. \n*Evolve:* %s (%s XP, %s minutes). \n*Leftover:* %s mons, %s candy.\n\n'
|
||||||
|
s = s:format(info.transfer, info.evolve, info.evolve..'k', info.evolve*0.5, info.leftover_mons, info.leftover_candy)
|
||||||
|
output = output .. s
|
||||||
|
end
|
||||||
|
end
|
||||||
|
local s = '*Total evolutions:* %s. \n*Recommendation:* %s'
|
||||||
|
local recommendation
|
||||||
|
local egg_count = math.floor(total_evolutions/60)
|
||||||
|
if egg_count < 1 then
|
||||||
|
recommendation = 'Wait until you have atleast sixty Pokémon to evolve before using a lucky egg.'
|
||||||
|
else
|
||||||
|
recommendation = 'Use %s lucky egg(s) for %s evolutions.'
|
||||||
|
recommendation = recommendation:format(egg_count, egg_count*60)
|
||||||
|
end
|
||||||
|
s = s:format(total_evolutions, recommendation)
|
||||||
|
output = output .. s
|
||||||
|
utilities.send_reply(self, msg, output, true)
|
||||||
|
end
|
||||||
|
|
||||||
|
return pgc
|
@ -9,10 +9,8 @@ function pokemon_go:init(config)
|
|||||||
pokemon_go.triggers = utilities.triggers(self.info.username, config.cmd_pat)
|
pokemon_go.triggers = utilities.triggers(self.info.username, config.cmd_pat)
|
||||||
:t('pokego', true):t('pokégo', true)
|
:t('pokego', true):t('pokégo', true)
|
||||||
:t('pokemongo', true):t('pokémongo', true).table
|
:t('pokemongo', true):t('pokémongo', true).table
|
||||||
pokemon_go.doc = [[```
|
pokemon_go.doc = config.cmd_pat .. [[pokego <team>
|
||||||
]]..config.cmd_pat..[[pokego <team>
|
Set your Pokémon Go team for statistical purposes. The team must be valid, and can be referred to by name or color (or the first letter of either). Giving no team name will show statistics.]]
|
||||||
Set your Pokémon Go team for statistical purposes. The team must be valid, and can be referred to by name or color (or the first letter of either). Giving no team name will show statistics.
|
|
||||||
```]]
|
|
||||||
local db = self.database.pokemon_go
|
local db = self.database.pokemon_go
|
||||||
if not db then
|
if not db then
|
||||||
self.database.pokemon_go = {}
|
self.database.pokemon_go = {}
|
||||||
|
@ -7,10 +7,7 @@ preview.command = 'preview <link>'
|
|||||||
|
|
||||||
function preview:init(config)
|
function preview:init(config)
|
||||||
preview.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('preview', true).table
|
preview.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('preview', true).table
|
||||||
preview.doc = [[```
|
preview.doc = config.cmd_pat .. 'preview <link> \nReturns a full-message, "unlinked" preview.'
|
||||||
]]..config.cmd_pat..[[preview <link>
|
|
||||||
Returns a full-message, "unlinked" preview.
|
|
||||||
```]]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function preview:action(msg)
|
function preview:action(msg)
|
||||||
|
2
otouto/plugins/pun.lua
Executable file → Normal file
2
otouto/plugins/pun.lua
Executable file → Normal file
@ -3,7 +3,7 @@ local pun = {}
|
|||||||
local utilities = require('otouto.utilities')
|
local utilities = require('otouto.utilities')
|
||||||
|
|
||||||
pun.command = 'pun'
|
pun.command = 'pun'
|
||||||
pun.doc = '`Returns a pun.`'
|
pun.doc = 'Returns a pun.'
|
||||||
|
|
||||||
function pun:init(config)
|
function pun:init(config)
|
||||||
pun.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('pun').table
|
pun.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('pun').table
|
||||||
|
2
otouto/plugins/reactions.lua
Executable file → Normal file
2
otouto/plugins/reactions.lua
Executable file → Normal file
@ -11,7 +11,7 @@ local reactions = {}
|
|||||||
local utilities = require('otouto.utilities')
|
local utilities = require('otouto.utilities')
|
||||||
|
|
||||||
reactions.command = 'reactions'
|
reactions.command = 'reactions'
|
||||||
reactions.doc = '`Returns a list of "reaction" emoticon commands.`'
|
reactions.doc = 'Returns a list of "reaction" emoticon commands.'
|
||||||
|
|
||||||
local mapping = {
|
local mapping = {
|
||||||
['shrug'] = '¯\\_(ツ)_/¯',
|
['shrug'] = '¯\\_(ツ)_/¯',
|
||||||
|
6
otouto/plugins/reddit.lua
Executable file → Normal file
6
otouto/plugins/reddit.lua
Executable file → Normal file
@ -9,11 +9,9 @@ reddit.command = 'reddit [r/subreddit | query]'
|
|||||||
|
|
||||||
function reddit:init(config)
|
function reddit:init(config)
|
||||||
reddit.triggers = utilities.triggers(self.info.username, config.cmd_pat, {'^/r/'}):t('reddit', true):t('r', true):t('r/', true).table
|
reddit.triggers = utilities.triggers(self.info.username, config.cmd_pat, {'^/r/'}):t('reddit', true):t('r', true):t('r/', true).table
|
||||||
reddit.doc = [[```
|
reddit.doc = config.cmd_pat .. [[reddit [r/subreddit | query]
|
||||||
]]..config.cmd_pat..[[reddit [r/subreddit | query]
|
|
||||||
Returns the top posts or results for a given subreddit or query. If no argument is given, returns the top posts from r/all. Querying specific subreddits is not supported.
|
Returns the top posts or results for a given subreddit or query. If no argument is given, returns the top posts from r/all. Querying specific subreddits is not supported.
|
||||||
Aliases: ]]..config.cmd_pat..[[r, /r/subreddit
|
Aliases: ]] .. config.cmd_pat .. 'r, /r/subreddit'
|
||||||
```]]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
local format_results = function(posts)
|
local format_results = function(posts)
|
||||||
|
@ -8,10 +8,7 @@ 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> \nRepeats a message after a duration of time, in minutes.'
|
||||||
]]..config.cmd_pat..[[remind <duration> <message>
|
|
||||||
Repeats a message after a duration of time, in minutes.
|
|
||||||
```]]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function remind:action(msg)
|
function remind:action(msg)
|
||||||
|
@ -5,12 +5,10 @@ local utilities = require('otouto.utilities')
|
|||||||
function setandget:init(config)
|
function setandget:init(config)
|
||||||
self.database.setandget = self.database.setandget or {}
|
self.database.setandget = self.database.setandget or {}
|
||||||
setandget.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('set', true):t('get', true).table
|
setandget.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('set', true):t('get', true).table
|
||||||
setandget.doc = [[```
|
setandget.doc = config.cmd_pat .. [[set <name> <value>
|
||||||
]]..config.cmd_pat..[[set <name> <value>
|
Stores a value with the given name. Use "]] .. config.cmd_pat .. [[set <name> --" to delete the stored value.
|
||||||
Stores a value with the given name. Use "]]..config.cmd_pat..[[set <name> --" to delete the stored value.
|
]] .. config.cmd_pat .. [[get [name]
|
||||||
]]..config.cmd_pat..[[get [name]
|
Returns the stored value or a list of stored values.]]
|
||||||
Returns the stored value or a list of stored values.
|
|
||||||
```]]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
setandget.command = 'set <name> <value>'
|
setandget.command = 'set <name> <value>'
|
||||||
|
@ -6,10 +6,7 @@ shout.command = 'shout <text>'
|
|||||||
|
|
||||||
function shout:init(config)
|
function shout:init(config)
|
||||||
shout.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('shout', true).table
|
shout.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('shout', true).table
|
||||||
shout.doc = [[```
|
shout.doc = config.cmd_pat .. 'shout <text> \nShouts something. Input may be the replied-to message.'
|
||||||
]]..config.cmd_pat..[[shout <text>
|
|
||||||
Shouts something. Input may be the replied-to message.
|
|
||||||
```]]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function shout:action(msg)
|
function shout:action(msg)
|
||||||
|
5
otouto/plugins/slap.lua
Executable file → Normal file
5
otouto/plugins/slap.lua
Executable file → Normal file
@ -6,10 +6,7 @@ slap.command = 'slap [target]'
|
|||||||
|
|
||||||
function slap:init(config)
|
function slap:init(config)
|
||||||
slap.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('slap', true).table
|
slap.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('slap', true).table
|
||||||
slap.doc = [[```
|
slap.doc = config.cmd_pat .. 'slap [target] \nSlap somebody.'
|
||||||
]]..config.cmd_pat..[[slap [target]
|
|
||||||
Slap somebody.
|
|
||||||
```]]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
local slaps = {
|
local slaps = {
|
||||||
|
6
otouto/plugins/time.lua
Executable file → Normal file
6
otouto/plugins/time.lua
Executable file → Normal file
@ -8,10 +8,8 @@ time.command = 'time <location>'
|
|||||||
|
|
||||||
function time:init(config)
|
function time:init(config)
|
||||||
time.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('time', true).table
|
time.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('time', true).table
|
||||||
time.doc = [[```
|
time.doc = config.cmd_pat .. [[time <location>
|
||||||
]]..config.cmd_pat..[[time <location>
|
Returns the time, date, and timezone for the given location.]]
|
||||||
Returns the time, date, and timezone for the given location.
|
|
||||||
```]]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function time:action(msg, config)
|
function time:action(msg, config)
|
||||||
|
6
otouto/plugins/translate.lua
Executable file → Normal file
6
otouto/plugins/translate.lua
Executable file → Normal file
@ -9,10 +9,8 @@ translate.command = 'translate [text]'
|
|||||||
|
|
||||||
function translate:init(config)
|
function translate:init(config)
|
||||||
translate.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('translate', true):t('tl', true).table
|
translate.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('translate', true):t('tl', true).table
|
||||||
translate.doc = [[```
|
translate.doc = config.cmd_pat .. [[translate [text]
|
||||||
]]..config.cmd_pat..[[translate [text]
|
Translates input or the replied-to message into the bot's language.]]
|
||||||
Translates input or the replied-to message into the bot's language.
|
|
||||||
```]]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function translate:action(msg, config)
|
function translate:action(msg, config)
|
||||||
|
6
otouto/plugins/urbandictionary.lua
Executable file → Normal file
6
otouto/plugins/urbandictionary.lua
Executable file → Normal file
@ -10,11 +10,9 @@ urbandictionary.command = 'urbandictionary <query>'
|
|||||||
function urbandictionary:init(config)
|
function urbandictionary:init(config)
|
||||||
urbandictionary.triggers = utilities.triggers(self.info.username, config.cmd_pat)
|
urbandictionary.triggers = utilities.triggers(self.info.username, config.cmd_pat)
|
||||||
:t('urbandictionary', true):t('ud', true):t('urban', true).table
|
:t('urbandictionary', true):t('ud', true):t('urban', true).table
|
||||||
urbandictionary.doc = [[```
|
urbandictionary.doc = config.cmd_pat .. [[urbandictionary <query>
|
||||||
]]..config.cmd_pat..[[urbandictionary <query>
|
|
||||||
Returns a definition from Urban Dictionary.
|
Returns a definition from Urban Dictionary.
|
||||||
Aliases: ]]..config.cmd_pat..[[ud, ]]..config.cmd_pat..[[urban
|
Aliases: ]] .. config.cmd_pat .. 'ud, ' .. config.cmd_pat .. 'urban'
|
||||||
```]]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function urbandictionary:action(msg, config)
|
function urbandictionary:action(msg, config)
|
||||||
|
6
otouto/plugins/weather.lua
Executable file → Normal file
6
otouto/plugins/weather.lua
Executable file → Normal file
@ -13,10 +13,8 @@ function weather:init(config)
|
|||||||
end
|
end
|
||||||
|
|
||||||
weather.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('weather', true).table
|
weather.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('weather', true).table
|
||||||
weather.doc = [[```
|
weather.doc = config.cmd_pat .. [[weather <location>
|
||||||
]]..config.cmd_pat..[[weather <location>
|
Returns the current weather conditions for a given location.]]
|
||||||
Returns the current weather conditions for a given location.
|
|
||||||
```]]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
weather.command = 'weather <location>'
|
weather.command = 'weather <location>'
|
||||||
|
5
otouto/plugins/whoami.lua
Executable file → Normal file
5
otouto/plugins/whoami.lua
Executable file → Normal file
@ -6,10 +6,9 @@ whoami.command = 'whoami'
|
|||||||
|
|
||||||
function whoami:init(config)
|
function whoami:init(config)
|
||||||
whoami.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('who', true):t('whoami').table
|
whoami.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('who', true):t('whoami').table
|
||||||
whoami.doc = [[```
|
whoami.doc = [[
|
||||||
Returns user and chat info for you or the replied-to message.
|
Returns user and chat info for you or the replied-to message.
|
||||||
Alias: ]]..config.cmd_pat..[[who
|
Alias: ]] .. config.cmd_pat .. 'who'
|
||||||
```]]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function whoami:action(msg)
|
function whoami:action(msg)
|
||||||
|
6
otouto/plugins/wikipedia.lua
Executable file → Normal file
6
otouto/plugins/wikipedia.lua
Executable file → Normal file
@ -9,11 +9,9 @@ wikipedia.command = 'wikipedia <query>'
|
|||||||
|
|
||||||
function wikipedia:init(config)
|
function wikipedia:init(config)
|
||||||
wikipedia.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('wikipedia', true):t('wiki', true):t('w', true).table
|
wikipedia.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('wikipedia', true):t('wiki', true):t('w', true).table
|
||||||
wikipedia.doc = [[```
|
wikipedia.doc = config.cmd_pat .. [[wikipedia <query>
|
||||||
]]..config.cmd_pat..[[wikipedia <query>
|
|
||||||
Returns an article from Wikipedia.
|
Returns an article from Wikipedia.
|
||||||
Aliases: ]]..config.cmd_pat..[[w, ]]..config.cmd_pat..[[wiki
|
Aliases: ]] .. config.cmd_pat .. 'w, ' .. config.cmd_pat .. 'wiki'
|
||||||
```]]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
local get_title = function(search)
|
local get_title = function(search)
|
||||||
|
6
otouto/plugins/xkcd.lua
Executable file → Normal file
6
otouto/plugins/xkcd.lua
Executable file → Normal file
@ -8,10 +8,8 @@ xkcd.command = 'xkcd [i]'
|
|||||||
|
|
||||||
function xkcd:init(config)
|
function xkcd:init(config)
|
||||||
xkcd.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('xkcd', true).table
|
xkcd.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('xkcd', true).table
|
||||||
xkcd.doc = [[```
|
xkcd.doc = config.cmd_pat .. [[xkcd [i]
|
||||||
]]..config.cmd_pat..[[xkcd [i]
|
Returns the latest xkcd strip and its alt text. If a number is given, returns that number strip. If "r" is passed in place of a number, returns a random strip.]]
|
||||||
Returns the latest xkcd strip and its alt text. If a number is given, returns that number strip. If "r" is passed in place of a number, returns a random strip.
|
|
||||||
```]]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function xkcd:action(msg, config)
|
function xkcd:action(msg, config)
|
||||||
|
6
otouto/plugins/youtube.lua
Executable file → Normal file
6
otouto/plugins/youtube.lua
Executable file → Normal file
@ -15,11 +15,9 @@ function youtube:init(config)
|
|||||||
end
|
end
|
||||||
|
|
||||||
youtube.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('youtube', true):t('yt', true).table
|
youtube.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('youtube', true):t('yt', true).table
|
||||||
youtube.doc = [[```
|
youtube.doc = config.cmd_pat .. [[youtube <query>
|
||||||
]]..config.cmd_pat..[[youtube <query>
|
|
||||||
Returns the top result from YouTube.
|
Returns the top result from YouTube.
|
||||||
Alias: ]]..config.cmd_pat..[[yt
|
Alias: ]] .. config.cmd_pat .. 'yt'
|
||||||
```]]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
youtube.command = 'youtube <query>'
|
youtube.command = 'youtube <query>'
|
||||||
|
0
otouto/utilities.lua
Executable file → Normal file
0
otouto/utilities.lua
Executable file → Normal file
Reference in New Issue
Block a user