PluginProbe ʕ •ᴥ•ʔ
AI Engine – The Chatbot, AI Framework & MCP for WordPress / 1.6.71
AI Engine – The Chatbot, AI Framework & MCP for WordPress v1.6.71
3.5.7 3.5.6 3.5.5 3.5.4 3.5.3 3.5.2 3.5.1 3.5.0 3.4.9 3.4.8 3.4.7 0.2.1 1.6.91 0.2.2 1.6.92 0.2.3 1.6.93 0.2.4 1.6.94 0.2.5 1.6.95 0.2.6 1.6.96 0.2.7 1.6.97 0.2.8 1.6.98 0.2.9 1.6.99 0.3.0 1.7.0 0.3.1 1.7.1 0.3.2 1.7.2 0.3.3 1.7.3 0.3.4 1.7.4 0.3.5 1.7.5 0.3.6 1.7.6 0.4.0 1.7.7 0.4.1 1.7.8 0.4.2 1.7.9 0.4.3 1.8.0 0.4.4 1.8.1 0.4.5 1.8.2 0.4.6 1.8.3 0.4.7 1.8.4 0.4.8 1.8.5 0.4.9 1.8.6 0.5.0 1.8.7 0.5.1 1.8.8 0.5.2 1.8.9 0.5.3 1.9.0 0.5.4 1.9.1 0.5.5 1.9.2 0.5.6 1.9.3 0.5.7 1.9.4 0.5.8 1.9.5 0.5.9 1.9.6 0.6.0 1.9.7 0.6.1 1.9.8 0.6.2 1.9.81 0.6.3 1.9.82 0.6.4 1.9.83 0.6.5 1.9.84 0.6.6 1.9.85 0.6.7 1.9.86 0.6.8 1.9.87 0.6.9 1.9.88 0.7.0 1.9.89 0.7.1 1.9.90 0.7.2 1.9.91 0.7.3 1.9.92 0.7.4 1.9.93 0.7.5 1.9.94 0.7.6 1.9.95 0.7.7 1.9.96 0.7.8 1.9.97 0.7.9 1.9.98 0.8.0 1.9.99 0.8.1 2.0.0 0.8.2 2.0.1 0.8.3 2.0.2 0.8.4 2.0.3 0.8.5 2.0.4 0.8.6 2.0.5 0.8.7 2.0.6 0.8.8 2.0.7 0.8.9 2.0.8 0.9.0 2.0.9 0.9.2 2.1.0 0.9.3 2.1.1 0.9.4 2.1.2 0.9.5 2.1.3 0.9.6 2.1.4 0.9.7 2.1.5 0.9.8 2.1.6 0.9.81 2.1.7 0.9.82 2.1.8 0.9.83 2.1.9 0.9.84 2.2.0 0.9.85 2.2.1 0.9.86 2.2.2 0.9.87 2.2.3 0.9.88 2.2.4 0.9.89 2.2.5 0.9.9 2.2.51 0.9.91 2.2.52 0.9.92 2.2.53 0.9.93 2.2.54 0.9.94 2.2.56 0.9.95 2.2.57 0.9.96 2.2.6 0.9.97 2.2.60 0.9.98 2.2.61 0.9.99 2.2.62 1.0.0 2.2.63 1.0.01 2.2.70 1.0.1 2.2.80 1.0.2 2.2.81 1.0.3 2.2.90 1.0.4 2.2.91 1.0.5 2.2.92 1.0.6 2.2.93 1.0.7 2.2.94 1.0.8 2.2.95 1.0.9 2.3.0 1.1.0 2.3.1 1.1.1 2.3.2 1.1.2 2.3.3 1.1.3 2.3.4 1.1.4 2.3.5 1.1.5 2.3.6 1.1.6 2.3.7 1.1.7 2.3.8 1.1.8 2.3.9 1.1.9 2.4.0 1.2.0 2.4.1 1.2.1 2.4.2 1.2.2 2.4.3 1.2.21 2.4.4 1.2.3 2.4.5 1.2.30 2.4.6 1.3.0 2.4.7 1.3.1 2.4.8 1.3.2 2.4.9 1.3.3 2.5.0 1.3.31 2.5.1 1.3.32 2.5.2 1.3.33 2.5.3 1.3.34 2.5.4 1.3.35 2.5.5 1.3.36 2.5.6 1.3.37 2.5.7 1.3.38 2.5.8 1.3.39 2.5.9 1.3.40 2.6.0 1.3.41 2.6.1 1.3.42 2.6.2 1.3.43 2.6.3 1.3.44 2.6.5 1.3.45 2.6.6 1.3.46 2.6.7 1.3.47 2.6.8 1.3.48 2.6.9 1.3.49 2.7.0 1.3.50 2.7.1 1.3.51 2.7.2 1.3.52 2.7.3 1.3.53 2.7.4 1.3.54 2.7.5 1.3.56 2.7.6 1.3.57 2.7.7 1.3.58 2.7.8 1.3.59 2.7.9 1.3.60 2.8.0 1.3.61 2.8.1 1.3.62 2.8.2 1.3.63 2.8.3 1.3.64 2.8.4 1.3.65 2.8.5 1.3.66 2.8.6 1.3.67 2.8.7 1.3.68 2.8.8 1.3.69 2.8.9 1.3.70 2.9.0 1.3.71 2.9.1 1.3.72 2.9.2 1.3.73 2.9.3 1.3.74 2.9.4 1.3.75 2.9.5 1.3.76 2.9.6 1.3.77 2.9.7 1.3.78 2.9.8 1.3.79 2.9.9 1.3.80 3.0.0 1.3.81 3.0.1 1.3.82 3.0.2 1.3.83 3.0.3 1.3.84 3.0.4 1.3.85 3.0.5 1.3.86 3.0.6 1.3.87 3.0.7 1.3.88 3.0.8 1.3.89 3.0.9 1.3.90 3.1.0 1.3.91 3.1.1 1.3.92 3.1.2 1.3.93 3.1.3 1.3.94 3.1.4 1.3.95 3.1.5 1.3.96 3.1.6 1.3.97 3.1.7 1.3.98 3.1.8 1.3.99 3.1.9 1.4.0 3.2.0 1.4.1 3.2.1 1.4.2 3.2.2 1.4.3 3.2.3 1.4.4 3.2.4 1.4.5 3.2.5 1.4.6 3.2.6 1.4.7 3.2.7 1.4.8 3.2.8 1.4.9 3.2.9 1.5.0 3.3.0 1.5.1 3.3.1 1.5.2 3.3.2 1.5.3 3.3.3 1.5.4 3.3.4 1.5.5 3.3.5 1.5.6 3.3.6 1.5.7 3.3.7 1.5.8 3.3.8 1.5.9 3.3.9 1.6.0 3.4.0 1.6.1 3.4.1 1.6.2 3.4.2 1.6.3 3.4.3 1.6.5 3.4.4 1.6.51 3.4.5 1.6.52 3.4.6 1.6.53 1.6.54 1.6.55 1.6.56 1.6.57 1.6.58 1.6.59 1.6.60 1.6.61 1.6.62 1.6.63 1.6.64 1.6.65 1.6.66 1.6.67 1.6.68 trunk 1.6.69 0.0.1 1.6.70 0.0.2 1.6.71 0.0.3 1.6.72 0.0.4 1.6.73 0.0.5 1.6.74 0.0.6 1.6.75 0.0.7 1.6.76 0.0.8 1.6.77 0.0.9 1.6.78 0.1.0 1.6.79 0.1.1 1.6.81 0.1.2 1.6.82 0.1.3 1.6.83 0.1.4 1.6.84 0.1.5 1.6.85 0.1.6 1.6.86 0.1.7 1.6.87 0.1.8 1.6.88 0.1.9 1.6.89 0.2.0 1.6.90
ai-engine / classes / modules / discussions.php
ai-engine / classes / modules Last commit date
assistants.php 3 years ago chatbot.php 3 years ago chatbot_legacy.php 3 years ago chatbot_logs.php 3 years ago discussions.php 3 years ago security.php 3 years ago
discussions.php
205 lines
1 <?php
2
3 class Meow_MWAI_Modules_Discussions {
4 private $wpdb = null;
5 private $core = null;
6 private $table_chats = null;
7 private $db_check = false;
8 private $namespace = 'ai-engine/v1';
9
10 public function __construct() {
11 global $wpdb;
12 global $mwai_core;
13 $this->core = $mwai_core;
14 $this->wpdb = $wpdb;
15 $this->table_chats = $wpdb->prefix . 'mwai_chats';
16
17 if ( $this->core->get_option( 'shortcode_chat_discussions' ) ) {
18 add_filter( 'mwai_chatbot_reply', [ $this, 'chatbot_reply' ], 10, 4 );
19 add_action( 'rest_api_init', array( $this, 'rest_api_init' ) );
20 }
21 }
22
23 public function rest_api_init() {
24 register_rest_route( $this->namespace, '/chats', array(
25 'methods' => 'POST',
26 'callback' => array( $this, 'rest_chats' ),
27 'permission_callback' => '__return_true'
28 ) );
29 register_rest_route( $this->namespace, '/chats_delete', array(
30 'methods' => 'POST',
31 'callback' => array( $this, 'rest_chats_delete' ),
32 'permission_callback' => '__return_true'
33 ) );
34 }
35
36 function rest_chats( $request ) {
37 try {
38 $params = $request->get_json_params();
39 $offset = $params['offset'];
40 $limit = $params['limit'];
41 $filters = $params['filters'];
42 $sort = $params['sort'];
43 $chats = $this->chats_query( [], $offset, $limit, $filters, $sort );
44 return new WP_REST_Response([ 'success' => true, 'total' => $chats['total'], 'chats' => $chats['rows'] ], 200 );
45 }
46 catch ( Exception $e ) {
47 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
48 }
49 }
50
51 function rest_chats_delete( $request ) {
52 try {
53 $params = $request->get_json_params();
54 $chatsIds = $params['chatIds'];
55 if ( is_array( $chatsIds ) ) {
56 if ( count( $chatsIds ) === 0 ) {
57 $this->wpdb->query( "TRUNCATE TABLE $this->table_chats" );
58 }
59 foreach( $chatsIds as $chatId ) {
60 $this->wpdb->delete( $this->table_chats, [ 'chatId' => $chatId ] );
61 }
62 }
63 return new WP_REST_Response([ 'success' => true ], 200 );
64 }
65 catch ( Exception $e ) {
66 return new WP_REST_Response([ 'success' => false, 'message' => $e->getMessage() ], 500 );
67 }
68 }
69
70 function chats_query( $chats = [], $offset = 0, $limit = null, $filters = null, $sort = null ) {
71 $this->check_db();
72 $offset = !empty( $offset ) ? intval( $offset ) : 0;
73 $limit = !empty( $limit ) ? intval( $limit ) : 5;
74 $filters = !empty( $filters ) ? $filters : [];
75 $sort = !empty( $sort ) ? $sort : [ "accessor" => "time", "by" => "desc" ];
76 $query = "SELECT * FROM $this->table_chats";
77
78 // Filters
79 if ( is_array( $filters ) ) {
80 $where = array();
81 foreach ( $filters as $filter ) {
82 if ( $filter['accessor'] === 'user' ) {
83 $value = $filter['value'];
84 if ( empty( $value ) ) {
85 continue;
86 }
87 $isIP = filter_var( $value, FILTER_VALIDATE_IP );
88 if ( $isIP ) {
89 $where[] = "extra LIKE '%\"ip\":\"{$value}\"%'";
90 }
91 else {
92 $where[] = "extra LIKE '%\"userId\":{$value}%'";
93 }
94 }
95 }
96 if ( count( $where ) > 0 ) {
97 $query .= " WHERE " . implode( " AND ", $where );
98 }
99 }
100
101 // Count based on this query
102 $chats['total'] = $this->wpdb->get_var( "SELECT COUNT(*) FROM ($query) AS t" );
103
104 // Order by
105 $query .= " ORDER BY " . esc_sql( $sort['accessor'] ) . " " . esc_sql( $sort['by'] );
106
107 // Limits
108 if ( $limit > 0 ) {
109 $query .= " LIMIT $offset, $limit";
110 }
111
112 $chats['rows'] = $this->wpdb->get_results( $query, ARRAY_A );
113 return $chats;
114 }
115
116 function chatbot_reply( $rawText, $query, $params, $extra ) {
117 global $mwai_core;
118 $userIp = $mwai_core->get_ip_address();
119 $userId = $mwai_core->get_user_id();
120 $chatClientId = isset( $params['clientId'] ) ? $params['clientId'] : $query->session;
121 $ssChatId = hash( 'sha256', $userIp . $userId . $chatClientId );
122 $this->check_db();
123 $chat = $this->wpdb->get_row( $this->wpdb->prepare( "SELECT * FROM $this->table_chats WHERE chatId = %s", $ssChatId ) );
124 $extra = [
125 'embeddings' => isset( $extra['embeddings'] ) ? $extra['embeddings'] : null
126 ];
127 if ( $chat ) {
128 $chat->messages = json_decode( $chat->messages );
129 $chat->messages[] = [
130 'type' => 'user',
131 'text' => $params['newMessage']
132 ];
133 $chat->messages[] = [
134 'type' => 'ai',
135 'text' => $rawText,
136 'extra' => $extra
137 ];
138 $chat->messages = json_encode( $chat->messages );
139 $this->wpdb->update( $this->table_chats, [
140 'messages' => $chat->messages,
141 'updated' => date( 'Y-m-d H:i:s' )
142 ], [ 'id' => $chat->id ] );
143 }
144 else {
145 $chat = [
146 'chatId' => $ssChatId,
147 'messages' => json_encode( [
148 [
149 'type' => 'user',
150 'text' => $params['newMessage']
151 ],
152 [
153 'type' => 'ai',
154 'text' => $rawText,
155 'extra' => $extra
156 ]
157 ] ),
158 'extra' => json_encode( [
159 'ip' => $userIp,
160 'userId' => $userId,
161 'session' => $query->session,
162 'model' => $query->model,
163 'temperature' => $query->temperature
164 ] ),
165 'created' => date( 'Y-m-d H:i:s' ),
166 'updated' => date( 'Y-m-d H:i:s' )
167 ];
168 $this->wpdb->insert( $this->table_chats, $chat );
169 }
170 return $rawText;
171 }
172
173 function check_db() {
174 if ( $this->db_check ) {
175 return true;
176 }
177 $this->db_check = !( strtolower(
178 $this->wpdb->get_var( "SHOW TABLES LIKE '$this->table_chats'" ) ) != strtolower( $this->table_chats )
179 );
180 if ( !$this->db_check ) {
181 $this->create_db();
182 $this->db_check = !( strtolower(
183 $this->wpdb->get_var( "SHOW TABLES LIKE '$this->table_chats'" ) ) != strtolower( $this->table_chats )
184 );
185 }
186 return $this->db_check;
187 }
188
189 function create_db() {
190 $charset_collate = $this->wpdb->get_charset_collate();
191 $sqlLogs = "CREATE TABLE $this->table_chats (
192 id BIGINT(20) NOT NULL AUTO_INCREMENT,
193 chatId VARCHAR(64) NOT NULL NULL,
194 messages TEXT NOT NULL NULL,
195 extra TEXT NOT NULL NULL,
196 created DATETIME NOT NULL,
197 updated DATETIME NOT NULL,
198 PRIMARY KEY (id),
199 INDEX chatId (chatId)
200 ) $charset_collate;";
201 require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
202 dbDelta( $sqlLogs );
203 }
204
205 }