class SlackSmartBot
module Commands
module General
module AI
module OpenAI
def open_ai_chat_list_sessions(type, tag: '') save_stats(__method__)
user = Thread.current[:user].dup
team_id = user.team_id
team_id_user = Thread.current[:team_id_user]
channel = Thread.current[:dest]
get_openai_sessions()
check_users = []
if type == :own
check_users << team_id_user
else
check_users = @open_ai.keys
end
list_sessions = []
check_users.each do |team_user_name|
if @open_ai.key?(team_user_name) and @open_ai[team_user_name].key?(:chat_gpt) and
@open_ai[team_user_name][:chat_gpt].key?(:sessions) and
@open_ai[team_user_name][:chat_gpt][:sessions].size > 0
sessions = @open_ai[team_user_name][:chat_gpt][:sessions].keys.sort
sessions.delete("")
sessions.each do |session_name|
session = @open_ai[team_user_name][:chat_gpt][:sessions][session_name]
if (type == :own and session[:user_creator] == user.name) or
(type == :public and session.key?(:public) and session[:public]) or
(type == :shared and session.key?(:shared) and session[:shared].include?(channel))
if tag == '' or (session.key?(:tag) and tag == session[:tag].to_s)
if !session.key?(:team_creator) or session[:team_creator] == ''
session[:team_creator] = config.team_id
end
list_sessions << "*`#{session_name}`*: "
list_sessions[-1]<<"_#{session[:description]}_ " if session.key?(:description) and session[:description].to_s.strip != ''
list_sessions[-1]<<"*(public)* " if session.key?(:public) and session[:public] and type != :public
list_sessions[-1]<<"(shared on <##{session.shared.join(">, <#")}>) " if session.key?(:shared) and session[:shared].size > 0 and type != :shared
list_sessions[-1]<<"\n *#{session.num_prompts}* prompts. "
list_sessions[-1]<<" tag: >*#{session.tag}*. " if session.key?(:tag) and session[:tag].to_s != '' and tag == ''
list_sessions[-1]<<"shared by: *#{session.user_creator}*. " if type != :own
list_sessions[-1]<<"original creator: *#{session.copy_of_user}*. " if session.key?(:copy_of_user) and session[:copy_of_user] != '' and session[:copy_of_user] != session[:user_creator]
list_sessions[-1]<<"model: #{session.model}. " if session.key?(:model) and session[:model] != ''
list_sessions[-1]<<"copies: #{session.users_copying.size}. " if session.key?(:users_copying) and session[:users_copying].size > 0
list_sessions[-1]<<"users: #{session.users_copying.uniq.size}. " if session.key?(:users_copying) and session[:users_copying].size > 0
list_sessions[-1]<<"collaborators: *#{session.collaborators.join(", ").gsub("#{team_id}_","")}*. " unless !session.key?(:collaborators) or session.collaborators.empty?
list_sessions[-1]<<"last prompt: #{session.last_activity.gsub("-", "/")[0..15]}. " if type == :own
end
end
end
end
end
if list_sessions.size > 0
list_sessions[-1] << "\n\n:information_source: To start using a session: `chatgpt use USER_SHARED SESSION_NAME`" if type != :own
if type == :own
respond "*ChatGPT*: Your#{" >*#{tag}*" if tag!=''} sessions:\n\n#{list_sessions.join("\n\n")}"
elsif type == :public
respond "*ChatGPT*: Public#{" >*#{tag}*" if tag!=''} sessions:\n\n#{list_sessions.join("\n\n")}"
elsif type == :shared
respond "*ChatGPT*: Shared#{" >*#{tag}*" if tag!=''} sessions on <##{channel}>:\n\n#{list_sessions.join("\n\n")}"
end
else
if type == :own
respond "*ChatGPT*: You don't have any#{" >*#{tag}*" if tag!=''} sessions."
else
respond "*ChatGPT*: There are no#{" >*#{tag}*" if tag!=''} #{type} sessions."
end
end
end
end
end
end
end
end