我正在使用 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');
});
}
}
答案 0 :(得分:1)
实际上不是您的 channelID
问题是问题所在。在尝试对嵌入做出反应时,它实际上出错了。
我嵌套了两个 then
方法,所以一个在另一个里面。可能还有其他人告诉我这不是标准惯例,但我欢迎建设性的批评。
我还将您的 messageEmbed
改为 reactEmbed
以避免命名约定错误。我对您所说的 messageEmbed
是一个将反应添加到嵌入的函数感到困惑,但我想我明白您的意思。
embed
的嵌入Console.log
- 编辑了所有信息(无关紧要的东西,但您的代码中有这些信息。因为它没有任何危害,所以我将其留在那里)botname
和 idcanale
;我想你提到过你想将频道的 id 传递给另一个函数,所以我把它留在那里。createdChannel
then
获取了 createdChannel
的 id 并将其设置为 idcanale
并发送了嵌入then
(它嵌套在另一个 then
方法中)对嵌入作出反应并调用嵌入 reactEmbed
以区分名称。我不知道 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);
});
}
}