var commands = module.exports = [
	{
		name: "ping",
		description: "Test command",
		exec: m => m.say("pong")
	},
	{
		name: "owo",
		description: "owo",
		exec: m => {
			let owo = Math.round(Math.random()) ? 'O' : 'o';
			let n = Math.min(Number(query) || 9, 1998);
			for (let i = 0; i < n; i++) owo += ['o','w','O','W'][Math.floor(Math.random() * 4)];
			owo += owo = Math.round(Math.random()) ? 'O' : 'o';
			m.say(owo);
		}
	}
];


client.on("messageCreate", async message => {
	try {
		let args = message.content.split(' ');
		message.query = args.slice(1).join(' ');
		message.say = message.channel.send.bind(message.channel);

		if (!message.guild) message.guild = client.guilds.resolve(config.guild);
		if (!message.member) message.member = await message.guild.members.fetch(message.author.id);

		for (let command of commands) {
			if ((()=>{
				if (!command.matcher) command.matcher = command.name.toLowerCase();
				if (typeof command.matcher == "string") return command.name == '!' + args[0].toLowerCase();
				if (typeof command.matcher == "function") return command.matcher(message);
				if (command.matcher instanceof RegExp) return message.content.test(command.matcher);
			})()) {
				if (command.admin && !message.member?.roles.cache.has(config.admin_role)) return void message.react('🚫');
				await command.exec(message);
				break;
			}
		}
	} catch (error) {
		console.error("command failure,", error.stack);
		message.react("âš ");
	}
});