Rozglądałem się na sposób, aby osadzić strony z Discord.js, ale wszystkie tutoriale, które widziałem, są dla wiadomości. Chciałbym mieć jakiś sposób na reagowanie na Embed i przełączyć się na następny.

To jest mój oryginalny kod:

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 });
 }})

Jeśli ktoś ma kilka przykładów, podziel się nimi ze mną (i pomogłaby, gdybyś mógł wyjaśnić, co się dzieje: D)

0
Kuru 17 luty 2021, 05:48

1 odpowiedź

Najlepsza odpowiedź

Tak to mozliwe. Ten, który zamierzam pokazać, używa kolektorów reakcji do kontrolowania, do której strony do przejścia. Możesz go odpowiednio zmodyfikować, aby pasować do Twoich stron, ale jest to podstawowy wybór.

Najpierw skonfigurowałem tablicę o nazwie Pages byłoby to, co napisałeś w opisie, możesz odpowiednio dodać dodatkowe tablice dla tytułów i tego wszystkiego. Mam też na jedną stronę

Istnieje wiele kroków, aby pokazać, jak to działa:

  1. Utwórz początkowe osadzanie + Wyślij Embed (co widzę już wykonane, ale musisz go zmienić odpowiednio, aby dopasować go do tablicy pages.
  2. Następnie dodaj reakcje (wybrałem :rewind: i :fast_forward:. Uwaga: Nie tylko skopiuj je z kanału Discord, jak nauczyłem się Oto)
  3. Następnie utwórz dwa oddzielne filtry, jeden dla każdego ReactionCollector. Znakowałem odpowiednio moje isBackwards i isForwards.
  4. Utwórz ReactionCollector dla obu naprzód i do tyłu. Oznaczam kopalnię backwards i forwards
  5. Następnie wewnątrz każdego przewodnika zdarzeń po prostu przesunąłem page oraz opisy i What ... i odpowiednio edytowały osadzony.

Uwaga: Druga reakcja trwa trochę czasu. Nie znalazłem funkcji, w której można umieścić oba osadza w tym samym czasie ... więc może potrwać chwilę, a drugi osadza się.


Kod:

//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)
            });
        });
    });
}
0
PerplexingParadox 18 luty 2021, 15:07