Как я могу найти идентификатор пользовательского смайлика, отправленного пользователем, и добавить его на сервер?

#javascript #node.js #discord #discord.js

Вопрос:

Я создаю addemoji команду (для пользовательских смайликов), и у меня возникли проблемы с определением/поиском идентификатора смайлика, который отправляет пользователь, а затем добавляю его на сервер. Я сам написал кое-какой код, и до сих пор мне не везло.

 module.exports = {
    name: "addemoji",
    description: "ping pong",
    execute(message, args) {
        const Discord = require("discord.js");
        const bot = new Discord.Client();
        const nothing = "<:nothing:823792064658407424>";
        const PREFIX = "ly?";

        if (message.content.startsWith(PREFIX   "addemoji")) {
            if (message.guild.me.permissions.has("MANAGE_EMOJIS")) {
                let emojiid = message.content.has.emojis(fetch.id);

                Guild.emojis.create(emojiid);
            }

            message.channel.send(`Emoji Added!`);
        } else {
            message.channel.send("This emoji already exists.");
        }
    },
};
 

Ответ №1:

Пользовательские смайлики имеют форму <:NAME:ID> (не анимированные) или <a:NAME:ID> (анимированные).

Чтобы получить подробную информацию о первом смайлике в сообщении, вы можете использовать это:

 const match = /<(a?):(. ):(d )>/u.exec(message.content);
if (!match) return message.reply('Please include a custom emoji in your message!')
// animated will be 'a' if it is animated or '' if it isn't
const [, animated, name, id] = match
 

Затем, чтобы получить URL-адрес изображения смайлика, вы используете формат https://cdn.discordapp.com/emojis/<emoji id>.<png or gif> :

 const url = `https://cdn.discordapp.com/emojis/${id}.${animated ? 'gif' : 'png'}`
 

Для получения дополнительной информации об этом см. Документы разработчика Discord.

Наконец, вы можете добавить смайлик:

 message.guild.emojis.create(url, name)
 

Комментарии:

1. Это работает и не работает одновременно, я запустил его, и теперь там написано «изображение: Недопустимые данные изображения» и «имя: Это поле обязательно». Я пытался закодировать его по-разному, чтобы мне не пришлось просить о помощи, но сейчас я просто застрял. Я считаю, что это потому, что матч тянет имя, идентификатор, и если это анимированный, я добавил message.reply( <${id}> добавлено! ) и бот говорит «<:weSmart:,,weSmart,421097576738193409>» и, очевидно, это неверный URL, но, зная это, я все еще не знаю, как это исправить.

2. @neon Извини за это. Я исправил свой код.