@ayanaware/bentocord
Version:
Bentocord is a Bento plugin designed to rapidly build fully functional Discord Bots.
53 lines • 1.92 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.UserOptionResolver = void 0;
const eris_1 = require("eris");
const OptionType_1 = require("../constants/OptionType");
class UserOptionResolver {
constructor() {
this.option = OptionType_1.OptionType.USER;
this.convert = eris_1.Constants.ApplicationCommandOptionTypes.USER;
}
async reduce(ctx, option, user) {
let display = `${user.username}#${user.discriminator}`;
if (user.nick)
display = `${user.nick} (${display})`;
return { display, extra: user.id };
}
async resolve(ctx, option, input) {
const client = ctx.discord.client;
// Limit to author and self if no guild
let users = [ctx.user, ctx.self];
if (ctx.guild)
users = Array.from(ctx.guild.members.values());
const filter = users.filter(u => this.matchUser(input, u));
if (filter.length > 0)
return filter;
return users;
}
matchUser(input, user) {
if (user.id === input)
return true;
// handle mention
const id = /^<@!?(\d{17,19})>$/.exec(input);
if (id && id[1] === user.id)
return true;
// handle username
const match = /^([^#]+)#?(\d{4})?$/i.exec(input);
const username = match[1];
const discrim = match[2] || null;
if (user.username.toLocaleLowerCase().includes(username.toLocaleLowerCase())) {
if (discrim)
return user.discriminator === discrim;
return true;
}
// handle nickname
if ('nick' in user) {
if (user.nick && user.nick.toLocaleLowerCase().includes(input.toLocaleLowerCase()))
return true;
}
return false;
}
}
exports.UserOptionResolver = UserOptionResolver;
//# sourceMappingURL=UserOption.js.map