我一直在尝试做一个提及前缀。我已经尝试了所有可能的方法,但不知何故没有奏效。
这是我的代码:
const {MessageEmbed} = require('discord.js')
const client = require('../index')
const db = require('quick.db')
const dbx = require('xen.db')
client.on('message', async (message) => {
if(message.author.bot || message.channel.type === "dm") return;
let prefix;
let prefixess
let prefixes = await db.fetch(`simply_prefix_${message.guild.id}`)
const mentionPrefix = message.content.match(new RegExp(`^<@!?(${client.user.id})>`,'gi'))
if (prefixes === null) {
prefixess = "s!"
prefix = "s!" && mentionPrefix[0]
} else {
prefix = prefixes && mentionPrefix[0]
prefixess = prefixes
}
if(message.mentions.members){
if(message.content.endsWith(mentionPrefix[0])){
const pingEmbed = new MessageEmbed()
.setColor('YELLOW')
.setDescription(`The server prefix is: \`${prefixess} || @SimplyBot\`\nTo see commands, please use \`<${prefixess} || @Simply>help\`!`)
return message.channel.send(pingEmbed)
}
}
const messageArray = message.content.split(' ');
const cmd = messageArray[0];
const args = messageArray.slice(1);
if (!message.content.startsWith(prefix)) return;
const commandfile = client.commands.get(cmd.slice(prefix.length)) || client.commands.get(client.aliases.get(cmd.slice(prefix.length)));
if(commandfile){
if(commandfile.config.premium){
if(commandfile.config.premium === true){
const premium = dbx.fetch(`simply_premium`)
const expiry = dbx.fetch(`simply_premium_date_${message.guild.id}`)
if(!message.guild.id.includes(premium)){
return message.reply(`You cannot run this command as it is only premium!`)
} else if(message.guild.id.includes(premium)){
commandfile.run(client, message, args, dbx, db)
}
if(expiry){
if(message.guild.id.includes(premium) && Date.now() > expiry) {
dbx.pull(`simply_premium`, message.guild.id)
dbx.set(`simply_premium_date_${message.guild.id}`, 0)
}
}
}
} else if(!commandfile.config.premium) {
commandfile.run(client, message, args, dbx, db)
}
}
})
当我输入“help”时,它返回一个错误:
<块引用>(node:19812) UnhandledPromiseRejectionWarning: TypeError: 无法读取 null 的属性“0”
有人可以帮助我吗,如果可以的话那就太好了! <3
答案 0 :(得分:0)
当你输入一条没有提及你的机器人的消息时,它与不存在的提及不匹配,并返回 null
。然而,有一个简单的解决方法:
if(!mentionPrefix) return;
//put this after declaring mentionPrefix
这将检查 .match
是否返回 false,如果返回则返回。
编辑:因为您想要提及前缀或服务器前缀,请使用它来声明前缀:
let prefix = prefixes ? prefixes : mentionPrefix?.[0] || 's!'
我想这就是你想要的