获取频道 ID discord.js

时间:2021-04-22 11:57:23

标签: javascript discord.js

我正在使用 discord.js 创建一个机器人,我创建了一个函数,在该函数中,当使用特定命令时,会创建一个新通道,在该通道中发送带有反应的嵌入。 我需要将创建的频道的 id 分配给一个 var 以便我也可以在其他函数中使用它

我尝试了一千种方法来获取所创建通道的 id,我尝试在 lambda 中执行 lambda,我可以将通道 id 添加到 var 元素,但函数 messageEmbed,将反应添加到嵌入,不起作用,因为它进入了捕获,

希望你能帮到我

这是我的代码:

const { Message } = require("discord.js");

module.exports = {
    name: 'setup',
    description: "ruoli con emote",
    async execute(message, args, Discord, client, testChannelId) {

        console.log(testChannelId)
        const channel = '831573587579371580';
        const playem = '⏯️';
        const stopem = '⏹️';
        const nextem = '⏭️';
        const shuffleem = '?';
        const loopem = '?';
        const volume15 = '?';
        const volume30 = '?';
        const mute = '?';


        let embed = new Discord.MessageEmbed()

            .setColor('#e42643')
            .setTitle('Nessuna canzone in riproduzione al momento :(')
            .setImage('https://images4.alphacoders.com/943/943845.jpg')
            .addFields(
                { name: 'Rule 1', value: 'figo' },
                { name: 'Rule 2', value: 'hhj' },
                { name: 'Rule 3', value: 'tipo' }
            )
            .setFooter('il prefisso per questo server è: *');

        console.log('message: ' + message)
        console.log('args: ' + args)
        console.log('Discord: ' + Discord)
        console.log('client: ' + client)

        var botname = '?? ??????' // setup messaggio con reazioni
        var idcanale 
        const createdChannel = await message.guild.channels.create(botname, { //Create a channel

            type: 'text', //Make sure the channel is a text channel
            permissionOverwrites: [{ //Set permission overwrites
                id: message.guild.id,
                allow: ['VIEW_CHANNEL'],
            }],

        }).then(createdChannel => {
            idcanale = createdChannel.id;
            createdChannel.send(createdChannel.id, embed)}).then(function (messageEmbed) {
                  
            messageEmbed.react(playem);
            messageEmbed.react(stopem);
            messageEmbed.react(nextem);
            messageEmbed.react(shuffleem); 
            messageEmbed.react(loopem);
            messageEmbed.react(volume15);
            messageEmbed.react(volume30);
            messageEmbed.react(mute);

            client.on('messageReactionAdd', async (reaction, user) => {
                if (reaction.message.partial) await reaction.message.fetch();
                if (reaction.partial) await reaction.fetch();
                if (user.bot) return;
                if (!reaction.message.guild) return;

                switch (reaction.emoji.name) {

                    case playem:
                        console.log('Pausa / resume');
                        client.commands.get('prova').execute(client, message, args, Discord, createdChannel.id);
                        break;

                    case stopem:
                        console.log('stop');
                        client.commands.get('stop').execute(client, message, args);
                        break;

                    case nextem:
                        console.log('Skip');
                        client.commands.get('skip').execute(client, message, args);
                        break;

                    case loopem:
                        console.log('loop');
                        client.commands.get('loop').execute(client, message, args)
                        break;

                    case shuffleem:
                            console.log('shuffle');
                            client.commands.get('shuffle').execute(client, message, args)
                            break;

                    case volume15:
                        console.log('volume15');
                        client.commands.get('volume15').execute(client, message, args)
                        break;

                    case volume30:
                        console.log('volume30');
                        client.commands.get('volume30').execute(client, message, args)
                        break;

                    case mute:
                        console.log('muto');
                        client.commands.get('mute').execute(client, message, args)
                        break;
                }
                reaction.users.remove(user)
            });

        }).catch(function () {
            console.log('Errore');
        });
    }
}

1 个答案:

答案 0 :(得分:1)

实际上不是您的 channelID 问题是问题所在。在尝试对嵌入做出反应时,它实际上出错了。


我修改的内容:

我嵌套了两个 then 方法,所以一个在另一个里面。可能还有其他人告诉我这不是标准惯例,但我欢迎建设性的批评。

我还将您的 messageEmbed 改为 reactEmbed 以避免命名约定错误。我对您所说的 messageEmbed 是一个将反应添加到嵌入的函数感到困惑,但我想我明白您的意思。


