#javascript #node.js #discord #discord.js
#javascript #node.js #Discord #discord.js
Вопрос:
Давайте просто начнем с этого.
Я просматривал Google, пытаясь найти руководство о том, как принимать изображения в качестве аргументов, а затем отправлять это же изображение с сообщением, предоставленным пользователем.
Я делаю команду объявления.
Прямо сейчас моя команда принимает только текст в качестве входных данных, а не файлы / изображения.
Вот моя команда announce:
module.exports = {
name: "afv!announce",
description: "announce something",
execute(msg, args, bot) {
if (msg.member.roles.cache.find((r) => r.name === "Bot Perms")) {
const prevmsg = msg;
const text = args.join().replace(/,/g, " ");
msg
.reply(
"Would you like to do `@here` :shushing_face: or `@everyone` :loudspeaker:?nIf you would like to ping something else, react with :person_shrugging:. (you will have to ping it yourself, sorry)n*react with :x: to cancel*"
)
.then((msg) => {
const areusure = msg;
msg
.react("🤫")
.then(() => msg.react("📢"))
.then(() => msg.react("🤷"))
.then(() => msg.react("❌"));
const filter = (reaction, user) => {
return (
["🤫", "📢", "🤷", "❌"].includes(reaction.emoji.name) amp;amp;
user.id === prevmsg.author.id
);
};
msg
.awaitReactions(filter, { max: 1, time: 60000, errors: ["time"] })
.then((collected) => {
const reaction = collected.first();
if (reaction.emoji.name === "🤫") {
areusure.delete();
prevmsg
.reply("<a:AFVloading:748218375909539923> Give me a sec...")
.then((msg) => {
bot.channels.cache
.get("696135322240548874")
.send("@herenn" text);
msg.edit("<a:AFVdone:748218438551601233> Done!");
});
} else if (reaction.emoji.name === "📢") {
areusure.delete();
prevmsg
.reply("<a:AFVloading:748218375909539923> Give me a sec...")
.then((msg) => {
bot.channels.cache
.get("696135322240548874")
.send("@everyonenn" text);
msg.edit("<a:AFVdone:748218438551601233> Done!");
});
} else if (reaction.emoji.name === "🤷") {
areusure.delete();
prevmsg
.reply("<a:AFVloading:748218375909539923> Give me a sec...")
.then((msg) => {
bot.channels.cache
.get("696135322240548874")
.send(
"Important: https://afv.page.link/announcementnn"
text
);
msg.edit("<a:AFVdone:748218438551601233> Done!");
});
} else if (reaction.emoji.name === "❌") {
areusure.delete();
prevmsg.reply("Cancelled.");
}
})
.catch((collected) => {
msg.delete();
prevmsg.reply("you didn't react with any of the emojis above.");
});
});
}
},
};
Ответ №1:
Message
имеет свойство с именем attachments
, которое содержит все вложения в сообщении. (Изображение, загруженное пользователем, считается вложением, однако URL-адрес изображения — нет.)
Вот пример:
client.on('message', (message) => {
if (message.author.bot) return false;
if (message.attachments.size == 0)
return message.channel.send('No attachments in this message.');
const AnnouncementChannel = new Discord.TextChannel(); // This shall be announcement channel / the channel you want to send the embed to.
const Embed = new Discord.MessageEmbed();
Embed.setTitle('Hey!');
Embed.setDescription('This is an announcement.');
Embed.setImage(message.attachments.first().url);
AnnouncementChannel.send(Embed);
});
Ответ №2:
Аватар
Для использования изображений вы можете использовать эту функцию :
message.author.displayAvatarURL(
{ dynamic: true } /* In case the user avatar is animated we make it dynamic*/
);
Затем он вернет ссылку, которую вы можете использовать для встраивания миниатюр или изображений. Если вы хотите использовать его во внедрении
let link = message.author.displayAvatarURL({ dynamic: true });
const embed = new Discord.MessageEmbed().setThumbnail(link);
Используйте ссылки на изображения
Если вы хотите использовать ссылку на изображение, вам придется преобразовать ее в вложение discord.
const args = message.content.split(' ').slice(1);
const attach = new Discord.Attachement(args.join(' '), 'image_name.png');
message.channel.send(attach);
Надеюсь, я вам помог. Если нет, вы все равно можете выполнить поиск в discord.js руководство ^^
Не уверен, где находится ссылка на изображение
Если вы действительно не знаете, где находится ссылка на изображение в содержимом сообщения, вы можете отделить его (вы уже сделали с аргументами) и использовать функцию forEach :
const args = message.content.split(' ').slice(1);
// a function to see if it's an url
function isvalidurl(string) {
try {
const a = new URL(string);
} catch (err) {
return false;
}
return true;
}
// check the function for each argument
args.forEach((a) => {
if (isvalidurl(a)) link = a;
});
if (link) {
// code
} else {
// code
}
Комментарии:
1. Привет. Спасибо за ответ. Я ищу вложение изображения пользователя. Например: Пользователь: afv!анонс Проверьте эту классную студию! (прикрепляет изображение) Бот: в #анонсы: Посмотрите на эту классную студию! (то же изображение) Я надеюсь, что это прояснило ситуацию.