chatgpt_assistant 0.1.2 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.env_prod_sample +1 -1
- data/.env_sample +1 -1
- data/.rubocop.yml +17 -5
- data/Dockerfile +2 -5
- data/Gemfile +1 -1
- data/Gemfile.lock +6 -6
- data/SECURITY.md +15 -0
- data/exe/chatgpt_assistant +2 -2
- data/exe/chatgpt_bot +1 -1
- data/lib/bots/application_bot.rb +22 -91
- data/lib/bots/discord_bot.rb +102 -241
- data/lib/bots/helpers/audio_helper.rb +18 -0
- data/lib/bots/helpers/authentication_helper.rb +47 -0
- data/lib/bots/helpers/discord_helper.rb +102 -0
- data/lib/bots/helpers/discord_voice_helper.rb +50 -0
- data/lib/bots/helpers/file_helper.rb +10 -0
- data/lib/bots/helpers/logger_action_helper.rb +14 -0
- data/lib/bots/helpers/messenger_helper.rb +134 -0
- data/lib/bots/helpers/search_helper.rb +34 -0
- data/lib/bots/helpers/telegram_helper.rb +89 -0
- data/lib/bots/helpers/validation_helper.rb +29 -0
- data/lib/bots/helpers/visit_helper.rb +24 -0
- data/lib/bots/telegram_bot.rb +120 -235
- data/lib/chatgpt_assistant/audio_recognition.rb +31 -32
- data/lib/chatgpt_assistant/audio_synthesis.rb +72 -76
- data/lib/chatgpt_assistant/chatter.rb +34 -27
- data/lib/chatgpt_assistant/config.rb +22 -18
- data/lib/chatgpt_assistant/default_messages.rb +108 -108
- data/lib/chatgpt_assistant/migrations.rb +62 -4
- data/lib/chatgpt_assistant/models.rb +53 -7
- data/lib/chatgpt_assistant/version.rb +1 -1
- data/lib/chatgpt_assistant.rb +25 -13
- data/workflows/deploy.yml +19 -0
- data/workflows/deploy_and_build.yml +19 -0
- metadata +22 -6
data/lib/bots/discord_bot.rb
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative "helpers/discord_helper"
|
4
|
+
require_relative "helpers/discord_voice_helper"
|
5
|
+
|
3
6
|
module ChatgptAssistant
|
4
7
|
# This class is responsible to handle the discord bot
|
5
8
|
class DiscordBot < ApplicationBot
|
@@ -21,274 +24,132 @@ module ChatgptAssistant
|
|
21
24
|
|
22
25
|
private
|
23
26
|
|
24
|
-
|
25
|
-
|
27
|
+
include DiscordHelper
|
28
|
+
include DiscordVoiceHelper
|
26
29
|
|
27
|
-
|
28
|
-
|
29
|
-
token: discord_token,
|
30
|
-
client_id: discord_client_id,
|
31
|
-
prefix: discord_prefix
|
32
|
-
)
|
33
|
-
end
|
30
|
+
attr_reader :message
|
31
|
+
attr_accessor :evnt, :user, :chats, :chat
|
34
32
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
33
|
+
def start_event
|
34
|
+
bot.command :start do |event|
|
35
|
+
@evnt = event
|
36
|
+
@user = event.user
|
37
|
+
start_action
|
38
|
+
end
|
40
39
|
end
|
41
|
-
end
|
42
|
-
|
43
|
-
def start_action
|
44
|
-
evnt.respond commom_messages[:start_helper].gsub("register/", "gpt!register ")
|
45
|
-
evnt.respond commom_messages[:start_sec_helper].gsub("login/", "gpt!login ")
|
46
|
-
end
|
47
40
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
41
|
+
def login_event
|
42
|
+
bot.command :login do |event|
|
43
|
+
@message = event.message.content.split[1]
|
44
|
+
@evnt = event
|
45
|
+
message.nil? ? event.respond(commom_messages[:login]) : login_action
|
46
|
+
end
|
53
47
|
end
|
54
|
-
end
|
55
48
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
when "wrong password"
|
63
|
-
evnt.respond error_messages[:wrong_password]
|
64
|
-
when find_useremail(user_email)
|
65
|
-
evnt.respond success_messages[:user_logged_in]
|
49
|
+
def register_event
|
50
|
+
bot.command :register do |event|
|
51
|
+
@message = event.message.content.split[1]
|
52
|
+
@evnt = event
|
53
|
+
message.nil? ? event.respond(commom_messages[:register]) : register_action
|
54
|
+
end
|
66
55
|
end
|
67
|
-
end
|
68
56
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
57
|
+
def list_event
|
58
|
+
bot.command :list do |event|
|
59
|
+
@evnt = event
|
60
|
+
@user = find_user(discord_id: event.user.id)
|
61
|
+
event.respond error_messages[:user_not_logged_in] if user.nil?
|
62
|
+
event.respond error_messages[:chat_not_found] if user.chats.empty? && user
|
63
|
+
list_action if user && !user.chats.empty?
|
64
|
+
end
|
74
65
|
end
|
75
|
-
end
|
76
|
-
|
77
|
-
def register_action
|
78
|
-
user_email = message.split(":")[0]
|
79
|
-
user_password = message.split(":")[1]
|
80
|
-
find_useremail(user_email).nil? ? create_user_action(user_email, user_password) : evnt.respond(error_messages[:user_already_exists])
|
81
|
-
end
|
82
|
-
|
83
|
-
def create_user_action(mail, pass)
|
84
|
-
id = evnt.user.id
|
85
|
-
name = evnt.user.username
|
86
|
-
discord_user_create(id, mail, pass, name) ? evnt.respond(success_messages[:user_created]) : evnt.respond(error_messages[:user_not_created])
|
87
|
-
end
|
88
|
-
|
89
|
-
def list_event
|
90
|
-
bot.command :list do |event|
|
91
|
-
@evnt = event
|
92
|
-
@user = find_userdiscord(event.user.id)
|
93
|
-
event.respond error_messages[:user_not_logged_in] if user.nil?
|
94
|
-
event.respond error_messages[:chat_not_found] if user.chats.empty? && user
|
95
|
-
list_action if user && !user.chats.empty?
|
96
|
-
end
|
97
|
-
end
|
98
66
|
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
@user = find_userdiscord(event.user.id)
|
109
|
-
event.respond error_messages[:user_not_logged_in] if user.nil?
|
110
|
-
title = event.message.content.split(" ")[1..].join(" ")
|
111
|
-
@chat = user.chat_by_title(title)
|
112
|
-
event.respond error_messages[:chat_not_found] if chat.nil? && user
|
113
|
-
hist_action if user && chat
|
67
|
+
def hist_event
|
68
|
+
bot.command :hist do |event|
|
69
|
+
@evnt = event
|
70
|
+
event.respond error_messages[:user_not_logged_in] if user.nil?
|
71
|
+
title = event.message.content.split[1..].join(" ")
|
72
|
+
@chat = user.chat_by_title(title)
|
73
|
+
event.respond error_messages[:chat_not_found] if chat.nil? && user
|
74
|
+
hist_action if user && chat
|
75
|
+
end
|
114
76
|
end
|
115
|
-
end
|
116
77
|
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
78
|
+
def help_event
|
79
|
+
bot.command :help do |event|
|
80
|
+
@evnt = event
|
81
|
+
help_action
|
82
|
+
end
|
121
83
|
end
|
122
|
-
"This is the end of the chat history"
|
123
|
-
end
|
124
84
|
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
85
|
+
def new_chat_event
|
86
|
+
bot.command :new_chat do |event|
|
87
|
+
@evnt = event
|
88
|
+
@user = find_user(discord_id: event.user.id)
|
89
|
+
event.respond error_messages[:user_not_logged_in] if user.nil?
|
90
|
+
create_chat_action if user
|
91
|
+
end
|
129
92
|
end
|
130
|
-
end
|
131
93
|
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
evnt.respond message
|
139
|
-
end
|
94
|
+
def sl_chat_event
|
95
|
+
bot.command :sl_chat do |event|
|
96
|
+
@evnt = event
|
97
|
+
chat_to_select = event.message.content.split[1..].join(" ")
|
98
|
+
@user = find_user(discord_id: event.user.id)
|
99
|
+
event.respond error_messages[:user_not_logged_in] if user.nil?
|
140
100
|
|
141
|
-
|
142
|
-
|
143
|
-
@evnt = event
|
144
|
-
@user = find_userdiscord(event.user.id)
|
145
|
-
event.respond error_messages[:user_not_logged_in] if user.nil?
|
146
|
-
create_chat_action if user
|
101
|
+
sl_chat_action(chat_to_select) if user
|
102
|
+
end
|
147
103
|
end
|
148
|
-
end
|
149
104
|
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
evnt.respond success_messages[:chat_created]
|
159
|
-
end
|
160
|
-
|
161
|
-
def sl_chat_event
|
162
|
-
bot.command :sl_chat do |event|
|
163
|
-
@evnt = event
|
164
|
-
chat_to_select = event.message.content.split(" ")[1..].join(" ")
|
165
|
-
@user = find_userdiscord(event.user.id)
|
166
|
-
event.respond error_messages[:user_not_logged_in] if user.nil?
|
167
|
-
|
168
|
-
sl_chat_action(chat_to_select) if user
|
105
|
+
def ask_event
|
106
|
+
bot.command :ask do |event|
|
107
|
+
@evnt = event
|
108
|
+
@message = event.message.content.split[1..].join(" ")
|
109
|
+
@user = find_user(discord_id: event.user.id)
|
110
|
+
event.respond error_messages[:user_not_logged_in] if user.nil?
|
111
|
+
ask_action if user
|
112
|
+
end
|
169
113
|
end
|
170
|
-
end
|
171
|
-
|
172
|
-
def sl_chat_action(chat_to_select)
|
173
|
-
@chat = user.chat_by_title(chat_to_select)
|
174
|
-
evnt.respond error_messages[:chat_not_found] if chat.nil?
|
175
|
-
user.update(current_chat_id: chat.id) if chat
|
176
|
-
evnt.respond success_messages[:chat_selected] if chat
|
177
|
-
end
|
178
114
|
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
115
|
+
def voice_connect_event
|
116
|
+
bot.command :connect do |event|
|
117
|
+
@evnt = event
|
118
|
+
@user = find_user(discord_id: event.user.id)
|
119
|
+
@chat = Chat.where(id: user.current_chat_id).last
|
120
|
+
voice_connect_checker_action
|
121
|
+
voice_connection_checker_action
|
122
|
+
discord_voice_bot_connect
|
123
|
+
end
|
186
124
|
end
|
187
|
-
end
|
188
|
-
|
189
|
-
def ask_action
|
190
|
-
@chat = Chat.where(id: user.current_chat_id).last
|
191
|
-
evnt.respond error_messages[:chat_not_found] if chat.nil?
|
192
|
-
@message = Message.new(chat_id: chat.id, content: message, role: "user") if chat
|
193
|
-
(message.save ? answer_action : evnt.respond(error_messages[:message_not_saved])) if chat
|
194
|
-
end
|
195
|
-
|
196
|
-
def answer_action
|
197
|
-
response = chatter.chat(message.content, chat.id)
|
198
|
-
evnt.respond response
|
199
|
-
end
|
200
125
|
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
bot.voice_connect(event.user.voice_channel) if bot_disconnected?
|
209
|
-
bot_connected? ? "Connected to voice channel" : "Error connecting to voice channel"
|
126
|
+
def disconnect_event
|
127
|
+
bot.command :disconnect do |event|
|
128
|
+
@evnt = event
|
129
|
+
@user = find_user(discord_id: event.user.id)
|
130
|
+
disconnect_checker_action
|
131
|
+
disconnect_action if user && event.user.voice_channel && event.voice
|
132
|
+
end
|
210
133
|
end
|
211
|
-
end
|
212
|
-
|
213
|
-
def voice_connect_checker_action
|
214
|
-
evnt.respond error_messages[:user_not_logged_in] if user.nil?
|
215
|
-
evnt.respond error_messages[:chat_not_found] if user && chat.nil?
|
216
|
-
end
|
217
134
|
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
user && evnt.user.voice_channel && evnt.voice && !chat.nil?
|
229
|
-
end
|
230
|
-
|
231
|
-
def disconnect_event
|
232
|
-
bot.command :disconnect do |event|
|
233
|
-
@evnt = event
|
234
|
-
@user = find_userdiscord(event.user.id)
|
235
|
-
disconnect_checker_action
|
236
|
-
disconnect_action if user && event.user.voice_channel && event.voice
|
135
|
+
def speak_event
|
136
|
+
bot.command :speak do |event|
|
137
|
+
@evnt = event
|
138
|
+
@message = event.message.content.split[1..].join(" ")
|
139
|
+
@user = find_user(discord_id: event.user.id)
|
140
|
+
@chat = user.current_chat
|
141
|
+
speak_connect_checker_action
|
142
|
+
speak_connection_checker_action
|
143
|
+
ask_to_speak_action if user && event.user.voice_channel && event.voice && !chat.nil?
|
144
|
+
end
|
237
145
|
end
|
238
|
-
end
|
239
146
|
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
def disconnect_action
|
247
|
-
bot.voice_destroy(evnt.user.voice_channel)
|
248
|
-
"Disconnected from voice channel"
|
249
|
-
end
|
250
|
-
|
251
|
-
def speak_event
|
252
|
-
bot.command :speak do |event|
|
253
|
-
@evnt = event
|
254
|
-
@message = event.message.content.split(" ")[1..].join(" ")
|
255
|
-
@user = find_userdiscord(event.user.id)
|
256
|
-
@chat = user.current_chat
|
257
|
-
speak_connect_checker_action
|
258
|
-
speak_connection_checker_action
|
259
|
-
ask_to_speak_action if user && event.user.voice_channel && event.voice && !chat.nil?
|
147
|
+
def bot_init
|
148
|
+
at_exit { bot.stop }
|
149
|
+
bot.run
|
150
|
+
rescue StandardError => e
|
151
|
+
Error.create(message: e.message, backtrace: e.backtrace)
|
152
|
+
retry
|
260
153
|
end
|
261
|
-
end
|
262
|
-
|
263
|
-
def speak_connect_checker_action
|
264
|
-
evnt.respond error_messages[:user_not_logged_in] if user.nil?
|
265
|
-
evnt.respond error_messages[:chat_not_found] if user && evnt.user.voice_channel && evnt.voice && chat.nil?
|
266
|
-
end
|
267
|
-
|
268
|
-
def speak_connection_checker_action
|
269
|
-
evnt.respond error_messages[:user_not_in_voice_channel] if evnt.user.voice_channel.nil? && user
|
270
|
-
evnt.respond error_messages[:bot_not_in_voice_channel] if !evnt.voice && user
|
271
|
-
end
|
272
|
-
|
273
|
-
def ask_to_speak_action
|
274
|
-
Message.create(chat_id: chat.id, content: message, role: "user")
|
275
|
-
response = chatter.chat(message, chat.id)
|
276
|
-
audio_path = audio_synthesis.synthesize_text(response)
|
277
|
-
speak_answer_action(audio_path, response)
|
278
|
-
end
|
279
|
-
|
280
|
-
def speak_answer_action(audio_path, response)
|
281
|
-
evnt.respond response
|
282
|
-
evnt.voice.play_file(audio_path)
|
283
|
-
delete_all_voice_files
|
284
|
-
"OK"
|
285
|
-
end
|
286
|
-
|
287
|
-
def bot_init
|
288
|
-
at_exit { bot.stop }
|
289
|
-
bot.run
|
290
|
-
rescue StandardError
|
291
|
-
start
|
292
|
-
end
|
293
154
|
end
|
294
155
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ChatgptAssistant
|
4
|
+
# Helper for audio
|
5
|
+
module AudioHelper
|
6
|
+
def recognition
|
7
|
+
@recognition ||= AudioRecognition.new(openai_api_key)
|
8
|
+
end
|
9
|
+
|
10
|
+
def synthesis
|
11
|
+
@synthesis ||= AudioSynthesis.new(config)
|
12
|
+
end
|
13
|
+
|
14
|
+
def transcribe_file(url)
|
15
|
+
recognition.transcribe_audio(url)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ChatgptAssistant
|
4
|
+
# Helper for authentication
|
5
|
+
module AuthenticationHelper
|
6
|
+
def valid_password?(password, hash, salt)
|
7
|
+
BCrypt::Engine.hash_secret(password, salt) == hash
|
8
|
+
end
|
9
|
+
|
10
|
+
def telegram_user_auth(email, password, telegram_id)
|
11
|
+
return "wrong password" if password.nil?
|
12
|
+
|
13
|
+
visitor_access = find_visitor(telegram_id: telegram_id)
|
14
|
+
return "something went wrong" unless visitor_access
|
15
|
+
|
16
|
+
new_access = find_user(email: email)
|
17
|
+
return "user not found" unless new_access
|
18
|
+
|
19
|
+
hash = new_access.password_hash
|
20
|
+
salt = new_access.password_salt
|
21
|
+
valid_password?(password, hash, salt) ? telegram_user_access(visitor_access, new_access) : "wrong password"
|
22
|
+
end
|
23
|
+
|
24
|
+
def telegram_user_access(visitor, new_access)
|
25
|
+
other_access = where_user(telegram_id: visitor.telegram_id)
|
26
|
+
other_access&.each { |access| access.update(telegram_id: nil) }
|
27
|
+
new_access.update(telegram_id: visitor.telegram_id)
|
28
|
+
new_access.email
|
29
|
+
end
|
30
|
+
|
31
|
+
def discord_user_auth(email, password, discord_id)
|
32
|
+
user = find_user(email: email)
|
33
|
+
return "user not found" unless user
|
34
|
+
return "wrong passwords" if password.nil?
|
35
|
+
|
36
|
+
valid_password?(password, user.password_hash, user.password_salt) ? discord_user_access(discord_id, user.email) : "wrong password"
|
37
|
+
end
|
38
|
+
|
39
|
+
def discord_user_access(discord_id, user_email)
|
40
|
+
last_access = find_user(discord_id: discord_id)
|
41
|
+
new_access = find_user(email: user_email)
|
42
|
+
last_acess.update(discord_id: nil) if last_access&.email != new_access&.email
|
43
|
+
new_access&.update(discord_id: discord_id)
|
44
|
+
new_access.email
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ChatgptAssistant
|
4
|
+
# Helper for discord
|
5
|
+
module DiscordHelper
|
6
|
+
def bot
|
7
|
+
@bot ||= Discordrb::Commands::CommandBot.new(
|
8
|
+
token: discord_token,
|
9
|
+
client_id: discord_client_id,
|
10
|
+
prefix: discord_prefix
|
11
|
+
)
|
12
|
+
end
|
13
|
+
|
14
|
+
def start_action
|
15
|
+
send_message commom_messages[:start_helper].gsub("register/", "gpt!register ")
|
16
|
+
send_message commom_messages[:start_sec_helper].gsub("login/", "gpt!login ")
|
17
|
+
end
|
18
|
+
|
19
|
+
def login_action
|
20
|
+
user_email, user_password = message.split(":")
|
21
|
+
case discord_user_auth(user_email, user_password, evnt.user.id)
|
22
|
+
when "user not found"
|
23
|
+
send_message error_messages[:user_not_found]
|
24
|
+
when "wrong password"
|
25
|
+
puts "wrong password"
|
26
|
+
send_message error_messages[:wrong_password]
|
27
|
+
when find_user(email: user_email).email
|
28
|
+
send_message success_messages[:user_logged_in]
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def create_user_action(mail, pass)
|
33
|
+
id = evnt.user.id
|
34
|
+
return send_message(success_messages[:user_created]) if discord_user_create(id, mail, pass)
|
35
|
+
|
36
|
+
send_message(error_messages[:user_not_created])
|
37
|
+
end
|
38
|
+
|
39
|
+
def register_action
|
40
|
+
user_email = message.split(":")[0]
|
41
|
+
user_password = message.split(":")[1]
|
42
|
+
return create_user_action(user_email, user_password) if find_user(email: user_email).nil?
|
43
|
+
|
44
|
+
send_message(error_messages[:user_already_exists])
|
45
|
+
end
|
46
|
+
|
47
|
+
def list_action
|
48
|
+
chats_title = user.chats.map(&:title)
|
49
|
+
send_message commom_messages[:chat_list]
|
50
|
+
send_message chats_title.join("\n")
|
51
|
+
end
|
52
|
+
|
53
|
+
def hist_action
|
54
|
+
messages = Message.where(chat_id: chat.id).order(:created_at)
|
55
|
+
messages.each { |m| send_message "#{m.role} - #{m.content}\n#{m.created_at.strftime("%d/%m/%Y %H:%M")}" }
|
56
|
+
"This is the end of the chat history"
|
57
|
+
end
|
58
|
+
|
59
|
+
def help_action
|
60
|
+
message = discord_help_message
|
61
|
+
send_message message
|
62
|
+
end
|
63
|
+
|
64
|
+
def ask_action
|
65
|
+
@chat = Chat.where(id: user.current_chat_id).last
|
66
|
+
send_message error_messages[:chat_not_found] if chat.nil?
|
67
|
+
@message = Message.new(chat_id: chat.id, content: message, role: "user") if chat
|
68
|
+
(message.save ? answer_action : send_message(error_messages[:message_not_saved])) if chat
|
69
|
+
end
|
70
|
+
|
71
|
+
def sl_chat_action(chat_to_select)
|
72
|
+
@chat = user.chat_by_title(chat_to_select)
|
73
|
+
send_message error_messages[:chat_not_found] if chat.nil?
|
74
|
+
user.update(current_chat_id: chat.id) if chat
|
75
|
+
send_message success_messages[:chat_selected] if chat
|
76
|
+
end
|
77
|
+
|
78
|
+
def create_chat_action
|
79
|
+
chat_title = evnt.message.content.split[1..].join(" ")
|
80
|
+
@chat = Chat.new(user_id: user.id, title: chat_title, status: 0)
|
81
|
+
chat.save ? respond_with_success : send_message(error_messages[:chat_creation])
|
82
|
+
end
|
83
|
+
|
84
|
+
def answer_action
|
85
|
+
response = chatter.chat(message.content, chat.id)
|
86
|
+
send_message response
|
87
|
+
end
|
88
|
+
|
89
|
+
def disconnect_checker_action
|
90
|
+
send_message error_messages[:user_not_logged_in] if user.nil?
|
91
|
+
send_message error_messages[:user_not_in_voice_channel] if evnt.user.voice_channel.nil? && user
|
92
|
+
send_message error_messages[:user_not_connected] if !evnt.voice && user
|
93
|
+
end
|
94
|
+
|
95
|
+
def discord_user_create(discord_id, email, password)
|
96
|
+
user = User.new(discord_id: discord_id, email: email, password: password)
|
97
|
+
last_access = find_user(discord_id: discord_id)
|
98
|
+
last_access&.update(discord_id: nil)
|
99
|
+
user.save
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ChatgptAssistant
|
4
|
+
# Helper for voice actions
|
5
|
+
module DiscordVoiceHelper
|
6
|
+
def voice_connect_checker_action
|
7
|
+
send_message error_messages[:user_not_logged_in] if user.nil?
|
8
|
+
send_message error_messages[:chat_not_found] if user && chat.nil?
|
9
|
+
end
|
10
|
+
|
11
|
+
def voice_connection_checker_action
|
12
|
+
send_message error_messages[:user_not_in_voice_channel] if evnt.user.voice_channel.nil? && user
|
13
|
+
send_message error_messages[:bot_already_connected] if evnt.voice && user
|
14
|
+
end
|
15
|
+
|
16
|
+
def speak_connect_checker_action
|
17
|
+
send_message error_messages[:user_not_logged_in] if user.nil?
|
18
|
+
send_message error_messages[:chat_not_found] if user && evnt.user.voice_channel && evnt.voice && chat.nil?
|
19
|
+
end
|
20
|
+
|
21
|
+
def speak_connection_checker_action
|
22
|
+
send_message error_messages[:user_not_in_voice_channel] if evnt.user.voice_channel.nil? && user
|
23
|
+
send_message error_messages[:bot_not_in_voice_channel] if !evnt.voice && user
|
24
|
+
end
|
25
|
+
|
26
|
+
def ask_to_speak_action
|
27
|
+
Message.create(chat_id: chat.id, content: message, role: "user")
|
28
|
+
response = chatter.chat(message, chat.id)
|
29
|
+
audio_path = synthesis.synthesize_text(response)
|
30
|
+
speak_answer_action(audio_path, response)
|
31
|
+
end
|
32
|
+
|
33
|
+
def speak_answer_action(audio_path, response)
|
34
|
+
send_message response
|
35
|
+
evnt.voice.play_file(audio_path)
|
36
|
+
delete_file audio_path
|
37
|
+
"OK"
|
38
|
+
end
|
39
|
+
|
40
|
+
def discord_voice_bot_connect
|
41
|
+
bot.voice_connect(evnt.user.voice_channel) if discord_voice_bot_disconnected?
|
42
|
+
discord_voice_bot_connected? ? "Connected to voice channel" : "Error connecting to voice channel"
|
43
|
+
end
|
44
|
+
|
45
|
+
def disconnect_action
|
46
|
+
bot.voice_destroy(evnt.user.voice_channel)
|
47
|
+
"Disconnected from voice channel"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ChatgptAssistant
|
4
|
+
# Helper for logger action
|
5
|
+
module LoggerActionHelper
|
6
|
+
def register_visitor_action(action, visitor_id)
|
7
|
+
VisitorAction.create(visitor_id: visitor_id, action: action, description: msg.text)
|
8
|
+
end
|
9
|
+
|
10
|
+
def register_user_action(action, user_id)
|
11
|
+
UserAction.create(user_id: user_id, action: action, description: msg.text)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|