chatgpt_assistant 0.1.6 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/.env_sample +16 -7
  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 +15 -18
  8. data/Rakefile +1 -0
  9. data/docker-compose.yml +8 -4
  10. data/exe/chatgpt_assistant +1 -1
  11. data/lib/{bots → chatgpt_assistant/bots}/application_bot.rb +0 -6
  12. data/lib/chatgpt_assistant/bots/discord/actions.rb +104 -0
  13. data/lib/chatgpt_assistant/bots/discord/auth.rb +36 -0
  14. data/lib/chatgpt_assistant/bots/discord/bot.rb +29 -0
  15. data/lib/chatgpt_assistant/bots/discord/chat_actions.rb +33 -0
  16. data/lib/chatgpt_assistant/bots/discord/events.rb +138 -0
  17. data/lib/chatgpt_assistant/bots/discord/validations.rb +38 -0
  18. data/lib/chatgpt_assistant/bots/discord/voice_actions.rb +33 -0
  19. data/lib/chatgpt_assistant/bots/discord/voice_checkers.rb +35 -0
  20. data/lib/chatgpt_assistant/bots/discord_bot.rb +42 -0
  21. data/lib/chatgpt_assistant/bots/helpers/messenger_helper.rb +16 -0
  22. data/lib/{bots → chatgpt_assistant/bots}/jobs/register_job.rb +2 -2
  23. data/lib/chatgpt_assistant/bots/mailers/account_mailer.rb +30 -0
  24. data/lib/chatgpt_assistant/bots/mailers/application_mailer.rb +21 -0
  25. data/lib/chatgpt_assistant/bots/services/new_chat_service.rb +59 -0
  26. data/lib/chatgpt_assistant/bots/services/register_service.rb +45 -0
  27. data/lib/chatgpt_assistant/bots/telegram/actions.rb +54 -0
  28. data/lib/chatgpt_assistant/bots/telegram/auth.rb +40 -0
  29. data/lib/chatgpt_assistant/bots/telegram/bot.rb +17 -0
  30. data/lib/chatgpt_assistant/bots/telegram/chat_actions.rb +30 -0
  31. data/lib/chatgpt_assistant/bots/telegram/events.rb +120 -0
  32. data/lib/chatgpt_assistant/bots/telegram/events_controller.rb +48 -0
  33. data/lib/chatgpt_assistant/bots/telegram/permissions.rb +48 -0
  34. data/lib/chatgpt_assistant/bots/telegram/validations.rb +55 -0
  35. data/lib/chatgpt_assistant/bots/telegram/voice_actions.rb +36 -0
  36. data/lib/chatgpt_assistant/bots/telegram_bot.rb +44 -0
  37. data/lib/chatgpt_assistant/chatter.rb +10 -2
  38. data/lib/chatgpt_assistant/config.rb +4 -1
  39. data/lib/chatgpt_assistant/default_messages.rb +10 -4
  40. data/lib/chatgpt_assistant/error.rb +9 -0
  41. data/lib/chatgpt_assistant/migrations.rb +5 -0
  42. data/lib/chatgpt_assistant/models.rb +20 -0
  43. data/lib/chatgpt_assistant/version.rb +1 -1
  44. data/lib/chatgpt_assistant.rb +5 -3
  45. metadata +34 -24
  46. data/.env_prod_sample +0 -18
  47. data/docker-compose.prod.yml +0 -34
  48. data/lib/bots/discord_bot.rb +0 -182
  49. data/lib/bots/helpers/authentication_helper.rb +0 -48
  50. data/lib/bots/helpers/discord_helper.rb +0 -124
  51. data/lib/bots/helpers/discord_voice_helper.rb +0 -50
  52. data/lib/bots/helpers/messenger_helper.rb +0 -133
  53. data/lib/bots/helpers/telegram_helper.rb +0 -73
  54. data/lib/bots/helpers/telegram_voice_helper.rb +0 -33
  55. data/lib/bots/helpers/validation_helper.rb +0 -38
  56. data/lib/bots/helpers/visit_helper.rb +0 -28
  57. data/lib/bots/services/new_chat_service.rb +0 -34
  58. data/lib/bots/services/register_service.rb +0 -36
  59. data/lib/bots/telegram_bot.rb +0 -180
  60. /data/lib/{bots → chatgpt_assistant/bots}/helpers/audio_helper.rb +0 -0
  61. /data/lib/{bots → chatgpt_assistant/bots}/helpers/file_helper.rb +0 -0
  62. /data/lib/{bots → chatgpt_assistant/bots}/helpers/search_helper.rb +0 -0
  63. /data/lib/{bots → chatgpt_assistant/bots}/jobs/new_chat_job.rb +0 -0
  64. /data/lib/{bots → chatgpt_assistant/bots}/jobs/voice_connect_job.rb +0 -0
  65. /data/lib/{bots → chatgpt_assistant/bots}/services/voice_connect_service.rb +0 -0
