slack-smart-bot 1.13.1 → 1.14.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (75) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +100 -4
  3. data/lib/slack/smart-bot/ai/open_ai/connect.rb +61 -0
  4. data/lib/slack/smart-bot/ai/open_ai/models.rb +21 -0
  5. data/lib/slack/smart-bot/ai/open_ai/send_gpt_chat.rb +24 -0
  6. data/lib/slack/smart-bot/ai/open_ai/send_image_edit.rb +23 -0
  7. data/lib/slack/smart-bot/ai/open_ai/send_image_generation.rb +18 -0
  8. data/lib/slack/smart-bot/ai/open_ai/send_image_variation.rb +22 -0
  9. data/lib/slack/smart-bot/ai/open_ai/whisper_transcribe.rb +21 -0
  10. data/lib/slack/smart-bot/ai.rb +8 -0
  11. data/lib/slack/smart-bot/comm/get_channel_members.rb +15 -13
  12. data/lib/slack/smart-bot/comm/get_channels.rb +31 -29
  13. data/lib/slack/smart-bot/comm/respond_thread.rb +2 -2
  14. data/lib/slack/smart-bot/commands/general/ai/open_ai/open_ai_chat.rb +40 -0
  15. data/lib/slack/smart-bot/commands/general/ai/open_ai/open_ai_edit_image.rb +66 -0
  16. data/lib/slack/smart-bot/commands/general/ai/open_ai/open_ai_generate_image.rb +65 -0
  17. data/lib/slack/smart-bot/commands/general/ai/open_ai/open_ai_models.rb +37 -0
  18. data/lib/slack/smart-bot/commands/general/ai/open_ai/open_ai_variations_image.rb +84 -0
  19. data/lib/slack/smart-bot/commands/general/ai/open_ai/open_ai_whisper.rb +51 -0
  20. data/lib/slack/smart-bot/commands/general/bot_help.rb +1 -0
  21. data/lib/slack/smart-bot/commands/general/personal_settings.rb +38 -0
  22. data/lib/slack/smart-bot/commands/general/poster.rb +107 -104
  23. data/lib/slack/smart-bot/commands/general/public_holidays.rb +116 -114
  24. data/lib/slack/smart-bot/commands/general/set_public_holidays.rb +6 -2
  25. data/lib/slack/smart-bot/commands/general/teams/add_team.rb +87 -0
  26. data/lib/slack/smart-bot/commands/general/teams/delete_team.rb +69 -0
  27. data/lib/slack/smart-bot/commands/general/teams/memos/add_memo_team.rb +136 -0
  28. data/lib/slack/smart-bot/commands/general/teams/memos/add_memo_team_comment.rb +37 -0
  29. data/lib/slack/smart-bot/commands/general/teams/memos/delete_memo_team.rb +83 -0
  30. data/lib/slack/smart-bot/commands/general/teams/memos/see_memo_team.rb +97 -0
  31. data/lib/slack/smart-bot/commands/general/teams/memos/see_memos_team.rb +304 -0
  32. data/lib/slack/smart-bot/commands/general/teams/memos/set_memo_status.rb +66 -0
  33. data/lib/slack/smart-bot/commands/general/teams/ping_team.rb +104 -0
  34. data/lib/slack/smart-bot/commands/general/teams/see_teams.rb +236 -0
  35. data/lib/slack/smart-bot/commands/general/teams/see_vacations_team.rb +183 -0
  36. data/lib/slack/smart-bot/commands/general/teams/update_team.rb +137 -0
  37. data/lib/slack/smart-bot/commands/general_bot_commands.rb +905 -741
  38. data/lib/slack/smart-bot/commands/on_bot/general/bot_stats.rb +379 -353
  39. data/lib/slack/smart-bot/commands/on_bot/repl.rb +87 -189
  40. data/lib/slack/smart-bot/commands/on_bot/repl_client.rb +233 -0
  41. data/lib/slack/smart-bot/commands/on_master/admin_master/exit_bot.rb +17 -4
  42. data/lib/slack/smart-bot/commands.rb +26 -10
  43. data/lib/slack/smart-bot/process.rb +14 -3
  44. data/lib/slack/smart-bot/process_first.rb +36 -2
  45. data/lib/slack/smart-bot/treat_message.rb +28 -0
  46. data/lib/slack/smart-bot/utils/check_vacations.rb +1 -0
  47. data/lib/slack/smart-bot/utils/create_routine_thread.rb +1 -1
  48. data/lib/slack/smart-bot/utils/display_calendar.rb +17 -10
  49. data/lib/slack/smart-bot/utils/encryption/decrypt.rb +23 -0
  50. data/lib/slack/smart-bot/utils/encryption/encrypt.rb +27 -0
  51. data/lib/slack/smart-bot/utils/{encryption_get_key_iv.rb → encryption/encryption_get_key_iv.rb} +12 -8
  52. data/lib/slack/smart-bot/utils/get_help.rb +3 -1
  53. data/lib/slack/smart-bot/utils/get_personal_settings.rb +14 -0
  54. data/lib/slack/smart-bot/utils/get_teams.rb +2 -2
  55. data/lib/slack/smart-bot/utils/get_vacations.rb +2 -2
  56. data/lib/slack/smart-bot/utils/save_stats.rb +3 -1
  57. data/lib/slack/smart-bot/utils/update_personal_settings.rb +18 -0
  58. data/lib/slack/smart-bot/utils/update_teams.rb +1 -1
  59. data/lib/slack/smart-bot/utils/update_vacations.rb +1 -1
  60. data/lib/slack/smart-bot/utils.rb +5 -3
  61. data/lib/slack-smart-bot.rb +12 -0
  62. data/whats_new.txt +13 -14
  63. metadata +63 -15
  64. data/lib/slack/smart-bot/commands/general/add_memo_team.rb +0 -117
  65. data/lib/slack/smart-bot/commands/general/add_team.rb +0 -81
  66. data/lib/slack/smart-bot/commands/general/delete_memo_team.rb +0 -69
  67. data/lib/slack/smart-bot/commands/general/delete_team.rb +0 -55
  68. data/lib/slack/smart-bot/commands/general/ping_team.rb +0 -100
  69. data/lib/slack/smart-bot/commands/general/see_memos_team.rb +0 -202
  70. data/lib/slack/smart-bot/commands/general/see_teams.rb +0 -230
  71. data/lib/slack/smart-bot/commands/general/see_vacations_team.rb +0 -136
  72. data/lib/slack/smart-bot/commands/general/set_memo_status.rb +0 -58
  73. data/lib/slack/smart-bot/commands/general/update_team.rb +0 -131
  74. data/lib/slack/smart-bot/utils/decrypt.rb +0 -15
  75. data/lib/slack/smart-bot/utils/encrypt.rb +0 -15
