Estoy tratando de hacer un bot de Discord que solo diga si alguien está en línea en el juego.
Sin embargo, sigo recibiendo este mensaje:
[ERR_REQUIRE_ESM]: require() del módulo ES no compatible. En su lugar, cambie el requerimiento de index.js en... a una importación dinámica () que está disponible en todos los módulos de CommonJS.
Este es mi código:
module.exports = { name: 'username', description: "this is the username command", async execute(message, args) { const fetch = require('node-fetch'); if (args.length !== 1) { return message.channel.send("invalid username wtf") } const ign = args[0] if (ign.length > 16 || ign.length < 3) { return message.channel.send("invalid username wtf") } const uuid = await fetch(`https://api.mojang.com/users/profiles/minecraft/${ign}`).then(data => data.json()).then(data => data.id).catch(err => message.channel.send("error wtf")); const onlineInfo = await fetch(`https://api.hypixel.net/status?key=${john}&uuid=${uuid}`).then(data => data.json()); if (uuid.length !== 32) { return; } if (onlineinfo.success) { if (onlineinfo.session.online) { message.channel.send("they are online") } else { message.channel.send("they are offline") } } else { message.channel.send("hypixel api bad wtf") } } }
Este es mi archivo package.json :
{ "name": "discordbot", "version": "1.0.0", "main": "main.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "node main.js" }, "author": "", "license": "ISC", "description": "", "dependencies": { "discord.js": "^13.0.1", "node-fetch": "^3.0.0" } }
node-fetch
v3 recientemente dejó de admitir la forma require
de importarlo a favor de los módulos ES. Deberá usar las importaciones de ESM ahora, como:
import fetch from "node-fetch";
en la parte superior de su archivo.
La última versión node-fetch
no usa la sintaxis require()
para importar el paquete. Debes ir a tu package.json
y escribir
{ "type": "module", }
para usar la sintaxis de import
e importar node-fetch
, pero luego no puede usar require
para ningún otro paquete que necesite para trabajar solo con la declaración de import
.
O puede usar otros paquetes como Got o Axios que se pueden importar mediante la sintaxis require()
.
Me lo imaginé. Solo tuve que degradar node-fetch
a 2.6.1, ya que las versiones superiores solo usan ESM, lo que provocó muchos errores.
Simplemente reemplace require en la parte superior de su archivo con import .
// const fetch = require('node-fetch'); import fetch from "node-fetch";
node-fetch v3 recientemente dejó de admitir la forma requerida de importarlo a favor de los módulos ES. Deberá utilizar las importaciones de ESM ahora.
O
Degradar node-fetch a 2.6.1, ya que las versiones superiores solo usan EMS.