class SlackSmartBot module Commands module General module AI module OpenAI def open_ai_chat_copy_session(team_orig, user_orig, session_name, new_session_name) if user_orig == "" save_stats(__method__) else save_stats(:open_ai_chat_copy_session_from_user) end user = Thread.current[:user].dup team_id = user.team_id if user_orig == "" user_orig = user.name team_orig = team_id end team_orig = team_id if team_orig == "" dest = Thread.current[:dest] get_openai_sessions() orig_team_id_user = team_orig + "_" + user_orig team_id_user = team_id + "_" + user.name if !@open_ai.key?(orig_team_id_user) respond "*ChatGPT*: The user *#{user_orig}* doesn't exist." elsif !@open_ai[orig_team_id_user][:chat_gpt][:sessions].key?(session_name) respond "*ChatGPT*: The session *#{session_name}* doesn't exist." elsif user_orig != user.name and !@open_ai[orig_team_id_user][:chat_gpt][:sessions][session_name][:public] and !@open_ai[orig_team_id_user][:chat_gpt][:sessions][session_name][:shared].include?(dest) respond "*ChatGPT*: The session *#{session_name}* doesn't exist or it is not shared." else @open_ai[team_id_user] ||= {} @open_ai[team_id_user][:chat_gpt] ||= {} @open_ai[team_id_user][:chat_gpt][:sessions] ||= {} session_orig = @open_ai[orig_team_id_user][:chat_gpt][:sessions][session_name] open_ai_new_session = { team_creator: team_id, user_creator: user.name, started: Time.now.strftime("%Y-%m-%d %H:%M:%S"), last_activity: Time.now.strftime("%Y-%m-%d %H:%M:%S"), collaborators: [], num_prompts: session_orig[:num_prompts], model: session_orig[:model], shared: [], copy_of_session: session_name, copy_of_team: team_orig, copy_of_user: user_orig, users_copying: [], public: false, description: session_orig[:description], tag: session_orig[:tag] } new_session_name = session_name if new_session_name == "" session_names = @open_ai[team_id_user][:chat_gpt][:sessions].keys if session_names.include?(new_session_name) number = session_names.join("\n").scan(/^#{new_session_name}(\d+)$/).max if number.nil? number = "1" else number = number.flatten[-1].to_i + 1 end new_session_name = "#{new_session_name}#{number}" end @open_ai[team_id_user][:chat_gpt][:sessions][new_session_name] = open_ai_new_session if user_orig != user.name or team_id != team_orig @open_ai[orig_team_id_user][:chat_gpt][:sessions][session_name][:users_copying] ||= [] @open_ai[orig_team_id_user][:chat_gpt][:sessions][session_name][:users_copying] << user.name update_openai_sessions("", team_id: team_orig, user_name: user_orig) end get_openai_sessions(session_name, team_id: team_orig, user_name: user_orig) @ai_gpt[team_id_user] ||= {} @ai_gpt[team_id_user][new_session_name] = @ai_gpt[orig_team_id_user][session_name].dup update_openai_sessions(new_session_name, team_id: team_id, user_name: user.name) if user_orig != user.name or team_id != team_orig respond "*ChatGPT*: Session #{session_name} (#{user_orig}) copied to #{new_session_name}.\nNow you can call `^chatGPT #{new_session_name}` to use it." else respond "*ChatGPT*: Session #{session_name} copied to #{new_session_name}.\nNow you can call `^chatGPT #{new_session_name}` to use it." end end end end end end end end