@@ -1,133 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ChatgptAssistant
4
- # Helper for messenger
5
- module MessengerHelper
6
- def chat_success(chat_id)
7
- user_message = Message.new(chat_id: chat_id, content: msg.text, role: "user")
8
- if user_message&.save
9
- text = chatter.chat(msg.text, chat_id, error_messages[:something_went_wrong])
10
- mess = parse_message(text, 4096)
11
- mess.each { |m| send_message m, msg.chat.id }
12
- else
13
- send_message error_messages[:something_went_wrong], msg.chat.id
14
- end
15
- end
16
-
17
- def respond_with_success(chat)
18
- user.update(current_chat_id: chat.id)
19
- send_message success_messages[:chat_created]
20
- end
21
-
22
- def parse_message(message, max_length)
23
- if message.length > max_length
24
- array = message.scan(/.{1,#{max_length}}/) if max_length.positive?
25
- array = ["Something went wrong! Try again later"] if max_length <= 0
26
- else
27
- array = [message]
28
- end
29
- array
30
- end
31
-
32
- def send_message(text, chat_id = nil)
33
- @send_message = bot.respond_to?(:api) ? telegram_send_message(text, chat_id) : discord_send_message(text)
34
- end
35
-
36
- def telegram_send_message(text, chat_id)
37
- messages = parse_message(text, 4096)
38
- messages.each { |m| bot.api.send_message(chat_id: chat_id, text: m) }
39
- end
40
-
41
- def discord_send_message(text)
42
- messages = parse_message(text, 2000)
43
- messages.each { |m| evnt.respond m }
44
- end
45
-
46
- def discord_help_message
47
- help_messages.join("\n").gsub(" /", discord_prefix)
48
- .gsub("register/", "#{discord_prefix}register ")
49
- .gsub("login/", "#{discord_prefix}login ")
50
- .gsub("new_chat/", "#{discord_prefix}new_chat/")
51
- .gsub("sl_chat/", "#{discord_prefix}sl_chat/")
52
- end
53
-
54
- def user_logged_message
55
- user.update(telegram_id: msg.chat.id)
56
- bot.api&.send_message(chat_id: msg.chat.id, text: success_messages[:user_logged_in]) if bot.respond_to?(:api)
57
- evnt&.respond success_messages[:user_logged_in] if evnt.present?
58
- end
59
-
60
- def invalid_command_error_message
61
- bot.api&.send_message(chat_id: msg.chat.id, text: error_messages[:invalid_command]) if bot.respond_to?(:api)
62
- evnt&.respond error_messages[:invalid_command]
63
- end
64
-
65
- def user_not_found_error_message
66
- bot.api&.send_message(chat_id: msg.chat.id, text: error_messages[:user_not_found]) if bot.respond_to?(:api)
67
- evnt&.respond error_messages[:user_not_found] if evnt.present?
68
- end
69
-
70
- def user_created_message
71
- bot.api&.send_message(chat_id: msg.chat.id, text: success_messages[:user_created]) if bot.respond_to?(:api)
72
- evnt&.respond success_messages[:user_created] if evnt.present?
73
- end
74
-
75
- def user_creation_error_message
76
- bot.api&.send_message(chat_id: msg.chat.id, text: error_messages[:user_creation]) if bot.respond_to?(:api)
77
- evnt&.respond error_messages[:user_creation] if evnt.present?
78
- end
79
-
80
- def chat_created_message(chat)
81
- user&.update(current_chat_id: chat.id)
82
- return telegram_created(chat) if bot.respond_to?(:api)
83
-
84
- discord_created(chat)
85
- end
86
-
87
- def telegram_created(chat)
88
- bot.api.send_message(chat_id: msg.chat.id, text: "Intructions sended to actor:\n#{chat.prompt}") unless chat.actor.nil?
89
- bot.api.send_message(chat_id: msg.chat.id, text: "Response from assistant:\n#{chat.messages[1].content}") unless chat.actor.nil?
90
- bot.api.send_message(chat_id: msg.chat.id, text: success_messages[:chat_created]) if bot.respond_to?(:api)
91
- end
92
-
93
- def discord_created(chat)
94
- evnt.respond "Intructions sended to actor:\n#{chat.prompt}" unless chat.actor.nil?
95
- evnt.respond success_messages[:chat_created] if evnt.present?
96
- end
97
-
98
- def not_logged_in_message
99
- bot.api&.send_message(chat_id: msg.chat.id, text: error_messages[:user_not_logged_in]) if bot.respond_to?(:api)
100
- evnt&.respond(error_messages[:user_not_logged_in])
101
- end
102
-
103
- def wrong_password_error_message
104
- bot.api&.send_message(chat_id: msg.chat.id, text: error_messages[:password]) if bot.respond_to?(:api)
105
- evnt&.respond(error_messages[:password])
106
- end
107
-
108
- def chat_not_found_message
109
- bot.api&.send_message(chat_id: msg.chat.id, text: error_messages[:chat_not_found]) if bot.respond_to?(:api)
110
- evnt&.respond(error_messages[:chat_not_found])
111
- end
112
-
113
- def no_chat_selected_message
114
- bot&.api&.send_message(chat_id: msg.chat.id, text: error_messages[:no_chat_selected]) if bot.respond_to?(:api)
115
- evnt&.respond(error_messages[:no_chat_selected])
116
- end
117
-
118
- def no_messages_founded_message
119
- bot&.api&.send_message(chat_id: msg.chat.id, text: error_messages[:no_messages_founded]) if bot.respond_to?(:api)
120
- evnt&.respond(error_messages[:no_messages_founded])
121
- end
122
-
123
- def chat_creation_failed_message
124
- bot&.api&.send_message(chat_id: msg.chat.id, text: error_messages[:chat_creation_failed]) if bot.respond_to?(:api)
125
- evnt&.respond(error_messages[:chat_creation_failed])
126
- end
127
-
128
- def user_logged_in_message
129
- bot.api&.send_message(chat_id: msg.chat.id, text: success_messages[:user_logged_in]) if bot.respond_to?(:api)
130
- evnt&.respond(success_messages[:user_logged_in])
131
- end
132
- end
133
- end
@@ -1,73 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ChatgptAssistant
4
- # Helper for telegram
5
- module TelegramHelper
6
- def user
7
- @user = find_user(telegram_id: msg.chat.id)
8
- end
9
-
10
- def bot
11
- @bot ||= Telegram::Bot::Client.new(telegram_token)
12
- end
13
-
14
- def telegram_chat_event
15
- user ? chat_if_exists : not_logged_in_message
16
- end
17
-
18
- def telegram_user_create(visitor_id, email, password)
19
- visitor = Visitor.find_by(id: visitor_id)
20
- return false unless visitor
21
-
22
- visitor.tel_user.update(telegram_id: nil) if visitor.tel_user.present?
23
- user = User.new(telegram_id: visitor.telegram_id, email: email, password: password)
24
- user.save ? user.email : user.errors.full_messages
25
- end
26
-
27
- def telegram_send_start_message
28
- send_message common_messages[:start], msg.chat.id
29
- help_message = help_messages.join("\n").to_s
30
- send_message help_message, msg.chat.id
31
- send_message common_messages[:start_helper], msg.chat.id
32
- send_message common_messages[:start_sec_helper], msg.chat.id
33
- end
34
-
35
- def telegram_create_chat
36
- text = msg.text
37
- title = text.split("/").last
38
- mode = nil
39
- if title.include?(":")
40
- mode = title.split(":").last
41
- title = title.split(":").first
42
- end
43
- actor_modes = AwesomeChatgptActors::CastControl.actors
44
- return send_message "invalid mode", msg.chat.id unless (mode.to_i >= 1 && mode.to_i <= actor_modes.size + 1) || mode.nil?
45
- return send_message "invalid chat title", msg.chat.id if title.nil? || title.empty?
46
- return send_message "You already have a chat with this title", msg.chat.id if user.chat_by_title(title)
47
-
48
- actor_name = actor_modes[mode.to_i - 1] if mode
49
- actor = AwesomeChatgptActors::Actor.new(prompt_type: actor_name) if actor_name
50
- chat = Chat.new(user_id: user.id, status: 0, title: title, actor: actor_name, prompt: actor.prompt) if actor
51
- chat = Chat.new(user_id: user.id, status: 0, title: title) unless actor
52
- return send_message "Something went wrong", msg.chat.id unless chat
53
-
54
- chat.save ? chat_created_message(chat) : chat_creation_failed_message
55
- end
56
-
57
- def telegram_text_or_audio?
58
- msg.respond_to?(:text) || msg.respond_to?(:audio) || msg.respond_to?(:voice)
59
- end
60
-
61
- def telegram_message_has_text?
62
- msg.text.present?
63
- end
64
-
65
- def telegram_message_has_audio?
66
- msg.audio.present? || msg.voice.present?
67
- end
68
-
69
- def telegram_actions?
70
- msg.text.include?("new_chat/") || msg.text.include?("sl_chat/") || msg.text.include?("login/") || msg.text.include?("register/")
71
- end
72
- end
73
- end
@@ -1,33 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ChatgptAssistant
4
- # Telegram Voice Helper
5
- module TelegramVoiceHelper
6
- def telegram_audio_info
7
- bot.api.get_file(file_id: telegram_audio.file_id)
8
- end
9
-
10
- def telegram_audio_url
11
- "https://api.telegram.org/file/bot#{telegram_token}/#{telegram_audio_info["result"]["file_path"]}"
12
- end
13
-
14
- def telegram_audio
15
- msg.audio || msg.voice
16
- end
17
-
18
- def telegram_process_ai_voice(user_audio)
19
- ai_text = chatter.chat(user_audio["text"], user.current_chat_id, error_messages[:something_went_wrong])
20
- ai_voice = synthesis.synthesize_text(ai_text)
21
- {
22
- voice: ai_voice,
23
- text: ai_text
24
- }
25
- end
26
-
27
- def telegram_send_voice_message(voice: nil, text: nil)
28
- messages = parse_message text, 4096
29
- bot.api.send_voice(chat_id: msg.chat.id, voice: Faraday::UploadIO.new(voice, "audio/mp3"))
30
- messages.each { |message| send_message message, msg.chat.id }
31
- end
32
- end
33
- end
@@ -1,38 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ChatgptAssistant
4
- # This module is responsible for the validation of the bot actions
5
- module ValidationHelper
6
- def valid_for_list_action?
7
- not_logged_in_message if user.nil?
8
- chat_not_found_message if user.chats.count.zero?
9
- !user.nil? && user.chats.count.positive?
10
- end
11
-
12
- def chat_if_exists
13
- chat = Chat.find_by(user_id: user.id, id: user.current_chat_id)
14
- chat ? chat_success(chat.id) : no_chat_selected_message
15
- end
16
-
17
- def visitor_user?
18
- visitor&.tel_user.nil? && visitor&.dis_user.nil?
19
- end
20
-
21
- def discord_voice_bot_disconnected?
22
- user && evnt.user.voice_channel && !evnt.voice && !chat.nil?
23
- end
24
-
25
- def discord_voice_bot_connected?
26
- user && evnt.user.voice_channel && evnt.voice && !chat.nil?
27
- end
28
-
29
- def discord_next_action?
30
- return true if evnt.channel.type != 1 && evnt.channel.name != "ai-spaces"
31
-
32
- %w[login register start help new_chat sl_chat ask list hist connect disconnect speak].each do |action|
33
- return true if evnt.message.content.include?("#{discord_prefix}#{action}")
34
- end
35
- false
36
- end
37
- end
38
- end
@@ -1,28 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ChatgptAssistant
4
- # Helper for visit
5
- module VisitHelper
6
- def telegram_visited?(chat_id)
7
- return unless msg
8
-
9
- visitor = Visitor.find_by(telegram_id: chat_id, name: msg.from.first_name)
10
- if visitor.nil?
11
- Visitor.create(telegram_id: chat_id, name: msg.from.first_name)
12
- else
13
- visitor
14
- end
15
- end
16
-
17
- def discord_visited?(user_id)
18
- return unless evnt
19
-
20
- visitor = Visitor.find_by(discord_id: user_id, name: evnt.user.name)
21
- if visitor.nil?
22
- Visitor.create(discord_id: user_id, name: evnt.user.name)
23
- else
24
- visitor
25
- end
26
- end
27
- end
28
- end
@@ -1,34 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ChatgptAssistant
4
- # This class is responsible to background the new chat service
5
- class NewChatService
6
- def initialize(chat_title, user_id, chat_id, config)
7
- @chat_title = chat_title
8
- @user_id = user_id
9
- @chat_id = chat_id
10
- @config = config
11
- end
12
-
13
- def telegram_async
14
- TelegramBot.new(@config)
15
- end
16
-
17
- def call
18
- raise ChatAlreadyExistsError if Chat.find_by(title: @chat_title)
19
- raise NilError if @chat_title.nil?
20
- raise NilError if @user_id.nil?
21
- raise NilError if @chat_id.nil?
22
-
23
- chat = Chat.new(title: @chat_title, user_id: @user_id)
24
- if chat.save
25
- telegram_async.send_message("Chat created succesfully", @chat_id)
26
- else
27
- raise ChatAlreadyExistsError if Chat.find_by(title: @chat_title)
28
- raise NilError if chat.errors[:title].any?
29
- end
30
- rescue ChatAlreadyExistsError, NilError => e
31
- telegram_async.send_message(e.message, @chat_id)
32
- end
33
- end
34
- end
@@ -1,36 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ChatgptAssistant
4
- # This class is responsible to background the register service
5
- class RegisterService
6
- def initialize(email, password, chat_id)
7
- @email = email
8
- @password = password
9
- @chat_id = chat_id
10
- @config = Config.new
11
- @config.db_connection
12
- end
13
-
14
- def telegram_async
15
- TelegramBot.new(@config)
16
- end
17
-
18
- def call
19
- user = User.find_by(email: @email)
20
- if user
21
- telegram_async.send_message("User already exists", @chat_id)
22
- else
23
- user = User.new(email: @email, password: @password, telegram_id: @chat_id)
24
- if user.save
25
- telegram_async.send_message("User created", @chat_id)
26
- else
27
- raise UserAlreadyExistsError if User.find_by(email: @email)
28
- raise WrongEmailError if user.errors[:email].any?
29
- raise WrongPasswordError if user.errors[:password].any?
30
- end
31
- end
32
- rescue UserAlreadyExistsError, WrongEmailError, WrongPasswordError => e
33
- telegram_async.send_message(e.message, @chat_id)
34
- end
35
- end
36
- end
@@ -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