commit 3e60c402c9b1da9cba9db645c359fa11ab34defa Author: Daniel Schubert Date: Mon Jul 8 17:59:49 2019 +0200 init diff --git a/slack-converter.rb b/slack-converter.rb new file mode 100644 index 0000000..d6187d1 --- /dev/null +++ b/slack-converter.rb @@ -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 + + +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