chatgpt_assistant 0.1.2 → 0.1.4
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.
- 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
|