chatgpt_assistant 0.1.6 → 0.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/.env_sample +35 -10
  3. data/.rubocop.yml +14 -3
  4. data/Dockerfile +11 -5
  5. data/Gemfile +25 -23
  6. data/Gemfile.lock +123 -85
  7. data/README.md +22 -22
  8. data/Rakefile +1 -0
  9. data/docker-compose.yml +8 -4
  10. data/exe/chatgpt_assistant +1 -1
  11. data/lib/chatgpt_assistant/audio_synthesis.rb +54 -15
  12. data/lib/{bots → chatgpt_assistant/bots}/application_bot.rb +0 -6
  13. data/lib/chatgpt_assistant/bots/discord/actions.rb +103 -0
  14. data/lib/chatgpt_assistant/bots/discord/auth.rb +36 -0
  15. data/lib/chatgpt_assistant/bots/discord/bot.rb +29 -0
  16. data/lib/chatgpt_assistant/bots/discord/chat_actions.rb +33 -0
  17. data/lib/chatgpt_assistant/bots/discord/events.rb +138 -0
  18. data/lib/chatgpt_assistant/bots/discord/validations.rb +38 -0
  19. data/lib/chatgpt_assistant/bots/discord/voice_actions.rb +33 -0
  20. data/lib/chatgpt_assistant/bots/discord/voice_checkers.rb +35 -0
  21. data/lib/chatgpt_assistant/bots/discord_bot.rb +41 -0
  22. data/lib/chatgpt_assistant/bots/helpers/messenger_helper.rb +16 -0
  23. data/lib/{bots → chatgpt_assistant/bots}/jobs/register_job.rb +2 -2
  24. data/lib/chatgpt_assistant/bots/mailers/account_mailer.rb +30 -0
  25. data/lib/chatgpt_assistant/bots/mailers/application_mailer.rb +21 -0
  26. data/lib/chatgpt_assistant/bots/services/new_chat_service.rb +59 -0
  27. data/lib/chatgpt_assistant/bots/services/register_service.rb +45 -0
  28. data/lib/chatgpt_assistant/bots/telegram/actions.rb +54 -0
  29. data/lib/chatgpt_assistant/bots/telegram/auth.rb +40 -0
  30. data/lib/chatgpt_assistant/bots/telegram/bot.rb +17 -0
  31. data/lib/chatgpt_assistant/bots/telegram/chat_actions.rb +30 -0
  32. data/lib/chatgpt_assistant/bots/telegram/events.rb +121 -0
  33. data/lib/chatgpt_assistant/bots/telegram/events_controller.rb +48 -0
  34. data/lib/chatgpt_assistant/bots/telegram/permissions.rb +48 -0
  35. data/lib/chatgpt_assistant/bots/telegram/validations.rb +55 -0
  36. data/lib/chatgpt_assistant/bots/telegram/voice_actions.rb +36 -0
  37. data/lib/chatgpt_assistant/bots/telegram_bot.rb +44 -0
  38. data/lib/chatgpt_assistant/chatter.rb +10 -2
  39. data/lib/chatgpt_assistant/config.rb +7 -1
  40. data/lib/chatgpt_assistant/default_messages.rb +10 -4
  41. data/lib/chatgpt_assistant/error.rb +9 -0
  42. data/lib/chatgpt_assistant/migrations.rb +5 -0
  43. data/lib/chatgpt_assistant/models.rb +20 -0
  44. data/lib/chatgpt_assistant/version.rb +1 -1
  45. data/lib/chatgpt_assistant.rb +5 -3
  46. metadata +35 -25
  47. data/.env_prod_sample +0 -18
  48. data/docker-compose.prod.yml +0 -34
  49. data/lib/bots/discord_bot.rb +0 -182
  50. data/lib/bots/helpers/authentication_helper.rb +0 -48
  51. data/lib/bots/helpers/discord_helper.rb +0 -124
  52. data/lib/bots/helpers/discord_voice_helper.rb +0 -50
  53. data/lib/bots/helpers/messenger_helper.rb +0 -133
  54. data/lib/bots/helpers/telegram_helper.rb +0 -73
  55. data/lib/bots/helpers/telegram_voice_helper.rb +0 -33
  56. data/lib/bots/helpers/validation_helper.rb +0 -38
  57. data/lib/bots/helpers/visit_helper.rb +0 -28
  58. data/lib/bots/services/new_chat_service.rb +0 -34
  59. data/lib/bots/services/register_service.rb +0 -36
  60. data/lib/bots/telegram_bot.rb +0 -180
  61. /data/lib/{bots → chatgpt_assistant/bots}/helpers/audio_helper.rb +0 -0
  62. /data/lib/{bots → chatgpt_assistant/bots}/helpers/file_helper.rb +0 -0
  63. /data/lib/{bots → chatgpt_assistant/bots}/helpers/search_helper.rb +0 -0
  64. /data/lib/{bots → chatgpt_assistant/bots}/jobs/new_chat_job.rb +0 -0
  65. /data/lib/{bots → chatgpt_assistant/bots}/jobs/voice_connect_job.rb +0 -0
  66. /data/lib/{bots → chatgpt_assistant/bots}/services/voice_connect_service.rb +0 -0
