Discord.js v12.5.3提前缀问题

Discord.js v12.5.3 mention prefix problem

我一直在尝试做一个提及前缀。我已经尝试了所有可能的方法,但不知何故没有奏效。

这是我的代码:

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)
        }
    }
})

当我输入“帮助”时 returns 这是一个错误:

(node:19812) UnhandledPromiseRejectionWarning: TypeError: Cannot read property '0' of null

有人可以帮助我吗,如果可以的话那就太好了! <3

当你在没有提及你的机器人的情况下输入消息时,它与不存在的提及不匹配,returns null。然而,有一个简单的解决方法:

if(!mentionPrefix) return;
//put this after declaring mentionPrefix

这将检查 .match returns 是否错误,如果是 returns。

编辑: 因为你想要提及前缀或服务器前缀,所以使用它来声明前缀:

let prefix = prefixes ? prefixes : mentionPrefix?.[0] || 's!'

我想这就是你想要的