chatgpt_assistant 0.1.5 → 0.1.7
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 +17 -8
- data/.rubocop.yml +17 -6
- data/Dockerfile +11 -5
- data/Gemfile +36 -22
- data/Gemfile.lock +143 -102
- data/README.md +25 -27
- data/Rakefile +1 -0
- data/docker-compose.yml +25 -3
- data/exe/chatgpt_assistant +1 -1
- data/exe/chatgpt_bot +3 -0
- data/lib/{bots → chatgpt_assistant/bots}/application_bot.rb +15 -11
- data/lib/chatgpt_assistant/bots/discord/actions.rb +104 -0
- data/lib/chatgpt_assistant/bots/discord/auth.rb +36 -0
- data/lib/chatgpt_assistant/bots/discord/bot.rb +29 -0
- data/lib/chatgpt_assistant/bots/discord/chat_actions.rb +33 -0
- data/lib/chatgpt_assistant/bots/discord/events.rb +138 -0
- data/lib/chatgpt_assistant/bots/discord/validations.rb +38 -0
- data/lib/chatgpt_assistant/bots/discord/voice_actions.rb +33 -0
- data/lib/chatgpt_assistant/bots/discord/voice_checkers.rb +35 -0
- data/lib/chatgpt_assistant/bots/discord_bot.rb +42 -0
- data/lib/chatgpt_assistant/bots/helpers/messenger_helper.rb +16 -0
- data/lib/{bots → chatgpt_assistant/bots}/helpers/search_helper.rb +3 -3
- data/lib/chatgpt_assistant/bots/jobs/new_chat_job.rb +17 -0
- data/lib/chatgpt_assistant/bots/jobs/register_job.rb +16 -0
- data/lib/chatgpt_assistant/bots/jobs/voice_connect_job.rb +14 -0
- data/lib/chatgpt_assistant/bots/mailers/account_mailer.rb +30 -0
- data/lib/chatgpt_assistant/bots/mailers/application_mailer.rb +21 -0
- data/lib/chatgpt_assistant/bots/services/new_chat_service.rb +59 -0
- data/lib/chatgpt_assistant/bots/services/register_service.rb +45 -0
- data/lib/chatgpt_assistant/bots/services/voice_connect_service.rb +29 -0
- data/lib/chatgpt_assistant/bots/telegram/actions.rb +54 -0
- data/lib/chatgpt_assistant/bots/telegram/auth.rb +40 -0
- data/lib/chatgpt_assistant/bots/telegram/bot.rb +17 -0
- data/lib/chatgpt_assistant/bots/telegram/chat_actions.rb +30 -0
- data/lib/chatgpt_assistant/bots/telegram/events.rb +120 -0
- data/lib/chatgpt_assistant/bots/telegram/events_controller.rb +48 -0
- data/lib/chatgpt_assistant/bots/telegram/permissions.rb +48 -0
- data/lib/chatgpt_assistant/bots/telegram/validations.rb +55 -0
- data/lib/chatgpt_assistant/bots/telegram/voice_actions.rb +36 -0
- data/lib/chatgpt_assistant/bots/telegram_bot.rb +44 -0
- data/lib/chatgpt_assistant/chatter.rb +10 -2
- data/lib/chatgpt_assistant/config.rb +27 -2
- data/lib/chatgpt_assistant/default_messages.rb +79 -31
- data/lib/chatgpt_assistant/error.rb +228 -0
- data/lib/chatgpt_assistant/migrations.rb +5 -0
- data/lib/chatgpt_assistant/models.rb +38 -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 +8 -15
- data/prompts-data/{awesome-chatgpt-prompts.csv → awesome-en-prompts.csv} +164 -164
- data/prompts-data/awesome-pt-prompts.csv +164 -0
- metadata +40 -21
- data/.env_prod_sample +0 -18
- data/docker-compose.prod.yml +0 -34
- data/lib/bots/discord_bot.rb +0 -185
- data/lib/bots/helpers/authentication_helper.rb +0 -47
- data/lib/bots/helpers/discord_helper.rb +0 -124
- data/lib/bots/helpers/discord_voice_helper.rb +0 -50
- data/lib/bots/helpers/logger_action_helper.rb +0 -7
- data/lib/bots/helpers/messenger_helper.rb +0 -134
- data/lib/bots/helpers/telegram_helper.rb +0 -77
- data/lib/bots/helpers/telegram_voice_helper.rb +0 -33
- data/lib/bots/helpers/validation_helper.rb +0 -38
- data/lib/bots/helpers/visit_helper.rb +0 -24
- data/lib/bots/telegram_bot.rb +0 -149
- /data/lib/{bots → chatgpt_assistant/bots}/helpers/audio_helper.rb +0 -0
- /data/lib/{bots → chatgpt_assistant/bots}/helpers/file_helper.rb +0 -0
@@ -0,0 +1,48 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ChatgptAssistant
|
4
|
+
module Bots
|
5
|
+
module Telegram
|
6
|
+
module Permissions
|
7
|
+
def hist_allowed?
|
8
|
+
raise UserNotLoggedInError if user.nil?
|
9
|
+
raise AccountNotVerifiedError unless user.active?
|
10
|
+
raise NoChatSelectedError if user.current_chat.nil?
|
11
|
+
raise NoMessagesFoundedError if user.current_chat.messages.count.zero?
|
12
|
+
end
|
13
|
+
|
14
|
+
def list_allowed?
|
15
|
+
raise UserNotLoggedInError if user.nil?
|
16
|
+
raise AccountNotVerifiedError unless user.active?
|
17
|
+
raise NoChatsFoundedError if user.chats.count.zero?
|
18
|
+
end
|
19
|
+
|
20
|
+
def register_allowed?(user_info)
|
21
|
+
raise NoRegisterInfoError if user_info.nil?
|
22
|
+
raise UserLoggedInError if user
|
23
|
+
|
24
|
+
email, password = user_info.split(":")
|
25
|
+
raise NoRegisterEmailError if email.nil? || password.nil?
|
26
|
+
|
27
|
+
[email, password]
|
28
|
+
end
|
29
|
+
|
30
|
+
def common_allowed?
|
31
|
+
raise UserNotLoggedInError if user.nil?
|
32
|
+
raise AccountNotVerifiedError unless user.active?
|
33
|
+
end
|
34
|
+
|
35
|
+
def select_allowed?(chat)
|
36
|
+
raise ChatNotFoundError if chat.nil?
|
37
|
+
raise ChatNotFoundError unless user.update(current_chat_id: chat.id)
|
38
|
+
end
|
39
|
+
|
40
|
+
def audio_allowed?
|
41
|
+
raise UserNotLoggedInError if user.nil?
|
42
|
+
raise AccountNotVerifiedError unless user.active?
|
43
|
+
raise NoChatSelectedError if user.current_chat.nil?
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ChatgptAssistant
|
4
|
+
module Bots
|
5
|
+
module Telegram
|
6
|
+
module Validations
|
7
|
+
def telegram_actions?
|
8
|
+
msg.text.include?("new_chat/") || msg.text.include?("sl_chat/") || msg.text.include?("login/") || msg.text.include?("register/")
|
9
|
+
end
|
10
|
+
|
11
|
+
def telegram_text_or_audio?
|
12
|
+
msg.respond_to?(:text) || msg.respond_to?(:audio) || msg.respond_to?(:voice)
|
13
|
+
end
|
14
|
+
|
15
|
+
def telegram_message_has_text?
|
16
|
+
msg.text.present?
|
17
|
+
end
|
18
|
+
|
19
|
+
def telegram_message_has_audio?
|
20
|
+
msg.audio.present? || msg.voice.present?
|
21
|
+
end
|
22
|
+
|
23
|
+
def telegram_visited?(chat_id)
|
24
|
+
return unless msg
|
25
|
+
|
26
|
+
visitor = Visitor.find_by(telegram_id: chat_id, name: msg.from.first_name)
|
27
|
+
if visitor.nil?
|
28
|
+
Visitor.create(telegram_id: chat_id, name: msg.from.first_name)
|
29
|
+
else
|
30
|
+
visitor
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def visitor_user?
|
35
|
+
visitor&.tel_user.nil?
|
36
|
+
end
|
37
|
+
|
38
|
+
def valid_for_list_action?
|
39
|
+
send_message(chat_id: msg.chat.id, text: error_messages[:user_not_logged_in]) if user.nil?
|
40
|
+
send_message(chat_id: msg.chat.id, text: error_messages[:account_not_verified]) unless user.active?
|
41
|
+
send_message(chat_id: msg.chat.id, text: error_messages[:chat_not_found]) if user.chats.count.zero? && user.active?
|
42
|
+
!user.nil? && user.active? && user.chats.count.positive?
|
43
|
+
end
|
44
|
+
|
45
|
+
def auth_event?
|
46
|
+
msg.text.include?("login/") || msg.text.include?("register/") || msg.text.include?("sign_out/") || msg.text.include?("confirm/* ")
|
47
|
+
end
|
48
|
+
|
49
|
+
def user_confirmed?
|
50
|
+
user.name == name && user.confirm_account(token)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ChatgptAssistant
|
4
|
+
module Bots
|
5
|
+
module Telegram
|
6
|
+
module VoiceActions
|
7
|
+
def telegram_audio_info
|
8
|
+
bot.api.get_file(file_id: telegram_audio.file_id)
|
9
|
+
end
|
10
|
+
|
11
|
+
def telegram_audio_url
|
12
|
+
"https://api.telegram.org/file/bot#{telegram_token}/#{telegram_audio_info["result"]["file_path"]}"
|
13
|
+
end
|
14
|
+
|
15
|
+
def telegram_audio
|
16
|
+
msg.audio || msg.voice
|
17
|
+
end
|
18
|
+
|
19
|
+
def telegram_process_ai_voice(user_audio)
|
20
|
+
ai_text = chatter.chat(user_audio["text"], user.current_chat_id, error_messages[:something_went_wrong])
|
21
|
+
ai_voice = synthesis.synthesize_text(ai_text)
|
22
|
+
{
|
23
|
+
voice: ai_voice,
|
24
|
+
text: ai_text
|
25
|
+
}
|
26
|
+
end
|
27
|
+
|
28
|
+
def telegram_send_voice_message(voice: nil, text: nil)
|
29
|
+
messages = parse_message text, 4096
|
30
|
+
bot.api.send_voice(chat_id: msg.chat.id, voice: Faraday::UploadIO.new(voice, "audio/mp3"))
|
31
|
+
messages.each { |message| send_message message, msg.chat.id }
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "telegram/bot"
|
4
|
+
require_relative "telegram/auth"
|
5
|
+
require_relative "telegram/actions"
|
6
|
+
require_relative "telegram/events"
|
7
|
+
require_relative "telegram/chat_actions"
|
8
|
+
require_relative "telegram/validations"
|
9
|
+
require_relative "telegram/voice_actions"
|
10
|
+
require_relative "telegram/permissions"
|
11
|
+
require_relative "telegram/events_controller"
|
12
|
+
|
13
|
+
module ChatgptAssistant
|
14
|
+
# This class is responsible for the telegram bot features
|
15
|
+
class TelegramBot < ApplicationBot
|
16
|
+
def start
|
17
|
+
bot.listen do |message|
|
18
|
+
@msg = message
|
19
|
+
@visitor = telegram_visited?(@msg.chat.id)
|
20
|
+
next unless telegram_text_or_audio?
|
21
|
+
|
22
|
+
text_events if telegram_message_has_text?
|
23
|
+
audio_event if telegram_message_has_audio?
|
24
|
+
end
|
25
|
+
rescue StandardError => e
|
26
|
+
Error.create(message: e.message, backtrace: e.backtrace)
|
27
|
+
retry
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
attr_accessor :msg, :visitor, :chat, :chat_id
|
33
|
+
|
34
|
+
include Bots::Telegram::Bot
|
35
|
+
include Bots::Telegram::Auth
|
36
|
+
include Bots::Telegram::Actions
|
37
|
+
include Bots::Telegram::Events
|
38
|
+
include Bots::Telegram::ChatActions
|
39
|
+
include Bots::Telegram::Validations
|
40
|
+
include Bots::Telegram::VoiceActions
|
41
|
+
include Bots::Telegram::Permissions
|
42
|
+
include Bots::Telegram::EventsController
|
43
|
+
end
|
44
|
+
end
|
@@ -17,7 +17,7 @@ module ChatgptAssistant
|
|
17
17
|
@response = request(message)
|
18
18
|
@json = JSON.parse(response.body)
|
19
19
|
|
20
|
-
return no_response_error if json["choices"].empty?
|
20
|
+
return no_response_error if json["choices"] && json["choices"].empty?
|
21
21
|
return bot_offline_error if response.status != 200
|
22
22
|
|
23
23
|
text = json["choices"][0]["message"]["content"]
|
@@ -57,7 +57,8 @@ module ChatgptAssistant
|
|
57
57
|
end
|
58
58
|
|
59
59
|
def request_params(message)
|
60
|
-
|
60
|
+
messages_from_chat = Message.where(chat_id: chat_id)
|
61
|
+
messages = messages_from_chat.order(id: :asc).last(10)
|
61
62
|
messages = if messages.empty?
|
62
63
|
[{ role: "user", content: message }]
|
63
64
|
else
|
@@ -66,6 +67,13 @@ module ChatgptAssistant
|
|
66
67
|
content: mess.content }
|
67
68
|
end
|
68
69
|
end
|
70
|
+
|
71
|
+
first_message = messages_from_chat.order(id: :asc).first
|
72
|
+
system_message = first_message if first_message&.role == "system"
|
73
|
+
if system_message && Message.where(chat_id: chat_id).count > 10
|
74
|
+
messages.unshift({ role: system_message.role,
|
75
|
+
content: system_message.content })
|
76
|
+
end
|
69
77
|
{
|
70
78
|
model: "gpt-3.5-turbo",
|
71
79
|
messages: messages,
|
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require "active_record"
|
4
4
|
require "active_model"
|
5
|
+
require "action_mailer"
|
5
6
|
require_relative "migrations"
|
6
7
|
require "fileutils"
|
7
8
|
|
@@ -30,7 +31,9 @@ module ChatgptAssistant
|
|
30
31
|
|
31
32
|
attr_reader :openai_api_key, :telegram_token, :discord_token, :ibm_api_key, :ibm_url,
|
32
33
|
:aws_access_key_id, :aws_secret_access_key, :aws_region, :mode, :language,
|
33
|
-
:discord_client_id, :discord_public_key, :env_type, :discord_prefix
|
34
|
+
:discord_client_id, :discord_public_key, :env_type, :discord_prefix,
|
35
|
+
:smtp_address, :smtp_port, :smtp_domain, :smtp_user_name, :smtp_password,
|
36
|
+
:smtp_authentication, :smtp_enable_starttls_auto
|
34
37
|
|
35
38
|
def db_connection
|
36
39
|
ActiveRecord::Base.establish_connection(
|
@@ -44,9 +47,25 @@ module ChatgptAssistant
|
|
44
47
|
ActiveRecord::Base.logger = Logger.new($stdout) if ENV["ENV_TYPE"] == "development"
|
45
48
|
end
|
46
49
|
|
50
|
+
def create_db
|
51
|
+
db_connection
|
52
|
+
return if database_exists?
|
53
|
+
|
54
|
+
ActiveRecord::Base.establish_connection(
|
55
|
+
adapter: "postgresql",
|
56
|
+
host: database_host,
|
57
|
+
port: 5432,
|
58
|
+
database: "postgres",
|
59
|
+
username: database_username,
|
60
|
+
password: database_password
|
61
|
+
)
|
62
|
+
ActiveRecord::Base.logger = Logger.new($stdout) if ENV["ENV_TYPE"] == "development"
|
63
|
+
ActiveRecord::Base.connection.create_database(database_name)
|
64
|
+
end
|
65
|
+
|
47
66
|
def migrate
|
48
67
|
db_connection
|
49
|
-
ActiveRecord::Base.logger = Logger.new($stdout)
|
68
|
+
ActiveRecord::Base.logger = Logger.new($stdout) if ENV["ENV_TYPE"] == "development"
|
50
69
|
VisitorMigration.new.migrate(:up)
|
51
70
|
UserMigration.new.migrate(:up)
|
52
71
|
ChatMigration.new.migrate(:up)
|
@@ -57,5 +76,11 @@ module ChatgptAssistant
|
|
57
76
|
private
|
58
77
|
|
59
78
|
attr_reader :database_host, :database_name, :database_username, :database_password
|
79
|
+
|
80
|
+
def database_exists?
|
81
|
+
ActiveRecord::Base.connection
|
82
|
+
rescue ActiveRecord::NoDatabaseError
|
83
|
+
false
|
84
|
+
end
|
60
85
|
end
|
61
86
|
end
|
@@ -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,33 +42,45 @@ 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
|
-
|
45
|
+
user_logged_out: "Logout realizado com sucesso!",
|
46
|
+
voice_channel_connected: "O bot entrou no canal de voz com sucesso!",
|
47
|
+
account_confirmed: "Conta confirmada com sucesso!"
|
46
48
|
}
|
47
49
|
end
|
48
50
|
|
49
51
|
def error_messages_pt
|
50
52
|
{
|
51
53
|
nil: "Não entendi o que você disse. Tente novamente",
|
52
|
-
|
53
|
-
password: "A senha que você digitou não é válida. Tente novamente",
|
54
|
+
wrong_email: "O email que você digitou não é válido. Tente novamente",
|
54
55
|
wrong_password: "A senha que você digitou não é válida. Tente novamente",
|
55
|
-
|
56
|
-
user_creation: "Erro ao criar usuário. Tente novamente",
|
56
|
+
|
57
57
|
user_already_exists: "O usuário que você digitou já existe. Tente novamente",
|
58
|
-
|
59
|
-
|
58
|
+
chat_already_exists: "Você já possui um chat com este titulo. Tente novamente",
|
59
|
+
|
60
|
+
no_register_info: "Você não digitou o email e a senha. Tente novamente",
|
61
|
+
sign_up_error: "Erro ao criar usuário. Tente novamente",
|
62
|
+
chat_not_created_error: "Erro ao criar chat. Tente novamente",
|
63
|
+
message_not_created_error: "Erro ao criar mensagem. Tente novamente",
|
60
64
|
no_chat_selected: "Nenhum chat selecionado",
|
61
|
-
|
65
|
+
|
66
|
+
no_messages_founded: "Nenhuma mensagem encontrada",
|
62
67
|
no_chats_founded: "Nenhum chat encontrado",
|
68
|
+
chat_not_found: "Chat não encontrado",
|
69
|
+
user_not_found: "O usuário que você digitou não existe. Tente novamente",
|
70
|
+
user_not_registered: "O usuário não está registrado no sistema",
|
71
|
+
user_logged_in: "Usuário está logado no sistema, faça logout para continuar",
|
63
72
|
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.",
|
73
|
+
|
68
74
|
user_not_in_voice_channel: "Você não está em um canal de voz.",
|
69
75
|
bot_not_in_voice_channel: "O bot não está em um canal de voz.",
|
76
|
+
|
77
|
+
message_history_too_long: "O histórico mensagem é muito longo.",
|
78
|
+
text_length_too_long: "O texto de resposta é muito longo. Tente diminuir a quantidade de respostas na mesma mensagem.",
|
79
|
+
|
70
80
|
invalid_command: "Comando inválido. Tente novamente.",
|
71
|
-
|
81
|
+
something_went_wrong: "Algo deu errado. Tente novamente mais tarde.",
|
82
|
+
account_not_verified: "Sua conta não foi verificada. Verifique sua caixa de email.",
|
83
|
+
account_not_confirmed: "Sua conta não foi confirmada. Verifique sua caixa de email."
|
72
84
|
}
|
73
85
|
end
|
74
86
|
|
@@ -83,7 +95,18 @@ module ChatgptAssistant
|
|
83
95
|
"Para ver esta mensagem novamente, digite /help"]
|
84
96
|
end
|
85
97
|
|
86
|
-
def
|
98
|
+
def help_message_discord_pt
|
99
|
+
["Para começar a conversar comigo, digite #{discord_prefix}start",
|
100
|
+
"Para parar de conversar comigo, digite #{discord_prefix}stop",
|
101
|
+
"Para se registrar no sistema, digite #{discord_prefix}register email:senha (a senha deve ser um numero de 4 digitos ex: 1234)",
|
102
|
+
"Para fazer login no sistema, digite #{discord_prefix}login email:senha (a senha deve ser um numero de 4 digitos ex: 1234)",
|
103
|
+
"Para criar um novo chat, digite #{discord_prefix}new_chat nome do chat",
|
104
|
+
"Para selecionar um chat, digite #{discord_prefix}sl_chat nome do chat",
|
105
|
+
"Para listar os chats que você criou, digite #{discord_prefix}list",
|
106
|
+
"Para ver esta mensagem novamente, digite #{discord_prefix}help"]
|
107
|
+
end
|
108
|
+
|
109
|
+
def common_messages_en
|
87
110
|
{
|
88
111
|
start: "Hello, I'm the Chatgpt Assistant, a chatbot that uses the OpenAI API to answer your questions on Telegram and Discord.",
|
89
112
|
stop: "See you later!",
|
@@ -105,32 +128,46 @@ module ChatgptAssistant
|
|
105
128
|
user_created: "User created successfully!",
|
106
129
|
chat_created: "Chat created successfully!",
|
107
130
|
chat_selected: "Chat selected successfully!",
|
108
|
-
user_logged_in: "Login successfully!"
|
131
|
+
user_logged_in: "Login successfully!",
|
132
|
+
user_logged_out: "Logout successfully!",
|
133
|
+
voice_channel_connected: "The bot entered the voice channel successfully!",
|
134
|
+
account_confirmed: "Your account has been verified!"
|
109
135
|
}
|
110
136
|
end
|
111
137
|
|
112
138
|
def error_messages_en
|
113
139
|
{
|
114
|
-
nil: "I
|
115
|
-
|
116
|
-
password: "The password you typed is not valid. Try again",
|
140
|
+
nil: "I don't understand what you said. Try again",
|
141
|
+
wrong_email: "The email you typed is not valid. Try again",
|
117
142
|
wrong_password: "The password you typed is not valid. Try again",
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
143
|
+
|
144
|
+
user_already_exists: "The user you typed already exists. Try again",
|
145
|
+
chat_already_exists: "You already have a chat with this title. Try again",
|
146
|
+
|
147
|
+
no_register_info: "You did not type the email and password. Try again",
|
148
|
+
sign_up_error: "Error creating user. Try again",
|
149
|
+
chat_not_created_error: "Error creating chat. Try again",
|
150
|
+
message_not_created_error: "Error creating message. Try again",
|
122
151
|
no_chat_selected: "No chat selected",
|
152
|
+
|
153
|
+
no_messages_founded: "No messages found",
|
123
154
|
no_chats_founded: "No chats found",
|
124
155
|
chat_not_found: "Chat not found",
|
156
|
+
user_not_found: "The user you typed does not exist. Try again",
|
157
|
+
user_not_registered: "The user is not registered in the system",
|
158
|
+
user_logged_in: "User is logged in the system, do logout to continue",
|
125
159
|
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.",
|
160
|
+
|
130
161
|
user_not_in_voice_channel: "You are not in a voice channel.",
|
131
162
|
bot_not_in_voice_channel: "The bot is not in a voice channel.",
|
163
|
+
|
164
|
+
message_history_too_long: "The message history is too long.",
|
165
|
+
text_length_too_long: "The response text is too long. Try to reduce the number of responses in the same message.",
|
166
|
+
|
132
167
|
invalid_command: "Invalid command. Try again.",
|
133
|
-
|
168
|
+
something_went_wrong: "Something went wrong. Try again later.",
|
169
|
+
account_not_verified: "Your account is not verified. Please check your email and verify your account.",
|
170
|
+
account_not_confirmed: "Something went wrong. Please check your email and verify your account. Maybe you pass the wrong code."
|
134
171
|
}
|
135
172
|
end
|
136
173
|
|
@@ -144,5 +181,16 @@ module ChatgptAssistant
|
|
144
181
|
"To list the chats you created, type /list",
|
145
182
|
"To see this message again, type /help"]
|
146
183
|
end
|
184
|
+
|
185
|
+
def help_message_discord_en
|
186
|
+
["To start talking to me, type #{discord_prefix}start",
|
187
|
+
"To stop talking to me, type #{discord_prefix}stop",
|
188
|
+
"To register in the system, type #{discord_prefix}register email:password (the password must be a 4 digit number ex: 1234)",
|
189
|
+
"To log in to the system, type #{discord_prefix}login email:password (the password must be a 4 digit number ex: 1234)",
|
190
|
+
"To create a new chat, type #{discord_prefix}new_chat chat name",
|
191
|
+
"To select a chat, type #{discord_prefix}sl_chat chat name",
|
192
|
+
"To list the chats you created, type #{discord_prefix}list",
|
193
|
+
"To see this message again, type #{discord_prefix}help"]
|
194
|
+
end
|
147
195
|
end
|
148
196
|
end
|
@@ -0,0 +1,228 @@
|
|
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
|
+
# Account Not Verified Error
|
212
|
+
class AccountNotVerifiedError < StandardError
|
213
|
+
def initialize(message = load_error_context[:account_not_verified])
|
214
|
+
super(message)
|
215
|
+
end
|
216
|
+
|
217
|
+
include LoadError
|
218
|
+
end
|
219
|
+
|
220
|
+
# Something Went Wrong Error
|
221
|
+
class SomethingWentWrongError < StandardError
|
222
|
+
def initialize(message = load_error_context[:something_went_wrong])
|
223
|
+
super(message)
|
224
|
+
end
|
225
|
+
|
226
|
+
include LoadError
|
227
|
+
end
|
228
|
+
end
|