我试着在一个频道上做一个建议事件,我试着给它加多层保护,试着从多个方面来测试它.然而,在我认为我已经完成了测试阶段后,我错了,我的一个测试员有一个问题,每次他们试图发送长度低于最小长度(25)的消息时,它似乎崩溃了,它迷惑了我,因为我总是可以做到的,什么都没有发生,我开始调试,并在每个message.delete()个函数上添加了Catch,你猜怎么着,他们都错误了,但他们仍然为我删除了消息,但对于Ameer(测试者),它只是崩溃,甚至没有删除他们的消息.

我处理了很多message.delete()个问题,但这让我感到沮丧和困惑.

顺便说一句,我发现所有的message.delete()个函数都删除了,但仍然出错,所以它不是一个精确的函数.

以下是完整的代码:

// Main Requirements \\

const { Secrets, Channels, Guilds, Roles, Permission, Users } = require(`../../config`)
const { QuickDB } = require('quick.db');
const db = new QuickDB();


// Optional Requirements \\

const { MessageEmbed, MessageActionRow, MessageButton } = require('discord.js')

const thingstoremove = ["-", "_", ".", ",", "`", "~", "@", "#", "!", "$", "%", "^", "&", "*", "(", ")"]
const blacklistedlinks = ["discord.gg", "bit.ly", "dlscord.com", "discord.com", "discord.net", "nitro-ds.com"]
// whitelistedlinks = [""],
// embedlistedlinks = ["tenor.com"],

// Code \\
module.exports = client => {
    client.on('messageCreate', async message => {
        const channel = message.channel.id === Channels.MAIN_SUGGETIONS
        if (!channel) return;

        if (message.author.bot) return

        if (message.content.includes('-bys')) return;

        var blacklisted = blacklistedlinks;
        var thingstoremovee = thingstoremove;

        const stuff = new RegExp(`[${thingstoremovee.join('')}]`, 'g')

        const args = message.content

        let UserDataSBL = await db.get(`${message.author.id}.SBL`)
        if (UserDataSBL == undefined) UserDataSBL = false
        console.log(UserDataSBL)

        if (UserDataSBL == true) return message.reply(`${message.author}, You're blacklisted from suggesting, please open a ticket to appeal the blacklist.`).then(m => {message.delete().catch(console.log(`Failed to delete, line 38.`)), setTimeout( function() { m.delete() }, 5000)}) 

        // Link protection \\

        try {
            if (message.author.bot) return;
            if (blacklisted.some(word => message.content.toLowerCase().includes(word))) {
                message.reply(`${message.author}, You've been blacklisted for sending blacklisted links!`).then(m => {message.delete().catch(console.log(`Failed to delete, line 45.`)), setTimeout(function() { m.delete() }, 5000)})
                await db.set(`${message.author.id}.SBL`, true)
                return
            } else if (message.content.toLowerCase().replace(stuff, '').includes("https://")) {
                message.reply(`${message.author}, You've been blacklisted for sending links!`).then(m => {message.delete().catch(console.log(`Failed to delete, line 49.`)), setTimeout(function() { m.delete() }, 5000)})
                await db.set(`${message.author.id}.SBL`, true)
                return
        }} catch(e) {
            message.channel.send(`${message.author}, An error has occurred, please talk to support if this continues.`).then(m => {message.delete().catch(console.log(`Failed to delete, line 53.`)), setTimeout( function() { m.delete() }, 5000)})
            return console.log(e)
        }

        // Code \\

        if (message.content.match(/<a?:.+?:\d+>/)) return message.reply(`${message.author}, Don't use emojis, they're not allowed while suggesting.`).then(m => {message.delete().catch(console.log(`Failed to delete, line 59.`)), setTimeout( function() { m.delete() }, 5000)}) ;

        if (message.content.replace(/\s/g, '').length < 25) return message.reply(`${message.author}, Please write minimum 25 letters or more.`).then(m => {message.delete().catch(console.log(`Failed to delete, line 61.`)), setTimeout( function() { m.delete() }, 5000)}) 

        if (message.content.replace(/\s/g, '').length >= 25) {
            if (message.content.replace(/\s/g, '').length >= 750) return message.reply(`${message.author}, Please write maximum 750 letters or less.`).then(m => {message.delete().catch(console.log(`Failed to delete, line 64.`)), setTimeout( function() { m.delete() }, 5000)}) 

            const embed = new MessageEmbed()
                .setAuthor({ name: message.author.tag, iconURL: message.author.displayAvatarURL()})
                .setColor("#ffffff")
                .setThumbnail(message.author.avatarURL())
                .setFields(
                    {name: `Suggestion`, value: `\`\`\`${args}\`\`\``},
                )
                .setFooter({ text: `Suggestion by: ${message.author.tag}.\n\Time/Date:`})
                .setTimestamp()

            message.channel.send({ embeds: [embed] }).then(msg => {
                msg.react('949231861853487154')
                msg.react('949232034977558538')
            })

            // Done \\

            try {
                const done = new MessageEmbed()
                .setTitle(`Suggestion submitted!`)
                .setColor("#ffffff")
                .setFields(
                    {name: `Your Suggestion`, value: `\`\`\`${args}\`\`\``},
                )
                .setFooter({ text: `Thank you for suggesting in Voidyy's Planet!\n\nTime/Date:`})
                .setTimestamp()
                await message.author.send({ embeds: [done] }).catch(console.log(`Fail at line 92`))
            } catch (err) {
                console.log(err.name)
            }
            setTimeout(function() {
                return message.delete() 
            }, 5000)
        }
    })
}

