如何构建Discord机器人?本文带你在不到 60 分钟的时间内使用 NodeJS 构建你的第一个 Discord 机器人,包括详细的NodeJS构建Discord机器人示例。
Discord
是一款聊天应用程序,拥有超过 1 亿用户,通过文本、语音和视频对话建立在线社区。通过
Discord 为开发人员提供的广泛 API,我们可以构建在 Discord 上执行重复、平凡甚至有趣任务的机器人。管理社区、向社区发送消息和私人消息用户只是我们可以使用 Discord 机器人自动化的少数工作。
如何使用NodeJS构建Discord机器人?在今天的教程中,我们将构建一个简单(且有趣)的机器人,它会根据用户请求向社区发送随机的爸爸笑话。使用 Node.js 和discord.js 模块,我们可以在不到 60 分钟的时间内轻松创建、开发和部署此 Discord 机器人。倒计时现在开始。
在我们开始之前……在这里,我们列出了在开始学习本教程之前你需要设置的所有内容。
- 在你的机器上安装 Node.js。
- 在 Discord 上创建一个帐户。你可以下载桌面应用程序或使用浏览器访问它。
- 创建一个新社区 (或 Discord 语言中的新“服务器”)来测试应用程序。
最后一件事,你可以在GitHub 上找到该项目的代码
创建一个新的 Discord 机器人如何构建Discord机器人?在第一步中,你应该在 Discord 上创建和配置一个新机器人。这是你如何做到的。
登录你的 Discord 帐户并转到其开发人员门户上的应用程序页面。
文章图片
文章图片
文章图片
文章图片
保留“授权流程”部分下的默认选择。
文章图片
文章图片
文章图片
文章图片
实现机器人的行为NodeJS构建Discord机器人示例:我们现在可以开始添加代码来定义机器人在服务器内的行为方式。正如我们在文章开头提到的,我们将使用 Node.js 和 discord.js 来实现这一点。
作为实现的第一步,建立一个新的 Node.js 项目并使用 npm 对其进行初始化。然后,我们应该使用 npm 安装 discord.js、axios 和 dotenv 模块。
npm install discord.js axios dotenv
接下来,我们创建一个 .env 文件并添加我们之前复制的令牌作为环境变量。
//.envTOKEN=<
your token>
登录并开始监听事件现在我们可以导入 discord.js 并设置机器人来监听服务器事件并做出相应的响应。创建一个名为 index.js 的新文件并向其中添加以下代码。
//index.jsrequire("dotenv").config();
const Discord = require("discord.js");
const client = new Discord.Client();
//Listen to the event that signals the bot is ready to start working
client.on("ready", () => {
console.log(`logged in as ${client.user.tag}`);
});
//Listen to new messages on the server
client.on("message", async (message) => {
if (message.content === "ping") {
message.reply("pong");
}
});
//Login to the server using bot token
client.login(process.env.TOKEN);
这段代码中很少发生重要的事情。首先,我们导入 discord.js 模块并创建一个新的 Client 对象,它代表本场景中的 Discord 机器人。
client.login
然后该方法允许机器人使用我们添加到 .env 文件的令牌登录到 Discord。dotenv 模块负责将其作为环境变量添加到进程中。我们的机器人监听两个 Discord 事件:ready 和 message。当机器人准备好使用时,会触发 ready 事件。并且每次用户向频道发送消息时都会触发消息事件。在这里,我们设置机器人以“pong”回复每条发送“ping”的消息。
当我们使用该
node index
命令运行此 Node 脚本时,到目前为止一直处于离线状态的机器人将上线并开始工作。文章图片
文章图片
这个实现的基本逻辑是这样的。当用户提到我们的机器人时,它会使用 axios 向爸爸笑话 API 发送请求并检索随机爸爸笑话。然后它用笑话回复用户。非常简单。
这里需要注意的一件事是,我们需要将 GET 请求的 Accept 标头设置为 application/json 以从 API 中以 JSON 格式检索结果。
require("dotenv").config();
const axios = require("axios");
const Discord = require("discord.js");
const client = new Discord.Client();
const dadJokeURL = "https://icanhazdadjoke.com";
const headers = { "Accept": "application/json" };
async function getRandomDadJoke() {
const response = await axios.get(dadJokeURL, { headers: headers });
return response.data;
}//Listen to the event that signals bot is ready to start working
client.on("ready", () => {
console.log(`logged in as ${client.user.tag}`);
});
//Listen to new messages on the server
client.on("message", async (message) => {
//"Ignore the message if the bot authored it"
if (message.author.bot) return;
//If the doesn't specifically mention the bot, return
if (text.includes("@here") || text.includes("@everyone")) return;
//Return if the message doesn't mention the bot
if (!message.mentions.has(client.user.id)) return;
try {
//Reply with a random joke
const result = await getRandomDadJoke();
message.reply(result.joke);
}
catch (error) {
message.reply("Sorry, an error occured");
}
});
//Login to the server using bot token
client.login(process.env.TOKEN);
该
getRandomDadJoke
方法发送 axios 请求并随随机笑话返回检索到的数据。在消息处理程序中,机器人侦听消息事件并确定它应该回复哪些消息。它消除了三种类型的消息。- 由机器人本身创作的消息。
- 提及服务器上所有人的消息,而不仅仅是机器人。
- 未提及机器人的消息。
getRandomDadJoke
方法检索到的随机笑话。你可以停止和启动 Node 脚本以使修改后的机器人在服务器上运行。
文章图片
为了实现这一点,我们添加了一个名为的新函数
searchDadJokes
,该/search
函数使用搜索词作为查询参数将请求发送到API 端点。我们还将 设置limit=1
为仅检索有关给定主题的一个笑话。async function searchDadJokes(term) {
const params = { term: term, limit: 1 }
const response = await axios.get(`${dadJokeURL}/search`, { params: params, headers: headers });
return response.data.results[
0];
}
NodeJS构建Discord机器人示例:然后,我们必须修改消息事件处理程序以考虑用户提交搜索词的情况。这是我们如何做到的。
//Listen to new messages on the server
client.on("message", async (message) => {//"Ignore the message if the bot authored it"
if (message.author.bot) return;
const text = message.content.toLowerCase();
//If the doesn't specifically mention, bot return
if (text.includes("@here") || text.includes("@everyone")) return;
//Return if the message doesn't mention the bot
if (!message.mentions.has(client.user.id)) return;
let result;
try {
const term = text.replace(/<
@!\d+>/, "").trim();
//If there is a search term
if (term !== "") {
//Search a joke containing the term
result = await searchDadJokes(term);
if (!result) {
message.reply(`Sorry, got no dad jokes about ${term}. But how about a random dad joke?`);
}
}//Reply with a random joke
if (!result) {
result = await getRandomDadJoke();
}message.reply(result.joke);
}
catch (error) {
message.reply("Sorry, an error occured")
}
});
在此代码中,要检查用户是否提交了搜索词,我们需要从文本中删除机器人的 ID。当用户提到机器人时,它会被添加到文本中。提到的 ID 以下列格式出现在文本中。
<
@!1223344342859688930>
我们使用正则表达式模式检测文本中的 ID,
<
@!\d+>
并将其替换为空字符串。修剪修改后的文本后,机器人可以检索用户提交的搜索词。然后,机器人使用该searchDadJokes
方法查找相关笑话。但是如果 API 数据库没有关于特定主题的笑话,机器人会回复用户解释情况以及随机笑话。如果用户没有提交搜索词,默认情况下它会随机回复一个笑话。
其余代码与最后一个场景类似。所以,我们现在可以运行和测试我们机器人的这个新功能。
当有一个与搜索词相关的笑话时:
文章图片
文章图片
//Listen to new member joining event
client.on("guildMemberAdd", member => {
//Find the general channel in the user's channel list to send the welcome message
const channel = member.guild.channels.cache.find(ch => ch.name === "general");
//If the channel is not in the server, exit
if (!channel) return;
channel.send(`Welcome, ${member}! I'm at your service if you want to hear dad jokes`);
});
当新用户加入时,此功能在服务器上的工作方式如下。
文章图片
将机器人部署到 Heroku如何使用NodeJS构建Discord机器人?如果你想让机器人 24/7 全天候运行,那么在你的机器上本地运行机器人并不理想。因此,为了使其持续可用,我们将机器人部署到Heroku 云。
首先,我们应该 在我们的项目文件夹中创建一个Procfile,指定 Heroku 在应用程序启动时应该执行的命令。我们使用 npm node index.js 作为启动命令添加一个新的工作进程到 Procfile。
//Procfileworker: node index.js
接下来,你应该将项目初始化为 git 存储库并将其推送到 GitHub。我们可以直接将 GitHub 存储库连接到 Heroku 以部署机器人。我们建议在将项目推送到 GitHub 之前,将 node_modules 文件夹和 .env 文件添加到 .gitignore 文件中。
然后,一旦你登录 Heroku(如果没有,请创建一个帐户),你将被重定向到 Heroku 仪表板。在这里,你可以通过单击“新建”按钮来创建新应用程序。
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
如何构建Discord机器人:概括Discord API 是一个强大的工具,允许开发人员为 Discord 构建各种应用程序,包括机器人。基于 Node 的 discord.js 包让我们可以更轻松地利用这个工具。
如何使用NodeJS构建Discord机器人?今天,我们创建了一个简单的机器人,它可以执行多项自动化任务,包括消息传递渠道、欢迎新成员以及从远程 API 检索内容。这是一种任何人都可以尝试的有趣体验,可以让你为构建更严肃、更复杂的机器人做好准备。我希望你会喜欢用我们今天学到的东西来试验 Discord API。
推荐阅读
- NextJS是什么(使用Next开发更快网站的示例)
- 8个很酷的CSS提示和技巧(这样做效果更好)
- 使用这些最佳NodeJS模板引擎合集构建任何视图
- 每个Web开发人员都必须拥有的Chrome扩展程序合集
- 如何在Javascript中比较日期(方法和注意事项)
- 如何自定义TailwindCSS美化网站提供独特的外观()
- 顶级深度学习算法有哪些(你应该知道这些)
- 如何使用LSTM预测比特币的价格(分步指南)
- 在JavaScript中执行HTTP请求的5种方法