使用 TypeScript 创建你的第一个 Discord 机器人
Discord 是一个流行的游戏玩家和社区交流平台。Discord 的一大关键功能是能够托管机器人,这些机器人可以自动执行任务并为用户提供实用的服务。在本教程中,我们将逐步介绍如何使用 TypeScript 创建你的第一个 Discord 机器人。
先决条件
在开始之前,您需要具备以下条件:
-
您的计算机上安装了Node.js。
设置新机器人
要创建新的机器人,您需要按照以下步骤操作:
1. 转到Discord 开发者门户并创建一个新的应用程序。
2. 为您的应用程序命名,然后单击“创建”。
3. 复制您的应用程序 ID,选择并复制或直接单击“复制”按钮。
4. 在左侧点击“Bot”,然后点击“添加Bot”。
5. 根据需要自定义机器人的名称和个人资料图片,然后单击“保存更改”。
6. 在“令牌”部分下,点击“复制”,将机器人的令牌复制到剪贴板。此令牌稍后将用于验证您的机器人。
设置项目
现在我们有了机器人的令牌和应用程序客户端 ID,接下来让我们设置 TypeScript 项目。请按照以下步骤操作:
1. 为您的项目创建一个新目录并导航到该目录。
2. 运行npm init
以使用文件初始化您的项目package.json
。
3.安装以下软件包:
npm install discord.js dotenv
4.安装以下开发依赖项:
npm install -D typescript tsx tsup
5. 添加一些脚本到你的package.json
:
{
"dev": "tsx watch src/index.ts",
"start": "node dist/index.js",
"build": "tsup src/index.ts --minify"
}
6.创建一个tsconfig.json
文件来配置TypeScript:
{
"compilerOptions": {
"target": "ES2020",
"module": "commonjs",
"rootDir": "./src",
"outDir": "./dist",
"removeComments": true,
"resolveJsonModule": true,
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"strict": true,
"strictNullChecks": true,
"skipLibCheck": true
}
}
设置环境变量
为了确保机器人令牌等敏感信息的安全,我们将使用环境变量。请按照以下步骤进行设置:
.env
在项目目录的根目录中创建一个文件。
将以下行添加到文件,将 DISCORD_TOKEN 替换为您之前复制的机器人令牌,将 DISCORD_CLIENT_ID 替换为机器人客户端 ID:
DISCORD_TOKEN=<DISCORD_TOKEN>
DISCORD_CLIENT_ID=<DISCORD_CLIENT_ID>
现在,创建一个src
文件夹和一个config.ts
文件来获取它们。
import dotenv from "dotenv";
dotenv.config();
const { DISCORD_TOKEN, DISCORD_CLIENT_ID } = process.env;
if (!DISCORD_TOKEN || !DISCORD_CLIENT_ID) {
throw new Error("Missing environment variables");
}
export const config = {
DISCORD_TOKEN,
DISCORD_CLIENT_ID,
};
创建您的第一个命令
在本教程中,我将创建一个名为 ping 的命令,它将返回“Pong!”。为此,您只需导出一个 SlashCommand 数据,其中包含有关该命令的所有信息以及一个处理该命令的函数。commands
在该文件夹中创建一个文件夹,并在其中src
创建一个文件。ping.ts
import { CommandInteraction, SlashCommandBuilder } from "discord.js";
export const data = new SlashCommandBuilder()
.setName("ping")
.setDescription("Replies with Pong!");
export async function execute(interaction: CommandInteraction) {
return interaction.reply("Pong!");
}
您可以在文件夹内创建一个index.ts
文件commands
,将所有命令导出到一个文件中。
import * as ping from "./ping";
export const commands = {
ping,
};
太棒了!你做到了!但是还有一个问题。机器人所添加的服务器如何知道它拥有的命令?为了解决这个问题,我们需要将所有命令注册到每个服务器。
部署你的命令
为了部署你的命令,我们将创建一个deploy-commands.ts
文件,用于在相应的服务器中注册这些命令。让我们开始吧:
import { REST, Routes } from "discord.js";
import { config } from "./config";
import { commands } from "./commands";
const commandsData = Object.values(commands).map((command) => command.data);
const rest = new REST({ version: "10" }).setToken(config.DISCORD_TOKEN);
type DeployCommandsProps = {
guildId: string;
};
export async function deployCommands({ guildId }: DeployCommandsProps) {
try {
console.log("Started refreshing application (/) commands.");
await rest.put(
Routes.applicationGuildCommands(config.DISCORD_CLIENT_ID, guildId),
{
body: commandsData,
}
);
console.log("Successfully reloaded application (/) commands.");
} catch (error) {
console.error(error);
}
}
初始化你的机器人
要初始化你的机器人,你可以在文件夹中创建一个bot.ts
或index.ts
文件src
。在本教程中,我将创建一个index.ts
。
为了使机器人正常工作,您需要遵循以下步骤:
1. 创建一个新的 Discord 客户端,并设置其意图,以确定机器人将接收哪些事件的信息。在此示例中,机器人将接收有关公会、公会消息和私信的信息:
import { Client } from "discord.js";
const client = new Client({
intents: ["Guilds", "GuildMessages", "DirectMessages"],
});
2. 当机器人准备就绪时添加 console.log:
client.once("ready", () => {
console.log("Discord bot is ready! 🤖");
});
3. 新公会创建后部署命令:
client.on("guildCreate", async (guild) => {
await deployCommands({ guildId: guild.id });
});
4. 创建新用户交互后运行相应命令:
client.on("interactionCreate", async (interaction) => {
if (!interaction.isCommand()) {
return;
}
const { commandName } = interaction;
if (commands[commandName as keyof typeof commands]) {
commands[commandName as keyof typeof commands].execute(interaction);
}
});
5.使用您的令牌登录客户端:
client.login(config.DISCORD_TOKEN);
完成所有步骤后,您的文件应如下所示:
import { Client } from "discord.js";
import { config } from "./config";
import { commands } from "./commands";
import { deployCommands } from "./deploy-commands";
const client = new Client({
intents: ["Guilds", "GuildMessages", "DirectMessages"],
});
client.once("ready", () => {
console.log("Discord bot is ready! 🤖");
});
client.on("guildCreate", async (guild) => {
await deployCommands({ guildId: guild.id });
});
client.on("interactionCreate", async (interaction) => {
if (!interaction.isCommand()) {
return;
}
const { commandName } = interaction;
if (commands[commandName as keyof typeof commands]) {
commands[commandName as keyof typeof commands].execute(interaction);
}
});
client.login(config.DISCORD_TOKEN);
非常好!现在你只需要运行npm run dev
并将你的机器人添加到某个服务器,然后在某个文本频道中使用 /ping 即可。
如果您只想克隆该仓库,请点击下方链接前往 GitHub 仓库。如果您留下一颗星,我将非常高兴。
https://github.com/fellipeutaka/discord-bot-template
文章来源:https://dev.to/fellipeutaka/creating-your-first-discord-bot-using-typescript-1eh6