@@ -1,180 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "helpers/telegram_helper"
4
- require_relative "helpers/telegram_voice_helper"
5
-
6
- module ChatgptAssistant
7
- # This class is responsible for the telegram bot features
8
- class TelegramBot < ApplicationBot
9
- def start
10
- bot.listen do |message|
11
- @msg = message
12
- @visitor = telegram_visited?(@msg.chat.id)
13
- next unless telegram_text_or_audio?
14
-
15
- text_events if telegram_message_has_text?
16
- audio_event if telegram_message_has_audio?
17
- end
18
- rescue StandardError => e
19
- Error.create(message: e.message, backtrace: e.backtrace)
20
- retry
21
- end
22
-
23
- private
24
-
25
- include TelegramHelper
26
- include TelegramVoiceHelper
27
-
28
- attr_accessor :msg, :visitor, :chat, :chat_id
29
-
30
- def text_events
31
- case msg.text
32
- when "/start"
33
- start_event
34
- when "/help"
35
- help_event
36
- when "/hist"
37
- hist_event
38
- when "/list"
39
- list_event
40
- when "/stop"
41
- stop_event
42
- when nil
43
- raise NilError
44
- else
45
- action_events
46
- end
47
- rescue NilError => e
48
- send_message e.message, msg.chat.id
49
- end
50
-
51
- def start_event
52
- telegram_send_start_message
53
- end
54
-
55
- def help_event
56
- help_messages.each { |m| send_message m, msg.chat.id }
57
- end
58
-
59
- def hist_event
60
- raise UserNotLoggedInError if user.nil?
61
- raise NoChatSelectedError if user.current_chat.nil?
62
- raise NoMessagesFoundedError if user.current_chat.messages.count.zero?
63
-
64
- user.chat_history.each do |m|
65
- send_message m, msg.chat.id
66
- end
67
- rescue NoChatSelectedError, UserNotLoggedInError, NoMessagesFoundedError => e
68
- send_message e.message, msg.chat.id
69
- end
70
-
71
- def list_event
72
- raise UserNotLoggedInError if user.nil?
73
- raise NoChatsFoundedError if user.chats.count.zero?
74
-
75
- send_message common_messages[:chat_list], msg.chat.id
76
- chats_str = ""
77
- user.chats.each_with_index { |c, i| chats_str += "Chat #{i + 1} - #{c.title}\n" }
78
- send_message chats_str, msg.chat.id
79
- rescue NoChatsFoundedError, UserNotLoggedInError => e
80
- send_message e.message, msg.chat.id
81
- end
82
-
83
- def action_events
84
- return auth_events if auth_event?
85
- return new_chat_event if msg.text.include?("new_chat/")
86
- return select_chat_event if msg.text.include?("sl_chat/")
87
- return telegram_chat_event unless telegram_actions?
88
-
89
- raise InvalidCommandError
90
- rescue InvalidCommandError => e
91
- send_message e.message, msg.chat.id
92
- end
93
-
94
- def auth_event?
95
- msg.text.include?("login/") || msg.text.include?("register/") || msg.text.include?("sign_out/")
96
- end
97
-
98
- def auth_events
99
- return login_event if msg.text.include?("login/")
100
- return register_event if msg.text.include?("register/")
101
- return sign_out_event if msg.text.include?("sign_out/")
102
- end
103
-
104
- def login_event
105
- raise UserLoggedInError if user
106
-
107
- user_info = msg.text.split("/").last
108
- email, password = user_info.split(":")
109
- case telegram_user_auth(email, password, msg.chat.id)
110
- when "user not found"
111
- raise UserNotFoundError
112
- when "wrong password"
113
- raise WrongPasswordError
114
- when email
115
- user_logged_in_message
116
- end
117
- rescue UserNotFoundError, WrongPasswordError, UserLoggedInError => e
118
- send_message e.message, msg.chat.id
119
- end
120
-
121
- def register_event
122
- user_info = msg.text.split("/").last
123
- raise NoRegisterInfoError if user_info.nil?
124
- raise UserLoggedInError if user
125
-
126
- email, password = user_info.split(":")
127
- raise NoRegisterInfoError if email.nil? || password.nil?
128
-
129
- RegisterJob.perform_async(email, password, visitor.telegram_id)
130
- rescue NoRegisterInfoError, UserLoggedInError => e
131
- send_message e.message, msg.chat.id
132
- end
133
-
134
- def sign_out_event
135
- raise UserNotLoggedInError if user.nil?
136
-
137
- user.update(telegram_id: nil)
138
- send_message success_messages[:user_logged_out], msg.chat.id
139
- rescue UserNotLoggedInError => e
140
- send_message e.message, msg.chat.id
141
- end
142
-
143
- def new_chat_event
144
- raise UserNotLoggedInError if user.nil?
145
-
146
- NewChatJob.perform_async(msg.text.split("/").last, user.id, msg.chat.id)
147
- rescue UserNotLoggedInError => e
148
- send_message e.message, msg.chat.id
149
- end
150
-
151
- def select_chat_event
152
- raise UserNotLoggedInError if user.nil?
153
-
154
- title = msg.text.split("/").last
155
- chat = user.chat_by_title(title)
156
- raise ChatNotFoundError if chat.nil?
157
-
158
- raise ChatNotFoundError unless user.update(current_chat_id: chat.id)
159
-
160
- send_message success_messages[:chat_selected], msg.chat.id
161
- rescue UserNotLoggedInError, ChatNotFoundError => e
162
- send_message e.message, msg.chat.id
163
- end
164
-
165
- def audio_event
166
- raise UserNotLoggedInError if user.nil?
167
- raise NoChatSelectedError if user.current_chat.nil?
168
-
169
- user_audio = transcribe_file(telegram_audio_url)
170
- message = Message.new(content: user_audio[:text], chat_id: user.current_chat_id, role: "user")
171
- raise MessageNotSavedError unless message.save
172
-
173
- ai_response = telegram_process_ai_voice(user_audio[:file])
174
- telegram_send_voice_message(voice: ai_response[:voice], text: ai_response[:text])
175
- delete_file ai_response[:voice]
176
- rescue UserNotLoggedInError, NoChatSelectedError, MessageNotSavedError => e
177
- send_message e.message, msg.chat.id
178
- end
179
- end
180
- end