Discord.js 智能帮助嵌入
Posted
技术标签:
【中文标题】Discord.js 智能帮助嵌入【英文标题】:Discord.js smart help embed 【发布时间】:2021-08-19 15:41:10 【问题描述】:我正在尝试制作一个帮助嵌入,为我的命令文件文件夹中的每个文件创建一个新字段。一直报错,不知道怎么解决。
这是我的代码:
const Discord = require('discord.js');
const pagination = require('discord.js-pagination')
const prefix = require('../config.json').prefix;
module.exports =
name: "help", //.ping
description: "Help command.",
use: `$prefixhelp`,
async run (bot, message, args)
const embed1 = new Discord.MessageEmbed()
.setTitle('Help')
.setDescription(`Prefix: $prefix`)
for (const thing of require('../commands'))
.addField();
【问题讨论】:
【参考方案1】:您似乎正在使用discordjs.guide site 上提供的设置。这意味着,您已经在client.commands
或bot.commands
上拥有一组可用的命令。它包含您需要的所有数据。
集合有一个返回新数组的map()
方法。您可以使用它来遍历commands
并返回一个新的field object(一个带有name
和value
属性的对象)。拥有此数组后,您可以使用.addFields
方法(与.addField
不同)接受字段数组。
这样做的问题是字段的最大数量是 25。如果您有超过 25 个命令,则需要将它们发送到不同的嵌入中。您已经导入了discord.js-pagination
,它允许您提供一个嵌入数组,然后它会处理所有困难的工作。但是您仍然需要确保字段不超过 25 个。
要解决这个问题,您可以将原始数组分块为最多包含 25 个项目的新数组。我已经为您编写了一个辅助函数来执行此操作。它返回一个数组数组。
现在,您可以遍历块并为每个块创建一个新的嵌入对象并设置分页。
查看下面的代码:
const Discord = require('discord.js');
const pagination = require('discord.js-pagination');
const prefix = require('../config.json').prefix;
module.exports =
name: 'help', //.ping
description: 'Help command.',
use: `$prefixhelp`,
async run(bot, message, args)
const MAX_FIELDS = 25;
// iterate over the commands and create field objects
const fields = bot.commands.map((command) => (
name: 'Command',
value: `$command.name\n$command.description\n$command.use`,
));
// if there is less than 25 fields, you can safely send the embed
// in a single message
if (fields.length <= MAX_FIELDS)
return message.channel.send(
new Discord.MessageEmbed()
.setTitle('Help')
.setDescription(`Prefix: $prefix`)
.addFields(fields),
);
// if there are more, you need to create chunks w/ max 25 fields
const chunks = chunkify(fields, MAX_FIELDS);
// an array of embeds used by `discord.js-pagination`
const pages = [];
chunks.forEach((chunk) =>
// create a new embed for each 25 fields
pages.push(
new Discord.MessageEmbed()
.setTitle('Help')
.setDescription(`Prefix: $prefix`)
.addFields(chunk),
);
);
pagination('some message', pages);
,
;
// helper function to slice arrays
function chunkify(arr, len)
let chunks = [];
let i = 0;
let n = arr.length;
while (i < n)
chunks.push(arr.slice(i, (i += len)));
return chunks;
【讨论】:
【参考方案2】:如果其他一切都正确,应该这样做:
async run (bot, message, args)
const embed1 = new Discord.MessageEmbed()
.setTitle('Help')
.setDescription(`Prefix: $prefix`);
for (const thing of require('../commands'))
embed1.addField();
【讨论】:
【参考方案3】:将 .addField() 更改为 embed1.addField()。那可能会解决它。最多也有 25 个字段。还可以尝试添加一些参数来添加添加字段,例如里面的文本和字段的标题,例如 addField('test', 'test')。 IDK 你的错误是什么所以这些是可能的修复。
【讨论】:
以上是关于Discord.js 智能帮助嵌入的主要内容,如果未能解决你的问题,请参考以下文章