【问题标题】:Discord.js v12.5.3 mention prefix problemDiscord.js v12.5.3 提到前缀问题
【发布时间】:2021-09-26 01:32:18
【问题描述】:

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

这是我的代码:

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

当我输入“帮助”时,它会返回一个错误:

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

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

【问题讨论】:

  • 你应该把if(!mentionPrefix) return;
  • 我不希望它只是提及前缀,我也想让用户使用自定义/普通前缀。

标签: javascript discord discord.js bots prefix


【解决方案1】:

当您在未提及您的机器人的情况下输入消息时,它与不存在的提及不匹配,并返回 null。但是有一个简单的解决方法:

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

这将检查.match是否返回falsey,如果是则返回。

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

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

我想这就是你想要的

【讨论】:

  • 当我这样做时,它仍然在“mentionPrefix?[0]”或“mentionPrefix[0]”位出错。
  • 我的错,我的语法很糟糕。我会修好的
  • 好吧,我知道为什么它不允许我编辑上面的评论,但我修复了它,我将 ? 更改为 ?.。原来那是运营商。
猜你喜欢
  • 2020-07-02
  • 2021-11-13
  • 1970-01-01
  • 2021-10-30
  • 2018-11-14
  • 1970-01-01
  • 2021-04-07
  • 1970-01-01
  • 2020-11-25
相关资源
最近更新 更多