Skip to content

Commit

Permalink
Merge pull request #48 from tsg-ut/update-channels-all
Browse files Browse the repository at this point in the history
fetch all channels
  • Loading branch information
cookie-s authored Apr 29, 2023
2 parents d3a4e97 + 66d6cc5 commit f3dbade
Show file tree
Hide file tree
Showing 6 changed files with 193 additions and 160 deletions.
146 changes: 74 additions & 72 deletions lib/collector/events_api.rb
Original file line number Diff line number Diff line change
@@ -1,89 +1,91 @@
require 'rack'

module Collector
class EventsAPI
attr_reader :logger

def initialize(team_id)
@team_id = team_id
raise ArgumentError unless @team_id and @team_id.start_with? 'T'
end

def start!(logger)
@logger = logger

Rack::Server.start(
app: lambda do |env|
req = Rack::Request.new(env)

begin
Slack::Events::Request.new(req).verify!
process(req.body)
rescue Slack::Events::Request::MissingSigningSecret,
Slack::Events::Request::InvalidSignature,
Slack::Events::Request::TimestampExpired => e
warn 'bad request: %s' % e
[400, {}, '']
end
end,
Port: 9293,
)
end

def process(body)
# https://api.slack.com/apis/connections/events-api
module SlackPatron
module Collector
class EventsAPI
attr_reader :logger

def initialize(team_id)
@team_id = team_id
raise ArgumentError unless @team_id and @team_id.start_with? 'T'
end

data = JSON.parse(body.read)
type = data['type']
def start!(logger)
@logger = logger

Rack::Server.start(
app: lambda do |env|
req = Rack::Request.new(env)

begin
Slack::Events::Request.new(req).verify!
process(req.body)
rescue Slack::Events::Request::MissingSigningSecret,
Slack::Events::Request::InvalidSignature,
Slack::Events::Request::TimestampExpired => e
warn 'bad request: %s' % e
[400, {}, '']
end
end,
Port: 9293,
)
end

case type
when 'url_verification'
[200, { 'content-type': 'text/plain' }, data['challenge']]
when 'event_callback'
process_event data['event'] if data['team_id'] == @team_id
[204, {}, '']
else
[400, {}, '']
def process(body)
# https://api.slack.com/apis/connections/events-api

data = JSON.parse(body.read)
type = data['type']

case type
when 'url_verification'
[200, { 'content-type': 'text/plain' }, data['challenge']]
when 'event_callback'
process_event data['event'] if data['team_id'] == @team_id
[204, {}, '']
else
[400, {}, '']
end
end
end

def process_event(event)
type = event['type']
event.delete 'type'
def process_event(event)
type = event['type']
event.delete 'type'

case type
when 'message'
# https://api.slack.com/events/message
puts 'new message'
logger.new_message(event)
case type
when 'message'
# https://api.slack.com/events/message
puts 'new message'
logger.new_message(event)

when 'team_join'
puts 'new user has joined'
logger.update_users
when 'team_join'
puts 'new user has joined'
logger.update_users

when 'user_change'
puts 'user data has changed'
logger.update_users
when 'user_change'
puts 'user data has changed'
logger.update_users

when 'channel_created'
puts 'channel has created'
logger.update_channels
when 'channel_created'
puts 'channel has created'
logger.update_channels

when 'channel_rename'
puts 'channel has renamed'
logger.update_channels
when 'channel_rename'
puts 'channel has renamed'
logger.update_channels

when 'emoji_changed'
puts 'emoji has changed'
logger.update_emojis
when 'emoji_changed'
puts 'emoji has changed'
logger.update_emojis

when 'reaction_added'
puts "reaction has added"
logger.new_reaction(event['item']['ts'], event['reaction'], event['user'])
when 'reaction_added'
puts "reaction has added"
logger.new_reaction(event['item']['ts'], event['reaction'], event['user'])

when 'reaction_removed'
puts "reaction has removed"
logger.drop_reaction(event['item']['ts'], event['reaction'], event['user'])
when 'reaction_removed'
puts "reaction has removed"
logger.drop_reaction(event['item']['ts'], event['reaction'], event['user'])
end
end
end
end
Expand Down
106 changes: 54 additions & 52 deletions lib/collector/rtm.rb
Original file line number Diff line number Diff line change
@@ -1,56 +1,58 @@
module Collector
class RTM
def start!(logger)
loop do
realtime = Slack::RealTime::Client.new

