Я нашел тип аргумента '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);
}
};