我有一个无法使用的代码。我不知道如何完成。 如果用户在一个通道中编写消息,而在另一通道中发送消息,则我需要管理员在这里接受或拒绝。所以我有很多错误。
let rMember = message.id(message.id.get(args[0]));
const { RichEmbed } = require("discord.js");
module.exports.run = async (client, message, args) => {
if (message.channel.id !== "someid") return message.delete();
if(!message.member.hasPermission("KICK_MEMBERS")) return message.delete();
let rMember = message.id(message.id.get(args[0]));
if(!rMember) return await message.delete() && message.reply("nope.").then(m => m.delete(3000));
await message.delete().catch(O_o=>{});
const co = '1';
const a = '2';
const b = '3';
const c = '4';
const d = '5';
const e = '6';
const prohibited = ['someid'];
if (!message.member.roles.find(role => prohibited.includes(role.id))) return message.delete().catch(O_o=>{});
const filter = (reaction, user) => ['?' ,'?', '?', '?', '?', '?'].includes(reaction.emoji.name) && user.id === message.author.id;
const embed = new RichEmbed()
.setTitle('nope:')
.setDescription(`
? ${co.toString()}
? ${a.toString()}
? ${b.toString()}
? ${c.toString()}
? ${d.toString()}
? ${e.toString()}
`)
.setColor(0xdd9323)
.setFooter(`ID: ${rMember}`);
message.channel.send(embed).then(async msg => {
await msg.react('?')
await msg.react('?');
await msg.react('?');
await msg.react('?');
await msg.react('?');
await msg.react('?');
msg.awaitReactions(filter, {
max: 1,
time: 30000,
errors: ['time']
}).then(collected => {
const reaction = collected.first();
switch (reaction.emoji.name) {
case '?':
message.client.channels.get(`someid`).send(`${message.member} ${rMember}: **${co}**.`);
msg.delete()
break;
case '?':
message.client.channels.get(`someid`).send(`${message.member} ${rMember}: **${a}**.`);
msg.delete()
break;
case '?':
message.client.channels.get(`someid`).send(`${message.member} ${rMember}: **${b}**.`);
msg.delete()
break;
case '?':
message.client.channels.get(`someid`).send(`${message.member} ${rMember}: **${c}**.`);
msg.delete()
break;
case '?':
message.client.channels.get(`someid`).send(`${message.member} ${rMember}: **${d}**.`);
msg.delete()
break;
case '?':
message.client.channels.get(`someid`).send(`${message.member} ${rMember}: **${e}**.`);
msg.delete()
break;
}
}).catch(collected => {
return message.channel.send(`Error.`).then(m => m.delete(3000))
});
});
try{
await rMember.send(`${message.member} nope.`)
}catch(e){
}
}
module.exports.help = {
name: "denie"
}
这是工作代码,可以发送嵌入消息
client.on('message', async message => {
if (message.channel.id == "someid") {
if (!message.member.roles.find(r => r.name === "role")) return await message.delete();
if (message.author.bot) return;
if (!message.content) return;
const embed = new RichEmbed()
.setTitle('woops:')
.setDescription(message.content)
.setColor(0xdd9323)
.setFooter(`MessageID: ${message.id}`);
await message.client.channels.get(`someid`).send(embed)
}
try{
}catch(e){
}
})
(节点:6544)UnhandledPromiseRejectionWarning:TypeError: message.id.get不是函数
答案 0 :(得分:0)
我需要命令将[a]消息[ID] ....作为[an]参数使用。
要通过其ID检索Message,可以使用TextChannel.fetchMessage()
方法。请记住,它返回一个Promise。请考虑以下示例。
// Attaching a 'then()' method...
const id = '189855563893571595';
const channel = message.channel;
channel.fetchMessage(id)
.then(fetchedMessage => {
// Use 'fetchedMessage'
})
.catch(console.error);
// Using the 'await' keyword (async context required)...
const fetchedMessage = await channel.fetchMessage(id);
// Use 'fetchedMessage'
在您的命令中实现此操作相对简单。
try {
// Stop if the argument is missing
if (!args[0]) return await message.channel.send(':x: Provide a message ID.');
// Define the channel to fetch the message in
const channel = message.guild.channels.get('idHere');
// Fetch the message
const fetchedMessage = await channel.fetchMessage(args[0]);
// Stop if the message doesn't exist
if (!fetchedMessage) return await message.channel.send(':x: Invalid message ID.');
// Insert code using 'fetchedMessage' here...
} catch(err) {
// Log any errors from rejected promises
console.error(err);
}