【问题标题】:Is there a way of making "embed pages" with Object-based embeds? (Discord.js)有没有办法使用基于对象的嵌入来制作“嵌入页面”? (不和谐.js)
【发布时间】:2021-05-19 22:27:24
【问题描述】:

我一直在寻找一种使用 discord.js 制作嵌入页面的方法,但我看到的所有教程都是针对 MessageEmbed 的。我想有办法对嵌入做出反应并让它切换到下一个。

这是我的原始代码:

client.on('message', (message) => {
 if (message.content.toLowerCase() == prefix + "help") {
     const Embed = {
    color: 0x91A6A6,
    title: 'Help Menu. Page 1.',
    author: {
        name: 'KLSB',
        icon_url: bot.user.avatarURL()
    },
    description: '\n How to use KLSB. \n',
    fields: [
        {
            name: '!-help',
            value: 'Opens a help menu.',
            inline: true,
        },
        {
            name: '!-cat',
            value: 'Grabs a random cat picture from the internet.',
            inline: true,
        },
        {
            name: '!-dog',
            value: 'Grabs a random dog picture from the internet.',
            inline: true,
        },
        {
            name: '!-panda',
            value: 'Grabs a random panda picture from the internet.',
            inline: true,
        },
        {
            name: '!-bird',
            value: 'Grabs a random panda picture from the internet.',
            inline: true,
        },
        {
            name: '!-meme',
            value: 'Finds a meme from Reddit.',
            inline: true,
        },
        {
            name: '!-animememe',
            value: 'Finds a anime meme from Reddit.',
            inline: true,
        },
        {
            name: '!-animalmeme',
            value: 'Finds a animal meme from Reddit.',
            inline: true,
        },
        {
            name: '!-hug',
            value: "Sends a hug through the internet!",
            inline: true,
        },
        {
            name: '!-8ball',
            value: "As they say, it sees the future!",
            inline: true,
        },
    ],
};

message.channel.send({ embed: Embed });
 }})

如果有人有一些例子,请与我分享(如果你能解释发生了什么会有所帮助:D)

【问题讨论】:

    标签: javascript node.js discord.js


    【解决方案1】:

    是的,这是可能的。我将向您展示的那个使用反应收集器来控制要转到哪个页面。您可以相应地修改它以适应您的页面需求,但这是基本要点。

    我首先设置了一个名为Pages 的数组,这就是您在说明中所写的内容,您可以为您的标题等相应地添加其他数组。我还将page 设置为1,因为这是默认页面,它将是用户当前所在页面的计数器。

    有多个步骤来展示它是如何工作的:

    1. 创建初始嵌入 + 发送嵌入(我看到您已经完成了,但您需要相应地对其进行修改以适应 pages 数组。
    2. 然后添加反应(我选择了 :rewind::fast_forward:。注意:不要简单地从 Discord 频道复制它们,因为我已经了解到 here。)
    3. 然后创建两个单独的过滤器,每个ReactionCollector 一个。我相应地标记了我的isBackwardsisForwards
    4. 为向前和向后创建一个ReactionCollector。 我已经标记了我的 backwardsforwards
    5. 然后在每个事件处理程序内部,我只是移动了 page 和描述等等,并相应地编辑了嵌入。

    注意:第二个反应需要一段时间才能加载。我还没有找到一个可以同时放置两个嵌入的功能......所以第二个嵌入可能需要一段时间才能弹出。


    代码:

    //pages is very flexible, as long as you change the array at the top you're set
    let pages = ["Page one", "Page two", "Page three", "Page four"];
    let page = 1;
    if (message.content.startsWith("!embed")) {
        const embed = new Discord.MessageEmbed()
            .setColor(0xffffff) //sets color here
            .setFooter(`Page ${page} of ${pages.length}`)
            .setDescription(pages[page - 1])
    
        message.channel.send(embed).then(msg => {
            msg.react('⏪').then(r => {
                msg.react('⏩');
                //filters
                const isBackwards = (reaction, user) => reaction.emoji.name === '⏪' && user.id === message.author.id;
                const isForwards = (reaction, user) => reaction.emoji.name === '⏩' && user.id === message.author.id;
    
                const backwards = msg.createReactionCollector(isBackwards);
                const forwards = msg.createReactionCollector(isForwards);
    
                backwards.on("collect", r => {
                    if (page === 1) return;
                    page--;
                    embed.setDescription(pages[page - 1]);
                    embed.setFooter(`Page ${page} of ${pages.length}`);
                    msg.edit(embed)
                });
    
                forwards.on("collect", r => {
                    if (page === pages.length) return;
                    page++;
                    embed.setDescription(pages[page - 1]);
                    embed.setFooter(`Page ${page} of ${pages.length}`);
                    msg.edit(embed)
                });
            });
        });
    }
    

    【讨论】:

    • 这似乎不起作用,我不知道为什么。
    • 不,它只是行不通。也许我错过了一个重要的 API
    • 不,这根本不需要任何 API。这一切都在discord.js 模块中。
    • 也许现在编辑您的问题以包含您的代码?
    • 我做了一个变通办法,所以我认为现在一切都很好,不过感谢您的帮助:D
    猜你喜欢
    • 2019-12-12
    • 2022-07-16
    • 2021-06-20
    • 2013-03-23
    • 1970-01-01
    • 2021-05-14
    • 2020-09-27
    • 2021-06-26
    • 1970-01-01
    相关资源
    最近更新 更多