@@ -1,131 +0,0 @@
1
- class SlackSmartBot
2
- def update_team(user, team_name, new_name: "", new_info: "", delete_opts: "", add_opts: "")
3
- save_stats(__method__)
4
- get_teams()
5
- if @teams.key?(team_name.to_sym)
6
- assigned_members = @teams[team_name.to_sym].members.values.flatten
7
- assigned_members.uniq!
8
- all_team_members = assigned_members.dup
9
- team_members = []
10
- if @teams[team_name.to_sym].channels.key?("members")
11
- @teams[team_name.to_sym].channels["members"].each do |ch|
12
- get_channels_name_and_id() unless @channels_id.key?(ch)
13
- tm = get_channel_members(@channels_id[ch])
14
- tm.each do |m|
15
- user_info = @users.select { |u| u.id == m or (u.key?(:enterprise_user) and u.enterprise_user.id == m) }[-1]
16
- team_members << user_info.name unless user_info.is_app_user or user_info.is_bot
17
- end
18
- end
19
- end
20
- team_members.flatten!
21
- team_members.uniq!
22
- all_team_members += team_members
23
- all_team_members.uniq!
24
- end
25
- if !@teams.key?(team_name.to_sym)
26
- respond "It seems like the team *#{team_name}* doesn't exist.\nRelated commands `add team TEAM_NAME PROPERTIES`, `see team TEAM_NAME`, `see teams`"
27
- elsif !(all_team_members + [@teams[team_name.to_sym].creator] + config.masters).flatten.include?(user.name)
28
- respond "You have to be a member of the team, the creator or a Master admin to be able to update this team."
29
- else
30
- wrong = false
31
- if new_name != ""
32
- team = @teams[team_name.to_sym].deep_copy
33
- @teams[new_name.to_sym] = team
34
- @teams.delete(team_name.to_sym)
35
- File.delete(File.join(config.path, "teams", "t_#{team_name}.yaml"))
36
- message = "The *#{team_name}* team has been renamed #{new_name}."
37
- team_name = new_name
38
- elsif new_info != ""
39
- @teams[team_name.to_sym].info = new_info
40
- elsif delete_opts != ""
41
- last_type = nil
42
- delete_opts.split(" ").each do |opt|
43
- if opt.match?(/^\s*$/)
44
- #blank
45
- elsif opt.match?(/^[\w\-]+$/i)
46
- last_type = opt
47
- elsif opt.match(/<?@(\w+)>?/i) #accepts also @username for the case the user has been deactivated
48
- member_id = $1
49
- member_info = @users.select { |u| u.id == member_id or u.name == member_id or (u.key?(:enterprise_user) and u.enterprise_user.id == member_id) }[-1]
50
- if last_type.nil?
51
- @teams[team_name.to_sym].members.each do |type, members|
52
- @teams[team_name.to_sym].members[type].delete(member_info.name)
53
- end
54
- else
55
- @teams[team_name.to_sym].members[last_type] ||= []
56
- @teams[team_name.to_sym].members[last_type].delete(member_info.name)
57
- end
58
- elsif opt.match(/<#(\w+)\|[^>]*>/i)
59
- channel_id = $1
60
- get_channels_name_and_id() unless @channels_name.keys.include?(channel_id)
61
- channel = @channels_name[channel_id]
62
- if last_type.nil?
63
- @teams[team_name.to_sym].channels.each do |type, channels|
64
- @teams[team_name.to_sym].channels[type].delete(channel)
65
- end
66
- else
67
- @teams[team_name.to_sym].channels[last_type] ||= []
68
- @teams[team_name.to_sym].channels[last_type].delete(channel)
69
- end
70
- else
71
- respond "It seems like the members or channel list is not correct. Please double check."
72
- wrong = true
73
- break
74
- end
75
- end
76
- tmembers = @teams[team_name.to_sym].members.deep_copy
77
- tmembers.each do |type, members|
78
- @teams[team_name.to_sym].members.delete(type) if members.empty?
79
- end
80
- tchannels = @teams[team_name.to_sym].channels.deep_copy
81
- tchannels.each do |type, channels|
82
- @teams[team_name.to_sym].channels.delete(type) if channels.empty?
83
- end
84
- elsif add_opts != ""
85
- last_type = nil
86
- add_opts.split(" ").each do |opt|
87
- if opt.match?(/^\s*$/)
88
- #blank
89
- elsif opt.match?(/^[\w\-]+$/i)
90
- last_type = opt
91
- elsif opt.match(/<@(\w+)>/i)
92
- member_id = $1
93
- last_type = 'no_type' if last_type.nil?
94
- member_info = @users.select { |u| u.id == member_id or (u.key?(:enterprise_user) and u.enterprise_user.id == member_id) }[-1]
95
- @teams[team_name.to_sym].members[last_type] ||= []
96
- @teams[team_name.to_sym].members[last_type] << member_info.name
97
- @teams[team_name.to_sym].members[last_type].uniq!
98
- elsif opt.match(/<#(\w+)\|[^>]*>/i)
99
- channel_id = $1
100
- get_channels_name_and_id() unless @channels_name.keys.include?(channel_id)
101
- channel = @channels_name[channel_id]
102
- @teams[team_name.to_sym].channels[last_type] ||= []
103
- @teams[team_name.to_sym].channels[last_type] << channel
104
- @teams[team_name.to_sym].channels[last_type].uniq!
105
- else
106
- respond "It seems like the members or channel list is not correct. Please double check."
107
- wrong = true
108
- break
109
- end
110
- end
111
- tmembers = @teams[team_name.to_sym].members.deep_copy
112
- tmembers.each do |type, members|
113
- @teams[team_name.to_sym].members.delete(type) if members.empty?
114
- end
115
- tchannels = @teams[team_name.to_sym].channels.deep_copy
116
- tchannels.each do |type, channels|
117
- @teams[team_name.to_sym].channels.delete(type) if channels.empty?
118
- end
119
- end
120
- unless wrong
121
- message ||= "The *#{team_name}* team has been updated."
122
- @teams[team_name.to_sym].status = :updated
123
- @teams[team_name.to_sym].user = user.name
124
- @teams[team_name.to_sym].date = Time.now.strftime("%Y-%m-%dT%H:%M:%S.000Z")[0..18]
125
- update_teams()
126
- end
127
- respond message
128
- see_teams(user, team_name, add_stats: false) unless wrong
129
- end
130
- end
131
- end
@@ -1,15 +0,0 @@
1
- class SlackSmartBot
2
- def decrypt(data)
3
- require "openssl"
4
- require "base64"
5
-
6
- key, iv = encryption_get_key_iv()
7
- encrypted = Base64.decode64(data)
8
- cipher = OpenSSL::Cipher.new("AES-256-CBC")
9
- cipher.decrypt
10
- cipher.key = key
11
- cipher.iv = iv
12
- plain = cipher.update(encrypted) + cipher.final
13
- return plain
14
- end
15
- end
@@ -1,15 +0,0 @@
1
- class SlackSmartBot
2
- def encrypt(data)
3
- require "openssl"
4
- require "base64"
5
-
6
- key, iv = encryption_get_key_iv()
7
- cipher = OpenSSL::Cipher::Cipher.new "AES-256-CBC"
8
- cipher.encrypt
9
- cipher.key = key
10
- cipher.iv = iv
11
- encrypted = cipher.update(data) + cipher.final
12
- encrypted = Base64.encode64(encrypted)
13
- return encrypted
14
- end
15
- end