A Slack Bot that pulls Pixiv information and posts the full image(s) into Slack, with iOS shortcuts.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

83 lines
1.7 KiB

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