Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion bin/nomnichi_bot
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ if str = ARGV.shift
sender.send_message(str, $NOMRAT_CHANNEL)
end
else
subjects = [:nomnichi, :tvshow, :weather, :security_advisory, :calendar]
subjects = [:nomnichi, :tvshow, :weather, :security_advisory, :calendar, :cleaner]

subjects.each do |subject|
print "* #{subject}:\n" if $NOMRAT_TEST || $NOMRAT_DEBUG
Expand Down
5 changes: 3 additions & 2 deletions lib/nomrat/reporter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@ def self.report(subject)
:nomnichi => Nomnichi,
:security_advisory => SecurityAdvisory,
:tvshow => Tvshow,
:weather => Weather
:weather => Weather,
:cleaner => Cleaner,
}
return reporters[subject].new.report if reporters[subject]
raise ArgumentError, "unknown subject #{subject}"
Expand All @@ -19,6 +20,6 @@ def self.report(subject)
autoload :SecurityAdvisory, "#{dir}/security_advisory.rb"
autoload :Tvshow, "#{dir}/tvshow.rb"
autoload :Weather, "#{dir}/weather.rb"

autoload :Cleaner, "#{dir}/cleaner.rb"
end # module Reporter
end # module Nomrat
27 changes: 27 additions & 0 deletions lib/nomrat/reporter/cleaner.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
module Nomrat
module Reporter
class Cleaner
CLEAN_WDAY = 1 # Monday

def report
return nil unless Date.today.wday == CLEAN_WDAY
before_cleaner = Nomrat::Scrap.open(:cleaner).last.cleaner
return "今週の掃除当番は #{next_cleaner(before_cleaner)} です.掃除後に報告をお願いします."
end

private

def cleaners
return %w(
okada kitagaki masuda-y
ikeda-y ichikawa kobayashi nakamura fujita
emi suetake sugi date yoshida-h
)
end

def next_cleaner(before_cleaner)
cleaners[cleaners.index(before_cleaner) + 1]
end
end # class Cleaner
end # module Reporter
end # module Nomrat
4 changes: 3 additions & 1 deletion lib/nomrat/scrap.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ def self.open(scrap_name)
:debian_security_advisory => DebianSecurityAdvisory,
:nomnichi => Nomnichi,
:kinro => Kinro,
:weather => Weather
:weather => Weather,
:cleaner => Cleaner
}
if scraps[scrap_name]
config = Config.load(scrap_name)
Expand All @@ -26,6 +27,7 @@ def self.open(scrap_name)
autoload :Nomnichi, "#{dir}/nomnichi.rb"
autoload :Kinro, "#{dir}/kinro.rb"
autoload :Weather, "#{dir}/weather.rb"
autoload :Cleaner, "#{dir}/cleaner.rb"

end # module Scrap
end # module Nomrat
56 changes: 56 additions & 0 deletions lib/nomrat/scrap/cleaner.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
require "json"

module Nomrat
module Scrap
class Cleaner < Base
class Article
attr_reader :date, :cleaner

def initialize(date, cleaner)
@date, @cleaner = date, cleaner
@date = Date.parse(date) if date.is_a?(String)
end
end # class Article

def initialize(config = nil)
@token = config["token"]
@channel = config["channel"]
@members = create_members

@articles = create_articles(fetch_content(config))
end

private

def create_articles(content)
messages = JSON.parse(content)["messages"]
cleaner_messages = messages.select{|m| m["text"] =~ /掃除を完了しました/}
articles = cleaner_messages.map do |m|
time = Time.at(m["ts"].to_i)
date = Date.new(time.year, time.month, time.day)
cleaner = @members[m["user"]]
Article.new(date, cleaner)
end
return articles
end

def page_url
"https://slack.com/api/channels.history?token=#{@token}&channel=#{channel_id}"
end

def create_members
members_info = JSON.parse(open("https://slack.com/api/users.list?token=#{@token}").read)["members"]
h = Hash.new
members_info.each do |m|
h[m["id"]] = m["name"]
end
h
end

def channel_id
channels_info = JSON.parse(open("https://slack.com/api/channels.list?token=#{@token}").read)["channels"]
channel_info = channels_info.select{|c| c["name"] == @channel}.first["id"]
end
end # class Cleaner
end # module Scrap
end # module Nomrat