명령어를 채널에 보내는 봇을 만들고 serverless로 배포했는데 문제가 생겼다.
discord.js는 node v16부터 지원하는데 문제는 aws lambda는 v14까지만 지원한다.
discord.js를 사용하지 않는 다른 방법을 찾야아 한다.
문제의 코드
const { Client, Intents } = require("discord.js");
require("dotenv").config({ path: `./.env.${process.env.NODE_ENV}` });
class DiscordBot {
constructor() {
this.client = new Client({
intents: [Intents.FLAGS.GUILDS],
});
}
async notify(msg, channel) {
try {
this.client.once("ready", async () => {
console.log(`Logged in as ${this.client.user.tag}!`);
const channelObj = this.client.channels.cache.get(channel);
await channelObj.send(msg);
this.client.destroy();
});
this.client.login(process.env.DISCORD_BOT_TOKEN);
return true;
} catch (error) {
console.error(error);
return false;
}
}
}
discord.js 패키지를 사용하지 않고 discord API와 create message를 활용한다.
const superagent = require("superagent");
require("dotenv").config({ path: `./.env.${process.env.NODE_ENV}` });
class DiscordBot {
async notify(msg, channel) {
try {
const url = `https://discord.com/api/v8/channels/${channel}/messages`;
await superagent
.post(url)
.send({
content: msg,
})
.set({
authorization: `Bot ${process.env.DISCORD_BOT_TOKEN}`,
});
return true;
} catch (error) {
console.error(error);
return false;
}
}
}