101 lines
2.1 KiB
Ruby
101 lines
2.1 KiB
Ruby
|
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
|