init
This commit is contained in:
commit
3e60c402c9
100
slack-converter.rb
Normal file
100
slack-converter.rb
Normal file
@ -0,0 +1,100 @@
|
||||
require 'json'
|
||||
|
||||
# this class converts the direct messages from a slack export to
|
||||
# a format wich can then be imported by mattermost
|
||||
# author Daniel Schubert <mail@schubertdaniel.de>
|
||||
|
||||
|
||||
class ImportDMS
|
||||
def initialize()
|
||||
@dms = {}
|
||||
@users = {}
|
||||
|
||||
self.xtract_users
|
||||
self.xtract_dms
|
||||
end
|
||||
|
||||
def xtract_users()
|
||||
data = self.read_json('users.json')
|
||||
data.each do |d|
|
||||
@users.store( d["id"], d["name"])
|
||||
end
|
||||
end
|
||||
|
||||
def xtract_dms()
|
||||
data = self.read_json('dms.json')
|
||||
data.each do |d|
|
||||
@dms.store( d["id"],d["members"])
|
||||
end
|
||||
end
|
||||
|
||||
def read_json( file )
|
||||
f = File.open file
|
||||
d = JSON.load f
|
||||
end
|
||||
|
||||
def get_usr_name( id )
|
||||
unless (id == nil)
|
||||
@users.fetch(id)
|
||||
end
|
||||
end
|
||||
|
||||
def cnvrt_ts( ts )
|
||||
# converts the slack timestamp to a mattermost timestamp
|
||||
t = ts.sub!(".", "")
|
||||
t[0,13]
|
||||
end
|
||||
|
||||
def get_messages(chat_id)
|
||||
files = Dir.glob("#{chat_id}/*.json")
|
||||
chats = Array.new
|
||||
|
||||
files.each { |file|
|
||||
f = read_json( file )
|
||||
|
||||
f.each { |m|
|
||||
n = self.get_usr_name( m["user"] )
|
||||
ts = self.cnvrt_ts( m["ts"] )
|
||||
#user,ts, test
|
||||
chats.push( [ts, n, m["text"]] )
|
||||
}
|
||||
}
|
||||
|
||||
return chats
|
||||
end
|
||||
|
||||
def create_json
|
||||
# version; required
|
||||
puts '{"type":"version","version":1}'
|
||||
|
||||
@dms.each_key do |key|
|
||||
#get user names
|
||||
user_names = []
|
||||
@dms.fetch(key).each do |u_id|
|
||||
user_names.push( @users.fetch(u_id) )
|
||||
end
|
||||
self.create_channel_list
|
||||
self.create_direct_messages
|
||||
end
|
||||
end
|
||||
|
||||
def create_direct_messages
|
||||
#TODO : replies are output as normal messages; should be grouped as replies
|
||||
# create direct messages list
|
||||
m = get_messages(key)
|
||||
m.each do |msg|
|
||||
ml = {"type"=>"direct_post","direct_post"=>{"channel_members" => user_names, "user" => msg[1], "message" => msg[2], "create_at" => msg[0].to_i, "flagged_by" => nil, "reactions" => nil, "replies"=> nil, "attachments"=> nil } }.to_json
|
||||
puts ml
|
||||
end
|
||||
end
|
||||
|
||||
def create_channel_list
|
||||
cl = {"type" => "direct_channel", "direct_channel" => {"members" => user_names, "favorited_by" => nil,"header" => "" }}.to_json
|
||||
puts cl
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
# usage
|
||||
i = ImportDMS.new
|
||||
i.create_json
|
Loading…
Reference in New Issue
Block a user