错误:

C:\Users\Hamoodi\Desktop\Discord bots\Voidyy's Bot\node_modules\discord.js\src\rest\RequestHandler.js:350

DiscordAPI错误: Unknown Message
    at RequestHandler.execute (C:\Users\Hamoodi\Desktop\Discord bots\Voidyy's Bot\node_modules\discord.js\src\rest\RequestHandler.js:350:13)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async RequestHandler.push (C:\Users\Hamoodi\Desktop\Discord bots\Voidyy's Bot\node_modules\discord.js\src\rest\RequestHandler.js:51:14)
    at async MessageManager.delete (C:\Users\Hamoodi\Desktop\Discord bots\Voidyy's Bot\node_modules\discord.js\src\managers\MessageManager.js:212:5)
    at async Message.delete (C:\Users\Hamoodi\Desktop\Discord bots\Voidyy's Bot\node_modules\discord.js\src\structures\Message.js:795:5) {
  method: 'delete',
  path: '/channels/1010336387729461358/messages/1010406288406106172',
  code: 10008,
  httpStatus: 404,
  requestData: { json: undefined, files: [] }
}

其他信息:

  "dependencies":
    "better-sqlite3": "^7.6.2",
    "discord.js": "^13.10.2",
    "fs": "^0.0.1-security",
    "mongoose": "^6.5.2",
    "ms": "^2.1.3",
    "quick.db": "^9.0.6"
    
    "node": "16.14.2"

任何帮助都是很棒的,伙计,我讨厌未知的消息不给你任何关于什么问题的信息,线路或任何东西.

推荐答案

discord是制作机器人的好地方,但有时可能会令人沮丧. 只需判断消息是否存在.另外,使用DJ给出的名为deletable的属性.

if (message.deletable) message.delete().catch(()=> null);
  setTimeout(() => {
    if (m.deletable) m.delete().catch(() => null);
  }, 5000);

deletable判断该消息是否可由客户端用户删除. 我们使用.catch(() => null);,因为在这里删除消息时并不真正需要捕获错误.仅当消息不再存在时,不一致API才抛出10008.大多数像我这样的大型机器人[50k行会]可能会效仿这一做法,同时删除数千条消息.消除这一错误是唯一的办法. 此外,加入官方discord.js服务器,以获得更快的响应.

const { Message } = require('discord.js');
function purgeMessage(msg) {
  if (msg instanceof Message && msg.deletable) msg.delete().catch(() => null);
}

Javascript相关问答推荐

React中的表格中 Select Radio按钮

如何使用JavaScript对切换的声音设置音量

导入图像与内联包含它们NextJS

如何通过在提交时工作的函数显示dom元素?

如何获取转换字节的所有8位?

有条件的悲剧

如何在RTK上设置轮询,每24小时

. NET中Unix时间转换为日期时间的奇怪行为

如何禁用附加图标点击的v—自动完成事件

康威的生活游戏规则在我的Javascript版本中不起作用.''我做错了什么?

为什么当我解析一个promise时,输出处于挂起状态?

html + java script!需要帮助来了解为什么我得到(无效的用户名或密码)

在JS中拖放:检测文件

优化Google Sheet脚本以将下拉菜单和公式添加到多行

Angular 中的类型错误上不存在获取属性

从包含数百行的表中获取更改后的值(以表单形式发送到后端)的正确方法是什么?

在开发期间,Web浏览器如何运行&qot;.jsx&qot;文件?

<;img>;标记无法呈现图像

与svg相反;S getPointAtLength(D)-我想要getLengthAtPoint(x,y)

当我点击一个按钮后按回车键时,如何阻止它再次被点击