首页 > 解决方案 > 角色列表命令发送对象而不是角色 discord.js

问题描述

它发送[object Object]. 控制台中没有错误。

let embed = new Discord.MessageEmbed()
 .setTitle('Availible Roles')
 .setColor('RANDOM')
 .setDescription(roles.array().join(' \n'));
message.channel.send(embed, { split: true });

其余代码

const Discord = require('discord.js');
const { prefix, token } = require('../config.json');

module.exports = {
    name: '',
    description: '',
    execute(message, args, client) {
        if (!message.content.startsWith(prefix) || message.author.bot) return;
        const roles = message.guild.roles.cache.filter(c => c.name.startsWith('A'))
       
        const arr = roles
            .array()
            .join('\n')
            .match(/.{1,2048}/g);

        for (let chunk of arr) {
            // loop through every element (every 2048 characters)
            let embed = new Discord.MessageEmbed()
                .setTitle('Available Roles')
                .setColor('RANDOM')
                .setDescription(chunk);

            message.channel.send(embed); // wait for the embed to be sent
        }
    },
};


常量角色 = message.guild.roles.cache.filter(c => c.name.startsWith('A'))

标签: javascriptnode.jsdiscorddiscord.js

解决方案


你的问题是{ split: true }。此选项可能会弄乱嵌入,因为它适用于常规短信。如果将其删除,则嵌入应该可以正常工作。

概念验证


如果你担心角色太多,超过 2048 个字符的限制,你可以实现这个功能:

// array of your description split every 2048 characters
const arr = roles
 .array()
 .join('\n')
 .match(/.{1,2048}/g);

for (let chunk of arr) {
 // loop through every element (every 2048 characters)
 let embed = new Discord.MessageEmbed()
  .setTitle('Available Roles')
  .setColor('RANDOM')
  .setDescription(chunk);

 await message.channel.send(embed); // wait for the embed to be sent
}

代码片段示例:

const string = 'Hello world! This is a string. Strings are very fun. Fun is also very, by definition, fun!'

// array of your description split every 20 characters
const arr = string.match(/.{1,20}/g);

for (let chunk of arr) {
  // loop through every element (every 20 characters)
  console.log(chunk)
}


推荐阅读