Получение типа изображения для работы в приглашении discord.js-commando - PullRequest
0 голосов
/ 18 февраля 2019

Я нашел тип аргумента 'image' для изображений (см. Ниже image.js).Проблема, с которой я сталкиваюсь, заключается в том, что когда я запрашиваю изображение в приглашении и публикую его, функция validate() msg.attachments не заполняется.Но в функции parse() заполняется msg.attachments.

Как я могу получить заполненный msg.attachments в функции validate()?Объект msg имеет свойство attachments, он просто не заполнен.

index.js

const { CommandoClient } = require('discord.js-commando');
const path = require('path');

const client = new CommandoClient({
    owner: 'MY_ID',
    unknownCommandResponse: false,
    commandPrefix: '/',
});

client.registry
    .registerDefaultTypes()
    .registerTypesIn(path.join(__dirname, 'types')) // image.js lives in ./types/image.js
    .registerGroups([
        ['recruitment', 'Recruitment commands']
    ])
    .registerDefaultGroups()
    .registerDefaultCommands()
    .registerCommandsIn(path.join(__dirname, 'commands'));

команды / набор / apply.js

const { Command } = require('discord.js-commando');

module.exports = class ApplyCommand extends Command {
    constructor(client) {
        super(client, {
            name: 'apply',
            group: 'recruitment',
            memberName: 'apply',
            description: '/approve <@username#id>',
            args: [
                {
                    key: 'image_prove',
                    prompt: `**Single screenshot that shows your In Game Name and your current level.**`,
                    type: 'image', // image type
                    wait: 1200
                }
            ]
        })
    }

    run(msg, { image_prove }) {
        console.log(image_prove);
        msg.say('Mission accomplished!');
    }
};

типы/image.js

const { ArgumentType } = require('discord.js-commando');

module.exports = class ImageArgumentType extends ArgumentType {
    constructor(client) {
        super(client, 'image');
    }

    validate(value, msg, arg) {
        const attachment = msg.attachments.first();
        if (attachment) {
            if (!attachment.height || !attachment.width) return false;
            return true;
        }
        return false;
    }

    async parse(value, msg, arg) {
        const attachment = msg.attachments.first();
        if (attachment) return attachment.url;
    }

    isEmpty(value, msg, arg) {
        if (msg.attachments.size) return false;
        return this.client.registry.types.get('user').isEmpty(value, msg, arg);
    }
};
...