UNPKG

@ayanaware/bentocord

Version:

Bentocord is a Bento plugin designed to rapidly build fully functional Discord Bots.

53 lines 1.92 kB
"use strict"; 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