realtime.on :message do |m|
puts 'new message'
logger.new_message(m)
module SlackPatron
module Collector
class RTM
def start!(logger)
loop do
realtime = Slack::RealTime::Client.new

realtime.on :message do |m|
puts 'new message'
logger.new_message(m)
end

realtime.on :team_join do |e|
puts "new user has joined"
logger.update_users
end

realtime.on :user_change do |e|
puts "user data has changed"
logger.update_users
end

realtime.on :channel_created do |c|
puts "channel has created"
logger.update_channels
end

realtime.on :channel_rename do |c|
puts "channel has renamed"
logger.update_channels
end

realtime.on :emoji_changed do |c|
puts "emoji has changed"
logger.update_emojis
end

realtime.on :reaction_added do |c|
puts "reaction has added"
logger.new_reaction(c['item']['ts'], c['reaction'], c['user'])
end

realtime.on :reaction_removed do |c|
puts "reaction has removed"
logger.drop_reaction(c['item']['ts'], c['reaction'], c['user'])
end

# if connection closed, restart the realtime logger
realtime.on :close do
puts "websocket disconnected"
end

realtime.start!
sleep 3 # なんかの理由で無限ループしても大丈夫なようにおきもち
end

realtime.on :team_join do |e|
puts "new user has joined"
logger.update_users
end

realtime.on :user_change do |e|
puts "user data has changed"
logger.update_users
end

realtime.on :channel_created do |c|
puts "channel has created"
logger.update_channels
end

realtime.on :channel_rename do |c|
puts "channel has renamed"
logger.update_channels
end

realtime.on :emoji_changed do |c|
puts "emoji has changed"
logger.update_emojis
end

realtime.on :reaction_added do |c|
puts "reaction has added"
logger.new_reaction(c['item']['ts'], c['reaction'], c['user'])
end

realtime.on :reaction_removed do |c|
puts "reaction has removed"
logger.drop_reaction(c['item']['ts'], c['reaction'], c['user'])
end

# if connection closed, restart the realtime logger
realtime.on :close do
puts "websocket disconnected"
end

realtime.start!
sleep 3 # なんかの理由で無限ループしても大丈夫なようにおきもち
end
end
end
Expand Down
20 changes: 9 additions & 11 deletions lib/db.rb
Original file line number Diff line number Diff line change
Expand Up @@ -76,11 +76,10 @@ def replace_users(users)
Channels = db['channels']
Channels.indexes.create_one({ :id => 1 }, :unique => true)
def replace_channels(channels)
unless channels.nil?
ids = channels.map{ |channel| channel['id'] }
Channels.find(id: { '$in' => ids }).delete_many
Channels.insert_many(channels)
end
return if channels.nil?
ids = channels.map{ |channel| channel['id'] }
Channels.find(id: { '$in' => ids }).delete_many
Channels.insert_many(channels)
end

# Ims
Expand All @@ -91,11 +90,10 @@ def replace_channels(channels)
Emojis = db['emojis']
Emojis.indexes.create_one({ :name => 1 }, :unique => true)
def replace_emojis(emojis)
unless emojis.nil?
emoji_data = emojis.map{ |name, url| { 'name' => name, 'url' => url } }
Emojis.find(name: { '$in' => emojis.keys }).delete_many
Emojis.insert_many(emoji_data)
end
return if emojis.nil?
emoji_data = emojis.map{ |name, url| { 'name' => name, 'url' => url } }
Emojis.find(name: { '$in' => emojis.keys }).delete_many
Emojis.insert_many(emoji_data)
end

Messages = db['messages']
Expand Down Expand Up @@ -148,4 +146,4 @@ def remove_reaction(ts, name, user)
},
},
)
end
end
35 changes: 35 additions & 0 deletions lib/slack.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,38 @@
Slack::Events.configure do |c|
c.signing_secret = config['slack']['use_events_api'] ? config['slack']['signing_secret'] : nil
end

module SlackPatron
class SlackClient
attr_reader :client

def initialize
@client = Slack::Web::Client.new
end

def conversations_list
channels = []
client.conversations_list({type: 'public_channel', limit: 1000}) do |response|
channels += response.channels
end
channels
end

def users_list
members = []
client.users_list do |response|
members += response.members
end
members
end

def emoji_list
# paginationがないらしい
client.emoji_list.emoji
end

def conversations_history(channel, count)
client.conversations_history({channel: channel, limit: count}).messages
end
end
end
Loading

0 comments on commit f3dbade

Please sign in to comment.