(function($) { 'use strict'; function AysChatGPTChatBoxPublic(element, options){ this.el = element; this.$el = $(element); this.ajaxAction = 'ays_chatgpt_admin_ajax'; this.globalSettings = JSON.parse(atob(window.AysChatGPTChatSettings)); // DEFINE PREFIXES this.CHATGPT_ASSISTANT_CLASS_PREFIX = 'ays-chatgpt-assistant'; this.CHATGPT_ASSISTANT_ID_PREFIX = 'ays-chatgpt-assistant'; this.CHATGPT_ASSISTANT_NAME_PREFIX = 'ays_chatgpt_assistant'; this.CHATGPT_ASSISTANT_OPTIONS_PREFIX = 'chatgpt_assistant_'; this.dbOptions = undefined; // Chat prompt defaults this.chatConversation = []; // Text For old models this.promptFirstM = 'Converse as if you are an AI assistant. '; this.promptSecondM = 'Answer the question as truthfully as possible. '; // Text For new models this.messageFirstM = ''; // OpenAI settings this.REQUEST_URL = ""; this.API_MAIN_URL = "https://api.openai.com/v1"; this.API_COMPLETIONS_URL = "/completions"; this.API_CHAT_COMPLETIONS_URL = "/chat/completions"; this.requestCount = 0; this.init(); return this; } AysChatGPTChatBoxPublic.prototype.init = function() { var _this = this; _this.$el.show(); _this.setEvents(); }; // Set events AysChatGPTChatBoxPublic.prototype.setEvents = function(e){ var _this = this; _this.setDbOptions(); _this.setUpPromptParametrs(); _this.setUpRequestParametrs(); _this.makeResizableDiv(".ays-assistant-chatbox .ays-assistant-chatbox-main-container"); var promptEl = _this.$el.find('#ays-assistant-chatbox-prompt'); autosize(promptEl); _this.$el.find('.ays-assistant-chatbox-closed-view').one('click', function () { if(_this.dbOptions.chatGreetingMessage){ _this.setGreetingMessage(); } if (_this.dbOptions.iconTextShowOnce) { _this.$el.find('.ays-assistant-chatbox-closed-view-text').remove(); } }); _this.$el.find('.ays-assistant-chatbox-closed-view').on('click', function () { $(this).hide(); var container = _this.$el.find('.ays-assistant-chatbox-main-container'); var bg = _this.$el.find('.ays-assistant-chatbox-maximized-bg'); if (container.hasClass('ays-assistant-chatbox-main-container-maximized-view')) { bg.show(); $('body').addClass('ays-assistant-chatbox-disabled-scroll-body'); } container.show(); _this.$el.find('.ays-assistant-chatbox-prompt-input').focus(); }); _this.$el.on('click', '.ays-assistant-chatbox-close-bttn' ,function () { var container = $(this).parents('.ays-assistant-chatbox-main-container'); var bg = _this.$el.find('.ays-assistant-chatbox-maximized-bg'); if (container.hasClass('ays-assistant-chatbox-main-container-maximized-view')) { bg.hide(); $('body').removeClass('ays-assistant-chatbox-disabled-scroll-body'); } container.hide(); _this.$el.find('.ays-assistant-chatbox-closed-view').show(); }); _this.$el.on('click', '.ays-assistant-chatbox-end-bttn' ,function () { var modal = _this.$el.find('.ays-assistant-chatbox-main-chat-modal'); modal.find('.ays-assistant-chatbox-main-chat-modal-body-image').append(''); modal.find('.ays-assistant-chatbox-main-chat-modal-body-text').append(_this.globalSettings.translations.endChat.warningMsg); modal.find('.ays-assistant-chatbox-main-chat-modal-footer-button').append(''); modal.css('display', 'flex'); _this.$el.find('.ays-assistant-chatbox-more-menu').hide(); modal.on('click', function (e) { if ($(e.target).attr('data-modal-action') === 'confirm') { window.speechSynthesis.cancel(); _this.$el.find('.ays-assistant-chatbox-messages-box').find('.ays-assistant-chatbox-ai-message-box').remove(); _this.$el.find('.ays-assistant-chatbox-messages-box').find('.ays-assistant-chatbox-user-message-box').remove(); _this.$el.find('.ays-assistant-chatbox-rate-chat-row').css('display', 'flex'); if (_this.dbOptions.chatGreetingMessage) { _this.setGreetingMessage(); } _this.chatConversation = []; modal.hide('fast'); modal.find('.ays-assistant-chatbox-main-chat-modal-body-image').empty(); modal.find('.ays-assistant-chatbox-main-chat-modal-body-text').empty(); modal.find('.ays-assistant-chatbox-main-chat-modal-footer-button').empty(); var container = $(this).parents('.ays-assistant-chatbox-main-container'); var bg = _this.$el.find('.ays-assistant-chatbox-maximized-bg'); if (container.hasClass('ays-assistant-chatbox-main-container-maximized-view')) { bg.hide(); $('body').removeClass('ays-assistant-chatbox-disabled-scroll-body'); } container.hide(); _this.$el.find('.ays-assistant-chatbox-closed-view').show(); } else if ($(e.target).attr('data-modal-action') === 'close') { modal.hide('fast'); modal.find('.ays-assistant-chatbox-main-chat-modal-body-image').empty(); modal.find('.ays-assistant-chatbox-main-chat-modal-body-text').empty(); modal.find('.ays-assistant-chatbox-main-chat-modal-footer-button').empty(); } }) }); _this.$el.find('.ays-assistant-chatbox-resize-bttn').on('click', function () { var container = $(this).parents('.ays-assistant-chatbox-main-container'); var bg = _this.$el.find('.ays-assistant-chatbox-maximized-bg'); var src = $(this).attr('src'); if (!container.hasClass('ays-assistant-chatbox-main-container-maximized-view')) { $(this).attr('src', src.replace('maximize', 'minimize')); $(this).attr('alt', "Minimize"); container.addClass('ays-assistant-chatbox-main-container-maximized-view'); bg.show(); $('body').addClass('ays-assistant-chatbox-disabled-scroll-body'); } else { $(this).attr('src', src.replace('minimize', 'maximize')); $(this).attr('alt', "Maximize"); container.removeClass('ays-assistant-chatbox-main-container-maximized-view'); bg.hide(); $('body').removeClass('ays-assistant-chatbox-disabled-scroll-body'); } }); $(document).on('mouseup', function(e) { var container = _this.$el.find('.ays-assistant-chatbox-main-container'); if (container.hasClass('ays-assistant-chatbox-main-container-maximized-view') && container.css('display') !== 'none') { if (!container.is(e.target) && container.has(e.target).length === 0) { _this.$el.find('.ays-assistant-chatbox-resize-bttn').trigger("click"); } } }); _this.$el.find('.ays-assistant-chatbox-prompt-input').on('input', function () { var sendBttn = _this.$el.find('.ays-assistant-chatbox-send-button'); if ($(this).val().trim() != "") { sendBttn.prop('disabled', false); } else { sendBttn.prop('disabled', true); } }); _this.$el.find('.ays-assistant-chatbox-regenerate-response-button').on('click', function () { var prompt = _this.$el.find('.ays-assistant-chatbox-user-message-box:last').text(); _this.$el.find('.ays-assistant-chatbox-prompt-input').val(prompt); _this.$el.find('.ays-assistant-chatbox-send-button').trigger('click', true); }); _this.$el.find('.ays-assistant-chatbox-send-button').on('click', function (event, noUserMessage) { var key = _this.dbOptions.chatAK; var prompt = _this.$el.find('.ays-assistant-chatbox-prompt-input').val(); var loader = _this.$el.find('.ays-assistant-chatbox-loading-box'); var sendBttn = _this.$el.find('.ays-assistant-chatbox-send-button'); if (noUserMessage === undefined) { var userProfilePicture = ''; if (_this.dbOptions.chatboxTheme == 'chatgpt') { userProfilePicture = '
' + _this.dbOptions.userProfilePicture + '
'; } var userMessage = $("
", {"class": "ays-assistant-chatbox-user-message-box"}).html(userProfilePicture + prompt); _this.$el.find('.ays-assistant-chatbox-messages-box').append(userMessage).scrollTop(_this.$el.find('.ays-assistant-chatbox-messages-box')[0].scrollHeight); promptEl.css("height" , "54px"); } var scrolledHeight = _this.$el.find('.ays-assistant-chatbox-messages-box')[0].scrollHeight; var elementHeight = Math.round(_this.$el.find('.ays-assistant-chatbox-messages-box').outerHeight()); loader.css('bottom', (10 + elementHeight - scrolledHeight)); _this.$el.find('.ays-assistant-chatbox-prompt-input').val(''); var index = key.indexOf("chgafr"); if (index !== -1) { var readyK = key.substring(0, index); } if (_this.dbOptions.enableRequestLimitations) { _this.requestCount++; } if (_this.checkSession()) { if (key != '' && prompt.trim() != '') { loader.show(); if (_this.dbOptions.chatboxTheme == 'chatgpt') { _this.$el.find('.ays-assistant-chatbox-messages-box').scrollTop(scrolledHeight + 50); } sendBttn.prop('disabled', true); var sendData = { requestUrl : _this.REQUEST_URL, apiKey : readyK, prompt : prompt, chatConversation : _this.chatConversation, } makeRequest(sendData , _this.dbOptions, true) .then(data => { _this.gettingResponse(data); }); } } }); _this.$el.on('click', '.ays-assistant-chatbox-ai-message-copy', function(){ var thisButton = $(this); var text = thisButton.parents(".ays-assistant-chatbox-ai-message-box").find('span.ays-assistant-chatbox-ai-response-message').text(); var thisButton = $(this); _this.copyResponse(text); $(this).attr('title', 'Copied!'); var copyIcon = $(this).html(); $(this).html(''); setTimeout(function() { thisButton.html(copyIcon); }, 700); }); _this.$el.on('mouseover', '.ays-assistant-chatbox-ai-message-copy', function(){ $(this).attr('title', 'Click to Copy'); }); if(_this.dbOptions.chatAutoOpening){ setTimeout(() => { _this.$el.find('.ays-assistant-chatbox-closed-view').trigger('click'); }, _this.dbOptions.chatAutoOpeningDelay); } if(_this.dbOptions.iconTextOpenDelay > 0){ setTimeout(() => { _this.$el.find('.ays-assistant-chatbox-closed-view-text').show(); }, _this.dbOptions.iconTextOpenDelay); } _this.$el.on('click', '.ays-assistant-chatbox-rate-chat-like, .ays-assistant-chatbox-rate-chat-dislike', function (e) { _this.feedbackEvents($(this)); }); $(document).on('keypress', function (e) { if (e.which == 13 && !e.shiftKey) { var target = $(e.target); if (target.hasClass('ays-assistant-chatbox-prompt-input')) { var chatBotMainBoxOpened = !_this.$el.find(".ays-assistant-chatbox-main-container").is(':hidden'); if(chatBotMainBoxOpened){ var prompt = _this.$el.find('.ays-assistant-chatbox-prompt-input'); if (prompt.length > 0) { if ($(prompt).val().trim() != '' && $(prompt).is(":focus")) { var button = _this.$el.find('.ays-assistant-chatbox-send-button'); if ( !button.prop('disabled') ) { e.preventDefault(); button.trigger("click"); } } } } } else if (target.hasClass('ays-assistant-chatbox-rate-chat-comment')) { var button = _this.$el.find('.ays-assistant-chatbox-rate-chat-submit'); if ( !button.prop('disabled') ) { e.preventDefault(); button.trigger("click"); } } } }); } AysChatGPTChatBoxPublic.prototype.gettingResponse = function (data) { var _this = this; var loader = _this.$el.find('.ays-assistant-chatbox-loading-box'); var scrolledHeight = _this.$el.find('.ays-assistant-chatbox-messages-box')[0].scrollHeight; var elementHeight = Math.round(_this.$el.find('.ays-assistant-chatbox-messages-box').outerHeight()); loader.hide(); var checkError = (typeof data.error == "object" ) ? false : true; if(checkError){ var chatBotIcon = ''; if (_this.dbOptions.chatboxTheme == 'chatgpt') { chatBotIcon = '
'; } switch(_this.dbOptions.chatModel){ case 'gpt-3.5-turbo': case 'gpt-3.5-turbo-16k': _this.chatConversation.push(data.choices[0].message); var response = "" + (data.choices[0].message.content.replace(/^\n+/, '')) + ""; break; default: _this.chatConversation.push("Chatbot: " + data.choices[0].text.replace(/^[^:]+:\s*/, '').replace(/^\n+/, '')); var response = "" + (data.choices[0].text.replace(/^[^:]+:\s*/, '').replace(/^\n+/, '')) + ""; break; } var buttons = getAIButtons(_this.dbOptions); var aiMessage = $("
", {"class": "ays-assistant-chatbox-ai-message-box"}).html(chatBotIcon + response + buttons); _this.$el.find('.ays-assistant-chatbox-messages-box').append(aiMessage).scrollTop(_this.$el.find('.ays-assistant-chatbox-messages-box')[0].scrollHeight); this.$el.find('.ays-assistant-chatbox-regenerate-response-button').prop('disabled', false); } else{ var errorMessage = ''; if(data.error.type == "insufficient_quota"){ errorMessage = " https://platform.openai.com/account/usage "; } _this.$el.find('.ays-assistant-chatbox-messages-box').append($("
", {"class": "ays-assistant-chatbox-error-message-box"}).html(data.error.message + errorMessage)).scrollTop(_this.$el.find('.ays-assistant-chatbox-messages-box')[0].scrollHeight); } scrolledHeight = _this.$el.find('.ays-assistant-chatbox-messages-box')[0].scrollHeight; elementHeight = Math.round(_this.$el.find('.ays-assistant-chatbox-messages-box').outerHeight()); loader.css('bottom', (10 + elementHeight - scrolledHeight)); } AysChatGPTChatBoxPublic.prototype.copyResponse = function (text) { var _this = this; var el = jQuery(''; readyContent += ''; } modal.find('.ays-assistant-chatbox-main-chat-modal-body-text').append(readyContent); modal.css('display', 'flex'); modal.on('click', function (e) { if ($(e.target).attr('data-modal-action') === 'submit') { var textarea = $(e.target).prev('textarea.ays-assistant-chatbox-rate-chat-comment'); var feedback = textarea.length > 0 ? textarea.val() : ''; if (feedback.trim() != '') { $.ajax({ url: _this.globalSettings.ajaxUrl, method: 'post', dataType: 'json', data: { action: _this.ajaxAction, function: 'ays_chatgpt_save_feedback', feedback_data: JSON.stringify({ post_id: _this.dbOptions.postId, user_name: '', user_email: '', source: 'public', type: 'chatbot', feedback: feedback, feedback_action: action, }), }, success: function (response) { _this.$el.find('.ays-assistant-chatbox-rate-chat-row').hide(); }, error: function (error) { console.log(error); } }); } modal.hide('fast'); modal.find('.ays-assistant-chatbox-main-chat-modal-body-image').removeClass('ays-assistant-chatbox-main-chat-modal-body-image-rate-chat'); modal.find('.ays-assistant-chatbox-main-chat-modal-body').css('margin-top', ''); modal.find('.ays-assistant-chatbox-main-chat-modal-body-image').empty(); modal.find('.ays-assistant-chatbox-main-chat-modal-body-text').empty(); } else if ($(e.target).attr('data-modal-action') === 'close') { modal.hide('fast'); modal.find('.ays-assistant-chatbox-main-chat-modal-body-image').removeClass('ays-assistant-chatbox-main-chat-modal-body-image-rate-chat'); modal.find('.ays-assistant-chatbox-main-chat-modal-body').css('margin-top', ''); modal.find('.ays-assistant-chatbox-main-chat-modal-body-image').empty(); modal.find('.ays-assistant-chatbox-main-chat-modal-body-text').empty(); } }); } AysChatGPTChatBoxPublic.prototype.checkSession = function () { var _this = this; if (_this.dbOptions.enableRequestLimitations) { var limit = +_this.dbOptions.requestLimitationsLimit; var interval = _this.dbOptions.requestLimitationsInterval; var timeInSeconds = 1; switch (interval) { case 'hour': timeInSeconds = 60 * 60; break; case 'day': timeInSeconds = 24 * 60 * 60; break; case 'week': timeInSeconds = 7 * 24 * 60 * 60; break; case 'month': timeInSeconds = 30 * 7 * 24 * 60 * 60; break; default: break; } if (limit > 0 && timeInSeconds > 1) { if (getCookie('wp-ays-cgpta-wndw-count') === undefined) { _this.requestCount = 1; var expiryDate = new Date(); expiryDate.setSeconds(expiryDate.getSeconds() + timeInSeconds); setCookie('wp-ays-cgpta-wndw-count-start', expiryDate.toUTCString(), {'expires': expiryDate.toUTCString()}); setCookie('wp-ays-cgpta-wndw-count', _this.requestCount, {'expires': expiryDate.toUTCString()}); } else { if (+getCookie('wp-ays-cgpta-wndw-count') < limit) { var expires = getCookie('wp-ays-cgpta-wndw-count-start'); setCookie('wp-ays-cgpta-wndw-count', _this.requestCount, {'expires': expires}); } else { _this.$el.find('.ays-assistant-chatbox-messages-box').append($("
", {"class": "ays-assistant-chatbox-error-message-box"}).html(_this.globalSettings.translations.requestLimitReached[interval])).scrollTop(_this.$el.find('.ays-assistant-chatbox-messages-box')[0].scrollHeight); return false; } } } } else { if (getCookie('wp-ays-cgpta-wndw-count') !== undefined) { deleteCookie('wp-ays-cgpta-wndw-count'); } if (getCookie('wp-ays-cgpta-wndw-count-start') !== undefined) { deleteCookie('wp-ays-cgpta-wndw-count-start'); } } return true; } $.fn.AysChatGPTChatBoxPublicMain = function(options) { if (!$.data(this, 'AysChatGPTChatBoxPublicMain')) { $.data(this, 'AysChatGPTChatBoxPublicMain', new AysChatGPTChatBoxPublic(this, options)); } else { try { $(this).data('AysChatGPTChatBoxPublicMain').init(); } catch (err) { console.error('AysChatGPTChatBoxPublicMain has not initiated properly'); } } }; })(jQuery);