过程:

  1. 将 Unicode 表情符号分配给变量(已完成)
  2. 创建了标题为 embed 的嵌入
  3. Console.log - 编辑了所有信息(无关紧要的东西,但您的代码中有这些信息。因为它没有任何危害,所以我将其留在那里)
  4. 创建了 botnameidcanale;我想你提到过你想将频道的 id 传递给另一个函数,所以我把它留在那里。
  5. 创建的频道也恰如其分地命名为 createdChannel
  6. then 获取了 createdChannel 的 id 并将其设置为 idcanale 并发送了嵌入
  7. then(它嵌套在另一个 then 方法中)对嵌入作出反应并调用嵌入 reactEmbed 以区分名称。
  8. 我保留了其余代码。

注意:

我不知道 testChannelId 是什么(在参数中),因为除了开头之外根本没有真正调用它,所以我只是在下面的代码中将其注释掉。

我也不知道 channel 代表什么,所以我也把它注释掉了。基本上,我试图从提示中的有限信息中帮助您。


代码:

const { Message } = require("discord.js");

module.exports = {
    name: 'setup',
    description: "ruoli con emote",
    async execute(message, args, Discord, client, testChannelId) {

        //console.log(testChannelId) what is this for?
        //const channel = '831573587579371580';
        const playem = '⏯️';
        const stopem = '⏹️';
        const nextem = '⏭️';
        const shuffleem = '?';
        const loopem = '?';
        const volume15 = '?';
        const volume30 = '?';
        const mute = '?';


        let embed = new Discord.MessageEmbed()
            .setColor('#e42643')
            .setTitle('Nessuna canzone in riproduzione al momento :(')
            .setImage('https://images4.alphacoders.com/943/943845.jpg')
            .addFields(
                { name: 'Rule 1', value: 'figo' },
                { name: 'Rule 2', value: 'hhj' },
                { name: 'Rule 3', value: 'tipo' }
            )
            .setFooter('il prefisso per questo server è: *');

        console.log('message: ' + message)
        console.log('args: ' + args)
        console.log('Discord: ' + Discord)
        console.log('client: ' + client)

        var botname = '?? ??????' // setup messaggio con reazioni
        var idcanale = "" //first sets it to nothing
        const createdChannel = await message.guild.channels.create(botname, { //Create a channel
            type: 'text', //Make sure the channel is a text channel
            permissionOverwrites: [{ //Set permission overwrites
                id: message.guild.id,
                allow: ['VIEW_CHANNEL'],
            }],
        }).then(createdChannel => {
            idcanale = createdChannel.id;
            createdChannel.send(idcanale)
            createdChannel.send(embed)
                .then(reactEmbed => {
                    reactEmbed.react(playem);
                    reactEmbed.react(stopem);
                    reactEmbed.react(nextem);
                    reactEmbed.react(shuffleem);
                    reactEmbed.react(loopem);
                    reactEmbed.react(volume15);
                    reactEmbed.react(volume30);
                    reactEmbed.react(mute);

                    client.on('messageReactionAdd', async (reaction, user) => {
                        if (reaction.message.partial) await reaction.message.fetch();
                        if (reaction.partial) await reaction.fetch();
                        if (user.bot) return;
                        if (!reaction.message.guild) return;

                        switch (reaction.emoji.name) {

                            case playem:
                                console.log('Pausa / resume');
                                client.commands.get('prova').execute(client, message, args, Discord, idcanale); //replaced createdChannel.id w/ idcanale
                                break;

                            case stopem:
                                console.log('stop');
                                client.commands.get('stop').execute(client, message, args);
                                break;

                            case nextem:
                                console.log('Skip');
                                client.commands.get('skip').execute(client, message, args);
                                break;

                            case loopem:
                                console.log('loop');
                                client.commands.get('loop').execute(client, message, args)
                                break;

                            case shuffleem:
                                console.log('shuffle');
                                client.commands.get('shuffle').execute(client, message, args)
                                break;

                            case volume15:
                                console.log('volume15');
                                client.commands.get('volume15').execute(client, message, args)
                                break;

                            case volume30:
                                console.log('volume30');
                                client.commands.get('volume30').execute(client, message, args)
                                break;

                            case mute:
                                console.log('muto');
                                client.commands.get('mute').execute(client, message, args)
                                break;
                        }
                        reaction.users.remove(user)
                    });

                })
        })
            .catch(error => {
                console.log(error);
            });
    }
}