module SlackMathbot
|
|
class App
|
|
cattr_accessor :hooks
|
|
|
|
include SlackMathbot::Hooks::Hello
|
|
include SlackMathbot::Hooks::Message
|
|
|
|
def initialize
|
|
SlackMathbot.configure do |config|
|
|
config.token = ENV['SLACK_API_TOKEN'] || fail("Missing ENV['SLACK_API_TOKEN'].")
|
|
end
|
|
Slack.configure do |config|
|
|
config.token = SlackMathbot.config.token
|
|
end
|
|
end
|
|
|
|
def config
|
|
SlackMathbot.config
|
|
end
|
|
|
|
def self.instance
|
|
@instance ||= SlackMathbot::App.new
|
|
end
|
|
|
|
def run
|
|
auth!
|
|
start!
|
|
end
|
|
|
|
def stop!
|
|
client.stop
|
|
end
|
|
|
|
private
|
|
|
|
def logger
|
|
@logger ||= begin
|
|
$stdout.sync = true
|
|
Logger.new(STDOUT)
|
|
end
|
|
end
|
|
|
|
def start!
|
|
loop do
|
|
client.start
|
|
@client = nil
|
|
end
|
|
end
|
|
|
|
def client
|
|
@client ||= begin
|
|
client = Slack.realtime
|
|
hooks.each do |hook|
|
|
client.on hook do |data|
|
|
begin
|
|
send hook, data
|
|
rescue StandardError => e
|
|
logger.error e
|
|
begin
|
|
Slack.chat_postMessage(channel: data['channel'], text: e.message) if data.key?('channel')
|
|
rescue
|
|
# ignore
|
|
end
|
|
end
|
|
end
|
|
end
|
|
client
|
|
end
|
|
end
|
|
|
|
def auth!
|
|
auth = Slack.auth_test
|
|
SlackMathbot.configure do |config|
|
|
config.url = auth['url']
|
|
config.team = auth['team']
|
|
config.user = auth['user']
|
|
config.team_id = auth['team_id']
|
|
config.user_id = auth['user_id']
|
|
end
|
|
logger.info "Welcome '#{SlackMathbot.config.user}' to the '#{SlackMathbot.config.team}' team at #{SlackMathbot.config.url}."
|
|
end
|
|
end
|
|
end
|