This repository has been archived on 2021-04-24. You can view files and clone it, but cannot push or open issues or pull requests.
Mikubot-2/bot.lua
topkecleon 4c72543315 no typing by default
various bugfixes
blacklisting support (blacklist.lua)
	json file created automatically
	users are blacklisted and unblacklisted via reply with /blacklist
nicknames support (nick.lua)
	json file created automatically
	users set nick by /nick
	"people" section of config deprecated
moderation.lua improvements
	administrators can now run mod commands
	administrators are now listed with moderators
	modlist improved to be smarter and look better
	administrators can no longer be promoted to moderator
	/hammer command for admins to perform realm-wide ban
2015-08-18 05:55:25 -04:00

140 lines
2.8 KiB
Lua

-- bot.lua
-- Run this!
HTTP = require('socket.http')
HTTPS = require('ssl.https')
URL = require('socket.url')
JSON = require('dkjson')
VERSION = 2.7
function on_msg_receive(msg)
if config.blacklist[tostring(msg.from.id)] then return end
msg = process_msg(msg)
if msg.date < os.time() - 5 then return end -- don't react to old messages
if not msg.text then return end -- don't react to media messages
if msg.forward_from then return end -- don't react to forwarded messages
local lower = string.lower(msg.text)
for i,v in pairs(plugins) do
for j,w in pairs(v.triggers) do
if string.match(lower, w) then
if v.typing then
send_chat_action(msg.chat.id, 'typing')
end
local a,b = pcall(function() -- Janky error handling
v.action(msg)
end)
if not a then
print(b)
send_msg(msg, b)
end
end
end
end
end
function bot_init()
require('utilities')
print('\nLoading configuration...')
config = dofile('config.lua')
print(#config.plugins .. ' plugins enabled.')
require('bindings')
print('\nFetching bot information...')
bot = get_me().result
if not bot then
error('Failure fetching bot information.')
end
for k,v in pairs(bot) do
print('',k,v)
end
print('Bot information retrieved!\n')
print('Loading plugins...')
plugins = {}
for i,v in ipairs(config.plugins) do
print('',v)
local p = dofile('plugins/'..v)
table.insert(plugins, p)
end
print('Done! Plugins loaded: ' .. #plugins .. '\n')
print('Generating help message...')
help_message = ''
for i,v in ipairs(plugins) do
if v.doc then
local a = string.sub(v.doc, 1, string.find(v.doc, '\n')-1)
print(a)
help_message = help_message .. ' - ' .. a .. '\n'
end
end
print('Help message generated!\n')
print('username: @'..bot.username)
print('name: '..bot.first_name)
print('ID: '..bot.id)
is_started = true
end
function process_msg(msg)
if msg.new_chat_participant and msg.new_chat_participant.id ~= bot.id then
msg.text = 'hi '..bot.first_name
msg.from = msg.new_chat_participant
end
if msg.left_chat_participant and msg.left_chat_participant.id ~= bot.id then
msg.text = 'bye '..bot.first_name
msg.from = msg.left_chat_participant
end
if msg.new_chat_participant and msg.new_chat_participant.id == bot.id then
msg.text = '/about'
end
return msg
end
bot_init()
reminders = {}
last_update = 0
while is_started do
local res = get_updates(last_update+1)
if not res then
print('Error getting updates.')
else
for i,v in ipairs(res.result) do
if v.update_id > last_update then
last_update = v.update_id
on_msg_receive(v.message)
end
end
end
for i,v in pairs(reminders) do
if os.time() > v.alarm then
local a = send_message(v.chat_id, 'Reminder: '..v.text)
if a then
table.remove(reminders, i)
end
end
end
end
print('Halted.')