I'm trying to make a Discord bot that just says if someone is online on the game.
However I keep getting this message:
[ERR_REQUIRE_ESM]: require() of ES Module from not supported. Instead change the require of index.js in... to a dynamic import() which is available in all CommonJS modules.
This is my code:
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")
}
}
}
This is my package.json file:
{
"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 recently stopped support for the require
way of importing it in favor of ES Modules. You'll need to use ESM imports now, like:
import fetch from "node-fetch";
at the top of your file.
node-fetch
latest version doesn't use require()
syntax to import the package. You need to go to your package.json
and type
{
"type": "module",
}
to use the import
syntax and import node-fetch
, but then you can't use require
for any other packages you need to work with import
statement only.
Or you can use other packages such as Got or Axios which can be imported by require()
syntax.
I figured it out. I just had to downgrade node-fetch
to 2.6.1, as the higher versions only use ESM, which caused a lot of errors.
Just replace require at the top of your file with import.
// const fetch = require('node-fetch');
import fetch from "node-fetch";
node-fetch v3 recently stopped support for the require way of importing it in favor of ES Modules. You'll need to use ESM imports now.
Or
Downgrade node-fetch to 2.6.1, as the higher versions only use EMS.