neekuro 2.1.0 → 2.3.0

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.
package/CHANGELOG.md ADDED
@@ -0,0 +1,68 @@
1
+ # Changelog
2
+
3
+ ## [2.3.0] - 15-09-2026
4
+
5
+ ### Added
6
+ - Nuevas subcategorías de `action`: `handhold`, `highfive`, `read` y `wave`.
7
+ - Nuevas subcategorías de `reaction`: `disgust`, `facepalm`, `happy`, `love`, `nervous`, `shrug` y `surprised`.
8
+
9
+ ### Fixed
10
+ - El timeout de 10 segundos de las imágenes remotas ahora también cubre la lectura del cuerpo, no solo las cabeceras.
11
+ - Las respuestas descartadas (redirecciones, errores HTTP o formatos inválidos) liberan su conexión.
12
+ - El User-Agent de descarga de imágenes refleja la versión real del paquete.
13
+ - Declaraciones TypeScript: `APIError.determineMessage` es estático, se añade `APIError.fromNetworkError` y se corrige la resolución por defecto documentada (1140 × 520) y el ejemplo de `User.token()`.
14
+ - `SFW` muestra `Desconocido` cuando el anime llega como `Unknown`, no solo cuando viene vacío.
15
+ - `SFW` descarta las URL repetidas de una subcategoría: pesaban doble en el sorteo y podían salir dos veces seguidas.
16
+
17
+ ### Compatibility
18
+ - Solo se añaden subcategorías; las existentes no cambian.
19
+
20
+ ## [2.2.0] - 28-08-2026
21
+
22
+ ### Added
23
+ - `SFW.getGifs()` permite obtener todas las imágenes de una subcategoría.
24
+ - `SFW.clearCache()` permite invalidar toda la caché, una categoría o una subcategoría.
25
+ - `SFW.setBaseURL()` permite configurar un endpoint HTTPS alternativo.
26
+ - `SFW.setCacheTTL()` permite configurar o desactivar el tiempo de caché.
27
+
28
+ ### Changed
29
+ - `SFW.getGif()` conserva listas en memoria durante cinco minutos y selecciona aleatoriamente en cada llamada.
30
+ - Las solicitudes concurrentes para la misma subcategoría se agrupan en una sola petición HTTP.
31
+ - Cuando existen varias imágenes se evita repetir inmediatamente la selección anterior.
32
+ - Cambiar el token invalida automáticamente las listas obtenidas con el token previo.
33
+ - El cliente REST admite respuestas tipadas distintas a un único GIF.
34
+
35
+ ### Compatibility
36
+ - `SFW.getGif(category, gif)` mantiene la misma firma y continúa devolviendo `NekoGif`.
37
+ - La caché solamente cambia la frecuencia de consulta; no fija una imagen durante el TTL.
38
+
39
+ ## [2.1.0] - 28-08-2026
40
+
41
+ ### Changed
42
+ - Se corrigieron imports sensibles a mayúsculas para funcionar en Linux.
43
+ - Se eliminó la dependencia circular del paquete hacia sí mismo y `node-fetch`.
44
+ - `Welcome` valida resolución, coordenadas, radios, fuentes e imágenes con límites seguros.
45
+ - Avatar, título y descripción utilizan una columna centrada automática con modo manual opcional.
46
+ - Las imágenes remotas requieren HTTPS, tienen timeout, límite de 10 MB y bloqueo de redes privadas.
47
+ - El cliente REST usa `fetch` nativo, timeout y conserva el error concreto de red.
48
+ - Se alinearon los exports, la implementación y las declaraciones TypeScript.
49
+
50
+ ### Compatibility
51
+ - Se conserva la API encadenable de `Welcome`.
52
+ - `Error` continúa disponible como alias de `NekoError`.
53
+ - Las URLs HTTP de imágenes dejan de aceptarse; deben utilizar HTTPS.
54
+
55
+ ## [2.0.3] - 07-04-2025
56
+
57
+ ### Fixed
58
+ - **Error de Importaciones**
59
+ - Corregido el error de importaciones require('...')`
60
+ - Causaba que no se pudiera usar el paquete
61
+ - Se uso el mismo nombre para todas las importaciones respecto al archivo
62
+ - Afectaba a todos los usuarios que hacian uso de la api
63
+
64
+ **Impacto**:
65
+ - La actualizacion prevee que resuelva el error
66
+ - No requiere cambios en implementaciones existentes
67
+
68
+ Commit: (1e7380a)
package/README.md CHANGED
@@ -1,94 +1,128 @@
1
- <center> <h1>NeeKuro</h1> </center>
2
- <center>de <b>Kmz Kuro</b> en nombre de <b>NexaTDC</b></center>
3
- <center>creada apartir de <b>cacao_nekoapi</b> y <b>nekoapi.beta</b> en npm.js</center>
4
- <br>
5
- <center>
6
- <img alt="NPM Version" src="https://img.shields.io/npm/v/neekuro?logo=npm&style=flat&color=0d8973">
7
- <img alt="Downloads" src="https://img.shields.io/npm/dw/neekuro?style=flat&color=bf9308&label=Descargas">
8
- <img alt="Typescript" src="https://img.shields.io/badge/declaraciones-typescript-blue?logo=typescript">
9
- <img alt="NPM Version" src="https://img.shields.io/badge/node%20version-%3E=20.12.2-489248?logo=nodedotjs">
10
- </center>
11
-
12
- ### ¿Qué es "NeeKuro"?
13
-
14
- NeeKuro es una biblioteca de imágenes con temática de anime para bots de Discord e imagenes de bienvenida.
15
-
16
- Principalmente se creo con el fin de ser unicamente para <b>Maple Bot</b>. Sin embargo, desde que se decidio hacer a Maple de codigo publico, tambien se decidio que tanto su API como paquete fuesen libres.
17
-
18
- > notas: el paquete puede contener errores ya que se encuentra en fase beta, la API se hostea de manera gratuita por lo que las solicitudes no siempre pueden estar disponibles.
19
-
20
- ## Instalacion
21
-
22
- ```sh
23
- npm install neekuro
24
- ```
25
-
26
- ## Ejemplos
27
-
28
- NeeKuro es un paquete que requiere de un token para llevar a cabo sus sollicitudes, por lo que requieres de ir a la [API Oficial](https://www.nexatdc.work.gd/api/) para poder generar un token.
29
-
30
- ### primeros pasos
31
- 1 - Instanciamiento de usuario y establecimiento del token.<br>Este paso se requiere ya que con ello se establece globalmente el token por el paquete
32
- <hr>
33
-
34
- ```javascript
35
- require('dotenv').config();
36
- // importacion del paquete neekuro
37
- const neekuro = require('neekuro');
38
-
39
- // instanciamiento del usuario
40
- const user = new neekuro.User();
41
-
42
- // establecimiento del token
43
- user.token(process.env['ApiToken'])
44
- ```
45
- <hr>
46
-
47
- #### Peticion de imagenes simple
48
- Una vez estableciste el token puedes comenzar a pedir imagenes
49
-
50
- ```javascript
51
-
52
- const neekuro = require('neekuro');
53
-
54
- /**
55
- * Codigo de usuario
56
- */
57
-
58
- // es necesario escribir todo siempre dentro de una funcion asincrona
59
- async function ObtenerImagen() {
60
- // obtenemos un gif con el metodo getGif de SFW
61
- const cuddle = await neekuro.SFW.getGif('action', 'cuddle');
62
-
63
- // imprimimos la url y el anime del gif
64
- console.log(cuddle.getUrl(), cuddle.getAnime())
65
- }
66
-
67
- // ejecutamos la funcion
68
- ObtenerImagen();
69
-
70
- // nota: no te aguites por el gif y subcategoria, todo viene en documentado con typescript, solo tienes que completar los pasos :)
71
- ```
72
- #### Ejemplo de imagenes de bienvenida
73
- Las imagenes de bienvenida son otra de las alternativas que otorga NeeKuro, puedes hacer una imagen de la siguiente manera:
74
- ```javascript
75
- // obtenemos directamente la clase del paquete
76
- const { Welcome } = require('neekuro');
77
- const fs = require('fs');
78
-
79
- // Configuración básica, añade un avatar titulo y descripción
80
- const welcome = new Welcome()
81
- .setAvatar('https://ejemplo.com/avatar.jpg')
82
- .setTitle('¡Bienvenido!')
83
- .setDescription('Al servidor de Discord');
84
-
85
- // Genera y guarda la imagen
1
+ <center> <h1>NeeKuro</h1> </center>
2
+ <center>de <b>Kmz Kuro</b> en nombre de <b>NexaTDC</b></center>
3
+ <center>creada apartir de <b>cacao_nekoapi</b> y <b>nekoapi.beta</b> en npm.js</center>
4
+ <br>
5
+ <center>
6
+ <img alt="NPM Version" src="https://img.shields.io/npm/v/neekuro?logo=npm&style=flat&color=0d8973">
7
+ <img alt="Downloads" src="https://img.shields.io/npm/dw/neekuro?style=flat&color=bf9308&label=Descargas">
8
+ <img alt="Typescript" src="https://img.shields.io/badge/declaraciones-typescript-blue?logo=typescript">
9
+ <img alt="NPM Version" src="https://img.shields.io/badge/node%20version-%3E=20.12.2-489248?logo=nodedotjs">
10
+ </center>
11
+
12
+ ### ¿Qué es "NeeKuro"?
13
+
14
+ NeeKuro es una biblioteca de imágenes con temática de anime para bots de Discord e imagenes de bienvenida.
15
+
16
+ Principalmente se creo con el fin de ser unicamente para <b>Maple Bot</b>. Sin embargo, desde que se decidio hacer a Maple de codigo publico, tambien se decidio que tanto su API como paquete fuesen libres.
17
+
18
+ > notas: el paquete puede contener errores ya que se encuentra en fase beta, la API se hostea de manera gratuita por lo que las solicitudes no siempre pueden estar disponibles.
19
+
20
+ ## Instalacion
21
+
22
+ ```sh
23
+ npm install neekuro
24
+ ```
25
+
26
+ ## Ejemplos
27
+
28
+ NeeKuro es un paquete que requiere de un token para llevar a cabo sus sollicitudes, por lo que requieres de ir a la [API Oficial](https://www.nexatdc.work.gd/api/) para poder generar un token.
29
+
30
+ ### primeros pasos
31
+ 1 - Instanciamiento de usuario y establecimiento del token.<br>Este paso se requiere ya que con ello se establece globalmente el token por el paquete
32
+ <hr>
33
+
34
+ ```javascript
35
+ require('dotenv').config();
36
+ // importacion del paquete neekuro
37
+ const neekuro = require('neekuro');
38
+
39
+ // instanciamiento del usuario
40
+ const user = new neekuro.User();
41
+
42
+ // establecimiento del token
43
+ user.token(process.env['ApiToken'])
44
+ ```
45
+ <hr>
46
+
47
+ #### Peticion de imagenes simple
48
+ Una vez estableciste el token puedes comenzar a pedir imagenes
49
+
50
+ ```javascript
51
+
52
+ const neekuro = require('neekuro');
53
+
54
+ /**
55
+ * Codigo de usuario
56
+ */
57
+
58
+ // es necesario escribir todo siempre dentro de una funcion asincrona
59
+ async function ObtenerImagen() {
60
+ // obtenemos un gif con el metodo getGif de SFW
61
+ const cuddle = await neekuro.SFW.getGif('action', 'cuddle');
62
+
63
+ // imprimimos la url y el anime del gif
64
+ console.log(cuddle.getUrl(), cuddle.getAnime())
65
+ }
66
+
67
+ // ejecutamos la funcion
68
+ ObtenerImagen();
69
+
70
+ // nota: no te aguites por el gif y subcategoria, todo viene en documentado con typescript, solo tienes que completar los pasos :)
71
+ ```
72
+
73
+ `getGif()` selecciona una imagen nuevamente en cada llamada. Internamente, NeeKuro
74
+ conserva durante cinco minutos la lista de la subcategoría para reducir solicitudes
75
+ HTTP; no conserva un único GIF durante ese tiempo. Cuando existen varias imágenes,
76
+ evita mostrar la misma dos veces consecutivas.
77
+
78
+ También puedes obtener la lista completa:
79
+
80
+ ```javascript
81
+ const gifs = await neekuro.SFW.getGifs('action', 'cuddle');
82
+ console.log(gifs.map(gif => gif.getUrl()));
83
+ ```
84
+
85
+ Si actualizaste el catálogo y necesitas consultarlo inmediatamente, puedes limpiar
86
+ una subcategoría, una categoría completa o toda la caché:
87
+
88
+ ```javascript
89
+ neekuro.SFW.clearCache('action', 'cuddle');
90
+ neekuro.SFW.clearCache('action');
91
+ neekuro.SFW.clearCache();
92
+ ```
93
+
94
+ El TTL se expresa en milisegundos y un valor de cero desactiva la caché:
95
+
96
+ ```javascript
97
+ neekuro.SFW.setCacheTTL(5 * 60 * 1000);
98
+ ```
99
+
100
+ Para pruebas o instalaciones propias de la API puede configurarse otra URL HTTPS:
101
+
102
+ ```javascript
103
+ neekuro.SFW.setBaseURL('https://api.example.com/api/sfw');
104
+ ```
105
+
106
+ #### Ejemplo de imagenes de bienvenida
107
+ Las imagenes de bienvenida son otra de las alternativas que otorga NeeKuro, puedes hacer una imagen de la siguiente manera:
108
+ ```javascript
109
+ // obtenemos directamente la clase del paquete
110
+ const { Welcome } = require('neekuro');
111
+ const fs = require('fs');
112
+
113
+ // Configuración básica, añade un avatar titulo y descripción
114
+ const welcome = new Welcome()
115
+ .setAvatar('https://ejemplo.com/avatar.jpg')
116
+ .setTitle('¡Bienvenido!')
117
+ .setDescription('Al servidor de Discord');
118
+
119
+ // Genera y guarda la imagen
86
120
  welcome.build()
87
- .then(image => fs.writeFileSync('bienvenida.png', image))
88
- .then(() => console.log('Imagen creada correctamente!'))
89
- .catch(err => console.error('Error:', err.message));
90
-
91
- // nota: como antes, todo viene bien documentado en el paquete, solo sigue los pasos y explora por ti ;3
121
+ .then(image => fs.writeFileSync('bienvenida.png', image))
122
+ .then(() => console.log('Imagen creada correctamente!'))
123
+ .catch(err => console.error('Error:', err.message));
124
+
125
+ // nota: como antes, todo viene bien documentado en el paquete, solo sigue los pasos y explora por ti ;3
92
126
  ```
93
127
 
94
128
  Las imágenes remotas deben usar HTTPS. El paquete limita cada descarga a 10 MB,
@@ -124,34 +158,34 @@ pnpm run pack:check
124
158
 
125
159
  `pnpm run check` ejecuta las pruebas funcionales locales y comprueba las
126
160
  declaraciones TypeScript. Ninguna de estas pruebas consulta la API remota.
127
- <hr>
128
- <center>
129
- <p>Resultado esperado</p>
130
- <img src="./sources/assets/example.png" style="width: 60%; max-width: 500px;" alt="Texto alternativo">
131
- </center>
132
-
133
- ## Contenido
134
-
135
- Lo siguente es lo que contiene (o contendra) el paquete
136
-
137
- | Categoria | Descripción | |
138
- |-|-|-|
139
- | Sfw | Contenido de roleplay no nsfw | en desarrollo
140
- | Nsfw | Contenido +18 general y roleplay | no comenzada
141
-
142
- ## Finalmente....
143
-
144
- Tanto la API, paquete y bot se encuentran en desarrollo, ante todo te pedimos la mayor de las paciencias, te aseguraremos que el resultado te gustará! :'3
145
-
146
- Finalmente te agradecemos tu preferencia y esperamos haber cumplido tus espectativas ;)
147
- <br><br><hr>
148
-
149
- ### que se tiene planeado?
150
-
151
- Principalmente terminaremos la categoria acción y reacción para tener la primer subida a NPM de este paquete y asi finalmente tener terminada la categoria SFW. <br> Sin embargo una de las problematicas que se nos presentan son buscar los gifs para la API asi como sus animes <b>es un proceso lento...</b> y agobiante...
152
- <br>Por eso ahora mas que nunca queremos que nos apoyes en <b>NexaTDC</b>! Con el fin de poder dar al publico lo mas pronto posible los servicios que Maple Bot ofrece.
153
-
154
- <b><i>No es para mi, es para la comunidad... Si no es para la comunidad, no es para nadie...</i></b>
155
- <i>- NexaTDC</i>
156
- <br><br><br><br>
157
- CC. Creative Commons 2025 - @CacaoNk0027
161
+ <hr>
162
+ <center>
163
+ <p>Resultado esperado</p>
164
+ <img src="./sources/assets/example.png" style="width: 60%; max-width: 500px;" alt="Texto alternativo">
165
+ </center>
166
+
167
+ ## Contenido
168
+
169
+ Lo siguente es lo que contiene (o contendra) el paquete
170
+
171
+ | Categoria | Descripción | |
172
+ |-|-|-|
173
+ | Sfw | Contenido de roleplay no nsfw | en desarrollo
174
+ | Nsfw | Contenido +18 general y roleplay | no comenzada
175
+
176
+ ## Finalmente....
177
+
178
+ Tanto la API, paquete y bot se encuentran en desarrollo, ante todo te pedimos la mayor de las paciencias, te aseguraremos que el resultado te gustará! :'3
179
+
180
+ Finalmente te agradecemos tu preferencia y esperamos haber cumplido tus espectativas ;)
181
+ <br><br><hr>
182
+
183
+ ### que se tiene planeado?
184
+
185
+ Principalmente terminaremos la categoria acción y reacción para tener la primer subida a NPM de este paquete y asi finalmente tener terminada la categoria SFW. <br> Sin embargo una de las problematicas que se nos presentan son buscar los gifs para la API asi como sus animes <b>es un proceso lento...</b> y agobiante...
186
+ <br>Por eso ahora mas que nunca queremos que nos apoyes en <b>NexaTDC</b>! Con el fin de poder dar al publico lo mas pronto posible los servicios que Maple Bot ofrece.
187
+
188
+ <b><i>No es para mi, es para la comunidad... Si no es para la comunidad, no es para nadie...</i></b>
189
+ <i>- NexaTDC</i>
190
+ <br><br><br><br>
191
+ CC. Creative Commons 2025 - @CacaoNk0027
package/package.json CHANGED
@@ -1,68 +1,69 @@
1
- {
2
- "$schema": "https://json.schemastore.org/package.json",
3
- "name": "neekuro",
4
- "version": "2.1.0",
5
- "description": "Una biblioteca de imágenes con temática de anime para bots de Discord.",
6
- "main": "sources/main/index.js",
7
- "types": "sources/typings/index.d.ts",
8
- "exports": {
9
- ".": {
10
- "import": {
11
- "types": "./sources/typings/index.d.ts",
12
- "default": "./sources/main/index.js"
13
- },
14
- "require": {
15
- "types": "./sources/typings/index.d.ts",
16
- "default": "./sources/main/index.js"
17
- }
18
- }
19
- },
20
- "directories": {
21
- "test": "test"
22
- },
23
- "files": [
24
- "sources",
25
- "README.md"
26
- ],
27
- "contributors": [
28
- "cacao0027 <kmzkuro@gmail.com>"
29
- ],
30
- "author": "cacao0027 <kmzkuro@gmail.com>",
31
- "keywords": [
32
- "anime",
33
- "acción",
34
- "gifs",
35
- "imagenes",
36
- "nsfw",
37
- "sfw",
38
- "discord",
39
- "action",
40
- "images"
41
- ],
42
- "license": "ISC",
43
- "packageManager": "pnpm@11.23.0",
44
- "scripts": {
45
- "test": "node --test test/*.test.js",
46
- "check": "node --check sources/main/index.js && node --test test/*.test.js && tsc -p test/tsconfig.json",
47
- "pack:check": "npm pack --dry-run"
48
- },
49
- "engines": {
50
- "node": ">=20.12.2"
51
- },
52
- "dependencies": {
53
- "canvas": "^3.1.0",
54
- "hex-color-regex": "^1.1.0"
55
- },
56
- "devDependencies": {
57
- "@types/node": "^24.0.0",
58
- "typescript": "^5.9.0"
59
- },
60
- "repository": {
61
- "type": "git",
62
- "url": "git+https://github.com/CacaoNk0027/neekuro_package.git"
63
- },
64
- "bugs": {
65
- "url": "https://github.com/CacaoNk0027/neekuro_package/issues"
66
- },
67
- "homepage": "https://github.com/CacaoNk0027/neekuro_package#readme"
68
- }
1
+ {
2
+ "$schema": "https://json.schemastore.org/package.json",
3
+ "name": "neekuro",
4
+ "version": "2.3.0",
5
+ "description": "Una biblioteca de imágenes con temática de anime para bots de Discord.",
6
+ "main": "sources/main/index.js",
7
+ "types": "sources/typings/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": {
11
+ "types": "./sources/typings/index.d.ts",
12
+ "default": "./sources/main/index.js"
13
+ },
14
+ "require": {
15
+ "types": "./sources/typings/index.d.ts",
16
+ "default": "./sources/main/index.js"
17
+ }
18
+ }
19
+ },
20
+ "directories": {
21
+ "test": "test"
22
+ },
23
+ "files": [
24
+ "sources",
25
+ "README.md",
26
+ "CHANGELOG.md"
27
+ ],
28
+ "contributors": [
29
+ "cacao0027 <kmzkuro@gmail.com>"
30
+ ],
31
+ "author": "cacao0027 <kmzkuro@gmail.com>",
32
+ "keywords": [
33
+ "anime",
34
+ "acción",
35
+ "gifs",
36
+ "imagenes",
37
+ "nsfw",
38
+ "sfw",
39
+ "discord",
40
+ "action",
41
+ "images"
42
+ ],
43
+ "license": "ISC",
44
+ "packageManager": "pnpm@11.23.0",
45
+ "scripts": {
46
+ "test": "node --test test/*.test.js",
47
+ "check": "node --check sources/main/index.js && node --test test/*.test.js && tsc -p test/tsconfig.json",
48
+ "pack:check": "npm pack --dry-run"
49
+ },
50
+ "engines": {
51
+ "node": ">=20.12.2"
52
+ },
53
+ "dependencies": {
54
+ "canvas": "^3.1.0",
55
+ "hex-color-regex": "^1.1.0"
56
+ },
57
+ "devDependencies": {
58
+ "@types/node": "^24.0.0",
59
+ "typescript": "^5.9.0"
60
+ },
61
+ "repository": {
62
+ "type": "git",
63
+ "url": "git+https://github.com/CacaoNk0027/neekuro_package.git"
64
+ },
65
+ "bugs": {
66
+ "url": "https://github.com/CacaoNk0027/neekuro_package/issues"
67
+ },
68
+ "homepage": "https://github.com/CacaoNk0027/neekuro_package#readme"
69
+ }