chatgpt_assistant 0.1.5 → 0.1.6
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_sample +1 -1
- data/.rubocop.yml +4 -4
- data/Gemfile +18 -6
- data/Gemfile.lock +62 -59
- data/README.md +14 -13
- data/docker-compose.prod.yml +1 -1
- data/docker-compose.yml +18 -0
- data/exe/chatgpt_bot +3 -0
- data/lib/bots/application_bot.rb +15 -5
- data/lib/bots/discord_bot.rb +6 -9
- data/lib/bots/helpers/authentication_helper.rb +3 -2
- data/lib/bots/helpers/discord_helper.rb +4 -4
- data/lib/bots/helpers/messenger_helper.rb +14 -15
- data/lib/bots/helpers/search_helper.rb +3 -3
- data/lib/bots/helpers/telegram_helper.rb +3 -7
- data/lib/bots/helpers/validation_helper.rb +1 -1
- data/lib/bots/helpers/visit_helper.rb +4 -0
- data/lib/bots/jobs/new_chat_job.rb +17 -0
- data/lib/bots/jobs/register_job.rb +16 -0
- data/lib/bots/jobs/voice_connect_job.rb +14 -0
- data/lib/bots/services/new_chat_service.rb +34 -0
- data/lib/bots/services/register_service.rb +36 -0
- data/lib/bots/services/voice_connect_service.rb +29 -0
- data/lib/bots/telegram_bot.rb +70 -39
- data/lib/chatgpt_assistant/config.rb +23 -1
- data/lib/chatgpt_assistant/default_messages.rb +72 -30
- data/lib/chatgpt_assistant/error.rb +219 -0
- data/lib/chatgpt_assistant/models.rb +18 -13
- data/lib/chatgpt_assistant/sidekiq.rb +7 -0
- data/lib/chatgpt_assistant/sidekiq.yml +10 -0
- data/lib/chatgpt_assistant/version.rb +1 -1
- data/lib/chatgpt_assistant.rb +3 -12
- data/prompts-data/{awesome-chatgpt-prompts.csv → awesome-en-prompts.csv} +164 -164
- data/prompts-data/awesome-pt-prompts.csv +164 -0
- metadata +14 -5
- data/lib/bots/helpers/logger_action_helper.rb +0 -7
@@ -3,15 +3,15 @@
|
|
3
3
|
module ChatgptAssistant
|
4
4
|
# This class is responsible for storing the default messages
|
5
5
|
class DefaultMessages
|
6
|
-
def initialize(language = "en")
|
6
|
+
def initialize(language = "en", _discord_prefix = "!")
|
7
7
|
@language = language
|
8
8
|
load_message_context
|
9
9
|
end
|
10
10
|
|
11
|
-
attr_reader :language, :
|
11
|
+
attr_reader :language, :common_messages, :success_messages, :error_messages, :help_messages
|
12
12
|
|
13
13
|
def load_message_context
|
14
|
-
@
|
14
|
+
@common_messages = send("common_messages_#{language}")
|
15
15
|
@success_messages = send("success_messages_#{language}")
|
16
16
|
@error_messages = send("error_messages_#{language}")
|
17
17
|
@help_messages = send("help_messages_#{language}")
|
@@ -19,7 +19,7 @@ module ChatgptAssistant
|
|
19
19
|
|
20
20
|
private
|
21
21
|
|
22
|
-
def
|
22
|
+
def common_messages_pt
|
23
23
|
{
|
24
24
|
start: "Olá, eu sou o Chatgpt Assistant, um chatbot que usa a API da OpenAI para responder suas perguntas no Telegram e Discord.",
|
25
25
|
stop: "Até mais!",
|
@@ -42,6 +42,7 @@ module ChatgptAssistant
|
|
42
42
|
chat_created: "Chat criado com sucesso!",
|
43
43
|
chat_selected: "Chat selecionado com sucesso!",
|
44
44
|
user_logged_in: "Login realizado com sucesso!",
|
45
|
+
user_logged_out: "Logout realizado com sucesso!",
|
45
46
|
voice_channel_connected: "O bot entrou no canal de voz com sucesso!"
|
46
47
|
}
|
47
48
|
end
|
@@ -49,26 +50,34 @@ module ChatgptAssistant
|
|
49
50
|
def error_messages_pt
|
50
51
|
{
|
51
52
|
nil: "Não entendi o que você disse. Tente novamente",
|
52
|
-
|
53
|
-
password: "A senha que você digitou não é válida. Tente novamente",
|
53
|
+
wrong_email: "O email que você digitou não é válido. Tente novamente",
|
54
54
|
wrong_password: "A senha que você digitou não é válida. Tente novamente",
|
55
|
-
|
56
|
-
user_creation: "Erro ao criar usuário. Tente novamente",
|
55
|
+
|
57
56
|
user_already_exists: "O usuário que você digitou já existe. Tente novamente",
|
58
|
-
|
59
|
-
|
57
|
+
chat_already_exists: "Você já possui um chat com este titulo. Tente novamente",
|
58
|
+
|
59
|
+
no_register_info: "Você não digitou o email e a senha. Tente novamente",
|
60
|
+
sign_up_error: "Erro ao criar usuário. Tente novamente",
|
61
|
+
chat_not_created_error: "Erro ao criar chat. Tente novamente",
|
62
|
+
message_not_created_error: "Erro ao criar mensagem. Tente novamente",
|
60
63
|
no_chat_selected: "Nenhum chat selecionado",
|
61
|
-
|
64
|
+
|
65
|
+
no_messages_founded: "Nenhuma mensagem encontrada",
|
62
66
|
no_chats_founded: "Nenhum chat encontrado",
|
67
|
+
chat_not_found: "Chat não encontrado",
|
68
|
+
user_not_found: "O usuário que você digitou não existe. Tente novamente",
|
69
|
+
user_not_registered: "O usuário não está registrado no sistema",
|
70
|
+
user_logged_in: "Usuário está logado no sistema, faça logout para continuar",
|
63
71
|
user_not_logged_in: "Usuário não logado",
|
64
|
-
|
65
|
-
something_went_wrong: "Algo deu errado. Tente novamente mais tarde.",
|
66
|
-
message_history_too_long: "O histórico mensagem é muito longo.",
|
67
|
-
text_length: "O texto de resposta é muito longo. Tente diminuir a quantidade de respostas na mesma mensagem.",
|
72
|
+
|
68
73
|
user_not_in_voice_channel: "Você não está em um canal de voz.",
|
69
74
|
bot_not_in_voice_channel: "O bot não está em um canal de voz.",
|
75
|
+
|
76
|
+
message_history_too_long: "O histórico mensagem é muito longo.",
|
77
|
+
text_length_too_long: "O texto de resposta é muito longo. Tente diminuir a quantidade de respostas na mesma mensagem.",
|
78
|
+
|
70
79
|
invalid_command: "Comando inválido. Tente novamente.",
|
71
|
-
|
80
|
+
something_went_wrong: "Algo deu errado. Tente novamente mais tarde."
|
72
81
|
}
|
73
82
|
end
|
74
83
|
|
@@ -83,7 +92,18 @@ module ChatgptAssistant
|
|
83
92
|
"Para ver esta mensagem novamente, digite /help"]
|
84
93
|
end
|
85
94
|
|
86
|
-
def
|
95
|
+
def help_message_discord_pt
|
96
|
+
["Para começar a conversar comigo, digite #{discord_prefix}start",
|
97
|
+
"Para parar de conversar comigo, digite #{discord_prefix}stop",
|
98
|
+
"Para se registrar no sistema, digite #{discord_prefix}register email:senha (a senha deve ser um numero de 4 digitos ex: 1234)",
|
99
|
+
"Para fazer login no sistema, digite #{discord_prefix}login email:senha (a senha deve ser um numero de 4 digitos ex: 1234)",
|
100
|
+
"Para criar um novo chat, digite #{discord_prefix}new_chat nome do chat",
|
101
|
+
"Para selecionar um chat, digite #{discord_prefix}sl_chat nome do chat",
|
102
|
+
"Para listar os chats que você criou, digite #{discord_prefix}list",
|
103
|
+
"Para ver esta mensagem novamente, digite #{discord_prefix}help"]
|
104
|
+
end
|
105
|
+
|
106
|
+
def common_messages_en
|
87
107
|
{
|
88
108
|
start: "Hello, I'm the Chatgpt Assistant, a chatbot that uses the OpenAI API to answer your questions on Telegram and Discord.",
|
89
109
|
stop: "See you later!",
|
@@ -105,32 +125,43 @@ module ChatgptAssistant
|
|
105
125
|
user_created: "User created successfully!",
|
106
126
|
chat_created: "Chat created successfully!",
|
107
127
|
chat_selected: "Chat selected successfully!",
|
108
|
-
user_logged_in: "Login successfully!"
|
128
|
+
user_logged_in: "Login successfully!",
|
129
|
+
user_logged_out: "Logout successfully!",
|
130
|
+
voice_channel_connected: "The bot entered the voice channel successfully!"
|
109
131
|
}
|
110
132
|
end
|
111
133
|
|
112
134
|
def error_messages_en
|
113
135
|
{
|
114
|
-
nil: "I
|
115
|
-
|
116
|
-
password: "The password you typed is not valid. Try again",
|
136
|
+
nil: "I don't understand what you said. Try again",
|
137
|
+
wrong_email: "The email you typed is not valid. Try again",
|
117
138
|
wrong_password: "The password you typed is not valid. Try again",
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
139
|
+
|
140
|
+
user_already_exists: "The user you typed already exists. Try again",
|
141
|
+
chat_already_exists: "You already have a chat with this title. Try again",
|
142
|
+
|
143
|
+
no_register_info: "You did not type the email and password. Try again",
|
144
|
+
sign_up_error: "Error creating user. Try again",
|
145
|
+
chat_not_created_error: "Error creating chat. Try again",
|
146
|
+
message_not_created_error: "Error creating message. Try again",
|
122
147
|
no_chat_selected: "No chat selected",
|
148
|
+
|
149
|
+
no_messages_founded: "No messages found",
|
123
150
|
no_chats_founded: "No chats found",
|
124
151
|
chat_not_found: "Chat not found",
|
152
|
+
user_not_found: "The user you typed does not exist. Try again",
|
153
|
+
user_not_registered: "The user is not registered in the system",
|
154
|
+
user_logged_in: "User is logged in the system, do logout to continue",
|
125
155
|
user_not_logged_in: "User not logged in",
|
126
|
-
|
127
|
-
something_went_wrong: "Something went wrong. Try again later.",
|
128
|
-
message_history_too_long: "The message history is too long.",
|
129
|
-
text_length: "The response text is too long. Try to reduce the number of answers in the same message.",
|
156
|
+
|
130
157
|
user_not_in_voice_channel: "You are not in a voice channel.",
|
131
158
|
bot_not_in_voice_channel: "The bot is not in a voice channel.",
|
159
|
+
|
160
|
+
message_history_too_long: "The message history is too long.",
|
161
|
+
text_length_too_long: "The response text is too long. Try to reduce the number of responses in the same message.",
|
162
|
+
|
132
163
|
invalid_command: "Invalid command. Try again.",
|
133
|
-
|
164
|
+
something_went_wrong: "Something went wrong. Try again later."
|
134
165
|
}
|
135
166
|
end
|
136
167
|
|
@@ -144,5 +175,16 @@ module ChatgptAssistant
|
|
144
175
|
"To list the chats you created, type /list",
|
145
176
|
"To see this message again, type /help"]
|
146
177
|
end
|
178
|
+
|
179
|
+
def help_message_discord_en
|
180
|
+
["To start talking to me, type #{discord_prefix}start",
|
181
|
+
"To stop talking to me, type #{discord_prefix}stop",
|
182
|
+
"To register in the system, type #{discord_prefix}register email:password (the password must be a 4 digit number ex: 1234)",
|
183
|
+
"To log in to the system, type #{discord_prefix}login email:password (the password must be a 4 digit number ex: 1234)",
|
184
|
+
"To create a new chat, type #{discord_prefix}new_chat chat name",
|
185
|
+
"To select a chat, type #{discord_prefix}sl_chat chat name",
|
186
|
+
"To list the chats you created, type #{discord_prefix}list",
|
187
|
+
"To see this message again, type #{discord_prefix}help"]
|
188
|
+
end
|
147
189
|
end
|
148
190
|
end
|
@@ -0,0 +1,219 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ChatgptAssistant
|
4
|
+
# Load Error
|
5
|
+
module LoadError
|
6
|
+
def load_error_context
|
7
|
+
language = ENV.fetch("LANGUAGE", "en")
|
8
|
+
discord_prefix = ENV.fetch("DISCORD_PREFIX", "!")
|
9
|
+
DefaultMessages.new(language, discord_prefix).error_messages
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
# No User Error
|
14
|
+
class NoRegisterInfoError < StandardError
|
15
|
+
def initialize(message = load_error_context[:no_register_info])
|
16
|
+
super(message)
|
17
|
+
end
|
18
|
+
|
19
|
+
include LoadError
|
20
|
+
end
|
21
|
+
|
22
|
+
# Nil Command Error
|
23
|
+
class NilError < StandardError
|
24
|
+
def initialize(message = load_error_context[:nil])
|
25
|
+
super(message)
|
26
|
+
end
|
27
|
+
|
28
|
+
include LoadError
|
29
|
+
end
|
30
|
+
|
31
|
+
# Wrong Email Error
|
32
|
+
class WrongEmailError < StandardError
|
33
|
+
def initialize(message = load_error_context[:wrong_email])
|
34
|
+
super(message)
|
35
|
+
end
|
36
|
+
|
37
|
+
include LoadError
|
38
|
+
end
|
39
|
+
|
40
|
+
# Wrong Password Error
|
41
|
+
class WrongPasswordError < StandardError
|
42
|
+
def initialize(message = load_error_context[:wrong_password])
|
43
|
+
super(message)
|
44
|
+
end
|
45
|
+
|
46
|
+
include LoadError
|
47
|
+
end
|
48
|
+
|
49
|
+
# User Already Exists Error
|
50
|
+
class UserAlreadyExistsError < StandardError
|
51
|
+
def initialize(message = load_error_context[:user_already_exists])
|
52
|
+
super(message)
|
53
|
+
end
|
54
|
+
|
55
|
+
include LoadError
|
56
|
+
end
|
57
|
+
|
58
|
+
# Chat Already Exists Error
|
59
|
+
class ChatAlreadyExistsError < StandardError
|
60
|
+
def initialize(message = load_error_context[:chat_already_exists])
|
61
|
+
super(message)
|
62
|
+
end
|
63
|
+
|
64
|
+
include LoadError
|
65
|
+
end
|
66
|
+
|
67
|
+
# Sign Up Error
|
68
|
+
class SignUpError < StandardError
|
69
|
+
def initialize(message = load_error_context[:sign_up_error])
|
70
|
+
super(message)
|
71
|
+
end
|
72
|
+
|
73
|
+
include LoadError
|
74
|
+
end
|
75
|
+
|
76
|
+
# Chat Not Created Error
|
77
|
+
class ChatNotCreatedError < StandardError
|
78
|
+
def initialize(message = load_error_context[:chat_not_created_error])
|
79
|
+
super(message)
|
80
|
+
end
|
81
|
+
|
82
|
+
include LoadError
|
83
|
+
end
|
84
|
+
|
85
|
+
# Message Not Created Error
|
86
|
+
class MessageNotCreatedError < StandardError
|
87
|
+
def initialize(message = load_error_context[:message_not_created_error])
|
88
|
+
super(message)
|
89
|
+
end
|
90
|
+
|
91
|
+
include LoadError
|
92
|
+
end
|
93
|
+
|
94
|
+
# No Chat Selected Error
|
95
|
+
class NoChatSelectedError < StandardError
|
96
|
+
def initialize(message = load_error_context[:no_chat_selected])
|
97
|
+
super(message)
|
98
|
+
end
|
99
|
+
|
100
|
+
include LoadError
|
101
|
+
end
|
102
|
+
|
103
|
+
# No Messages Founded Error
|
104
|
+
class NoMessagesFoundedError < StandardError
|
105
|
+
def initialize(message = load_error_context[:no_messages_founded])
|
106
|
+
super(message)
|
107
|
+
end
|
108
|
+
|
109
|
+
include LoadError
|
110
|
+
end
|
111
|
+
|
112
|
+
# No Chats Founded Error
|
113
|
+
class NoChatsFoundedError < StandardError
|
114
|
+
def initialize(message = load_error_context[:no_chats_founded])
|
115
|
+
super(message)
|
116
|
+
end
|
117
|
+
|
118
|
+
include LoadError
|
119
|
+
end
|
120
|
+
|
121
|
+
# Chat Not Found Error
|
122
|
+
class ChatNotFoundError < StandardError
|
123
|
+
def initialize(message = load_error_context[:chat_not_found])
|
124
|
+
super(message)
|
125
|
+
end
|
126
|
+
|
127
|
+
include LoadError
|
128
|
+
end
|
129
|
+
|
130
|
+
# User Not Found Error
|
131
|
+
class UserNotFoundError < StandardError
|
132
|
+
def initialize(message = load_error_context[:user_not_found])
|
133
|
+
super(message)
|
134
|
+
end
|
135
|
+
|
136
|
+
include LoadError
|
137
|
+
end
|
138
|
+
|
139
|
+
# User Not Registered Error
|
140
|
+
class UserNotRegisteredError < StandardError
|
141
|
+
def initialize(message = load_error_context[:user_not_registered])
|
142
|
+
super(message)
|
143
|
+
end
|
144
|
+
|
145
|
+
include LoadError
|
146
|
+
end
|
147
|
+
|
148
|
+
# User Logged In Error
|
149
|
+
class UserLoggedInError < StandardError
|
150
|
+
def initialize(message = load_error_context[:user_logged_in])
|
151
|
+
super(message)
|
152
|
+
end
|
153
|
+
|
154
|
+
include LoadError
|
155
|
+
end
|
156
|
+
|
157
|
+
# User Not Logged In Error
|
158
|
+
class UserNotLoggedInError < StandardError
|
159
|
+
def initialize(message = load_error_context[:user_not_logged_in])
|
160
|
+
super(message)
|
161
|
+
end
|
162
|
+
|
163
|
+
include LoadError
|
164
|
+
end
|
165
|
+
|
166
|
+
# User Not In Voice Channel Error
|
167
|
+
class UserNotInVoiceChannelError < StandardError
|
168
|
+
def initialize(message = load_error_context[:user_not_in_voice_channel])
|
169
|
+
super(message)
|
170
|
+
end
|
171
|
+
|
172
|
+
include LoadError
|
173
|
+
end
|
174
|
+
|
175
|
+
# Bot Not In Voice Channel Error
|
176
|
+
class BotNotInVoiceChannelError < StandardError
|
177
|
+
def initialize(message = load_error_context[:bot_not_in_voice_channel])
|
178
|
+
super(message)
|
179
|
+
end
|
180
|
+
|
181
|
+
include LoadError
|
182
|
+
end
|
183
|
+
|
184
|
+
# Message Not Found Error
|
185
|
+
class MessageHistoryTooLongError < StandardError
|
186
|
+
def initialize(message = load_error_context[:message_history_too_long])
|
187
|
+
super(message)
|
188
|
+
end
|
189
|
+
|
190
|
+
include LoadError
|
191
|
+
end
|
192
|
+
|
193
|
+
# Text Length Too Long Error
|
194
|
+
class TextLengthTooLongError < StandardError
|
195
|
+
def initialize(message = load_error_context[:text_length_too_long])
|
196
|
+
super(message)
|
197
|
+
end
|
198
|
+
|
199
|
+
include LoadError
|
200
|
+
end
|
201
|
+
|
202
|
+
# Invalid Command Error
|
203
|
+
class InvalidCommandError < StandardError
|
204
|
+
def initialize(message = load_error_context[:invalid_command])
|
205
|
+
super(message)
|
206
|
+
end
|
207
|
+
|
208
|
+
include LoadError
|
209
|
+
end
|
210
|
+
|
211
|
+
# Something Went Wrong Error
|
212
|
+
class SomethingWentWrongError < StandardError
|
213
|
+
def initialize(message = load_error_context[:something_went_wrong])
|
214
|
+
super(message)
|
215
|
+
end
|
216
|
+
|
217
|
+
include LoadError
|
218
|
+
end
|
219
|
+
end
|
@@ -5,8 +5,6 @@ require "active_record"
|
|
5
5
|
# Visitor model
|
6
6
|
class Visitor < ActiveRecord::Base
|
7
7
|
has_many :visitor_actions
|
8
|
-
# has_one :tel_user, foreign_key: "telegram_id", class_name: "User"
|
9
|
-
# has_one :dis_user, foreign_key: "discord_id", class_name: "User"
|
10
8
|
validates :name, presence: true
|
11
9
|
validates :platform, presence: true
|
12
10
|
enum platform: { telegram: 0, discord: 1 }
|
@@ -26,19 +24,23 @@ class User < ActiveRecord::Base
|
|
26
24
|
|
27
25
|
belongs_to :tel_visitor, optional: true, foreign_key: "telegram_id", class_name: "Visitor"
|
28
26
|
belongs_to :dis_visitor, optional: true, foreign_key: "discord_id", class_name: "Visitor"
|
29
|
-
|
30
|
-
validates :email, presence: true, uniqueness: true
|
31
|
-
validates :role, presence: true
|
32
|
-
validates :open_chats, presence: true
|
33
|
-
validates :closed_chats, presence: true
|
34
|
-
validates :total_chats, presence: true
|
35
|
-
validates :total_messages, presence: true
|
27
|
+
|
28
|
+
validates :email, presence: true, uniqueness: true, format: { with: URI::MailTo::EMAIL_REGEXP }, length: { maximum: 100 }, on: :create
|
29
|
+
validates :role, presence: true, on: :create
|
30
|
+
validates :open_chats, presence: true, on: :create
|
31
|
+
validates :closed_chats, presence: true, on: :create
|
32
|
+
validates :total_chats, presence: true, on: :create
|
33
|
+
validates :total_messages, presence: true, on: :create
|
34
|
+
validates :password, presence: true, on: :create
|
35
|
+
|
36
|
+
before_save :encrypt_password, if: :password
|
37
|
+
|
36
38
|
has_many :chats
|
37
39
|
|
38
40
|
def encrypt_password
|
39
41
|
return if password.nil?
|
40
42
|
|
41
|
-
self.password_salt = BCrypt::Engine.generate_salt
|
43
|
+
self.password_salt = BCrypt::Engine.generate_salt
|
42
44
|
self.password_hash = BCrypt::Engine.hash_secret(password, password_salt)
|
43
45
|
end
|
44
46
|
|
@@ -53,6 +55,10 @@ class User < ActiveRecord::Base
|
|
53
55
|
def chat_by_title(title)
|
54
56
|
chats.find_by(title: title)
|
55
57
|
end
|
58
|
+
|
59
|
+
def chat_history
|
60
|
+
current_chat.messages.last(10).map { |m| "#{m.role}: #{m.content}\nat: #{m.created_at}" }
|
61
|
+
end
|
56
62
|
end
|
57
63
|
|
58
64
|
# Chat model
|
@@ -69,15 +75,14 @@ class Chat < ActiveRecord::Base
|
|
69
75
|
def init_chat_if_actor_provided
|
70
76
|
return if actor.nil?
|
71
77
|
|
72
|
-
messages.create(content: prompt, role: "
|
73
|
-
messages.create(content: "Hello, I'm #{actor}. I will follow #{prompt}", role: "assistant")
|
78
|
+
messages.create(content: prompt, role: "system")
|
74
79
|
end
|
75
80
|
end
|
76
81
|
|
77
82
|
# Message model
|
78
83
|
class Message < ActiveRecord::Base
|
79
84
|
validates :content, presence: true
|
80
|
-
enum role: { user: 0, assistant: 1 }
|
85
|
+
enum role: { user: 0, assistant: 1, system: 2 }
|
81
86
|
|
82
87
|
belongs_to :chat
|
83
88
|
end
|
data/lib/chatgpt_assistant.rb
CHANGED
@@ -7,6 +7,7 @@ require_relative "chatgpt_assistant/chatter"
|
|
7
7
|
require_relative "chatgpt_assistant/version"
|
8
8
|
require_relative "chatgpt_assistant/config"
|
9
9
|
require_relative "chatgpt_assistant/models"
|
10
|
+
require_relative "chatgpt_assistant/error"
|
10
11
|
require_relative "bots/application_bot"
|
11
12
|
require_relative "bots/telegram_bot"
|
12
13
|
require_relative "bots/discord_bot"
|
@@ -16,6 +17,8 @@ require "aws-sdk-polly"
|
|
16
17
|
require "telegram/bot"
|
17
18
|
require "ibm_watson"
|
18
19
|
require "discordrb"
|
20
|
+
require "sidekiq"
|
21
|
+
require "sidekiq-scheduler"
|
19
22
|
require "faraday"
|
20
23
|
require "bcrypt"
|
21
24
|
|
@@ -32,24 +35,12 @@ module ChatgptAssistant
|
|
32
35
|
return discord_bot if discord_mode?
|
33
36
|
|
34
37
|
raise "Invalid mode"
|
35
|
-
rescue StandardError => e
|
36
|
-
save_error(e)
|
37
|
-
retry
|
38
38
|
end
|
39
39
|
|
40
40
|
private
|
41
41
|
|
42
42
|
attr_reader :mode, :config
|
43
43
|
|
44
|
-
def save_error(err)
|
45
|
-
puts "Error: #{err.message}"
|
46
|
-
err.backtrace.each { |line| puts line }
|
47
|
-
Error.create(message: err.message, backtrace: err.backtrace) unless err.message == Error.last&.message
|
48
|
-
rescue StandardError
|
49
|
-
puts "Error: #{err.message}"
|
50
|
-
puts "Backtrace: #{err.backtrace}"
|
51
|
-
end
|
52
|
-
|
53
44
|
def telegram_mode?
|
54
45
|
mode == "telegram"
|
55
46
|
end
|