【问题标题】:Check User Warnings检查用户警告
【发布时间】:2022-07-26 22:09:33
【问题描述】:

我有以下代码文件向 Discord 服务器成员发出用户警告:

const { MessageEmbed } = require(`discord.js`)
const { Kick_On_Warnings, Warnings_Until_Kick } = require('../../settings/configuration.js').BOT_SETTINGS
const { Kick_Channel_Logs } = require("../../settings/configuration").LOGGING;

module.exports = {
    config: {
        name: 'warn',
        description: 'Warn a member on the server.',
        aliases: [],
    },
    execute: async(Client, message, args, base) => {
        let embed = new MessageEmbed({ color: Client.color })
            .setFooter(`${message.guild.name} |  `, message.guild.iconURL({ dynamic: true }))

        let channel = message.guild.channels.cache.get(Kick_Channel_Logs)
        let member = message.mentions.members.first() || message.guild.member(args[0])
        if (!message.member.hasPermission('MANAGE_MESSAGES')) return message.channel.send(embed.setDescription(`Sorry, you are missing permissions to execute this command!`))
        if (!member) return message.channel.send(embed.setDescription(`No Mention? No WARN!`))
        if (member.id === message.author.id) return message.channel.send(embed.setDescription('You can\'t warn yourself!'))
        if (member.user.bot) return message.channel.send(embed.setDescription('You can\'t warn a bot'))
        if (!args[1]) return message.channel.send(embed.setDescription('You need to provide a warning to give to the member!'))

        const userWarns = Client.db.ensure(`${message.guild.id}.${member.id}.warnings`, [])

        let reason = args.slice(1).join(' ')
        userWarns.push({ user: member.id, mod: message.author.id, reason: reason })

        const warn = embed
            .setTitle(`Moderation System | Warning Category`)
            .setFooter(`${message.guild.name} |  `, message.guild.iconURL({ dynamic: true }))
            .addField('User', member.toString(), true)
            .addField('Moderator', message.author.toString(), true)
            .addField('Reason', reason)
            .addField('Warning History', userWarns.length ? userWarns.map((s, i) => `${i + 1}: ${s.reason}`) : 'None')

        message.channel.send(warn)
        Client.db.push(`${message.guild.id}.${member.id}.warnings`, { user: member.id, mod: message.author.id, reason: reason })

        if (Kick_On_Warnings && userWarns.length >= Warnings_Until_Kick && member.kickable) {
            Client.db.set(`${message.guild.id}.${member.id}.warnings`, [])
            const embed = new MessageEmbed({ color: Client.color })
                .setTitle("Administration System | Kick Category")
                .setThumbnail(member.user.displayAvatarURL())
                .setColor(`GREEN`)
                .setFooter(`${message.guild.name} |  `, message.guild.iconURL({ dynamic: true }))
                .setDescription(`**Action:** Kick\n**User Kicked:** ${member.user.tag} - (${member.id})\n**Reason:** - Reaching this guilds strike limit!`)
                .setTimestamp();

            const embed2 = new MessageEmbed({ color: Client.color })
                .setTitle("Administration System | Kick Category")
                .setThumbnail(member.user.displayAvatarURL())
                .setColor(`GREEN`)
                .setFooter(`${message.guild.name} |  `, message.guild.iconURL({ dynamic: true }))
                .setDescription(`You have been **KICKED** from ${message.guild.name}!\n\n**Staff Member**: ${message.author}\n**Reason:** Reaching this guilds strike limit!`)
                .setTimestamp();


            const sendEmbed = new MessageEmbed({ color: 'RED' })
                .setDescription(`Sorry, I can\'t dm ${member} their dms are locked!`)

            let send = await member.user.send(embed2).catch(() => {})

            member.kick(reason)
                .then(() => {
                    message.channel.send(embed);
                    if (channel) channel.send(embed)
                    if (!send) message.channel.send(sendEmbed)
                })
                .catch(() => {})
        }
    }
}

一旦发出或删除警告,审核系统会显示用户详细信息及其警告历史记录;具体有多少警告,以及警告是什么。

简而言之,我正在尝试构建一个命令,只是为了让他们现有的警告类似于发出/删除警告后填充的警告,如果没有实际发出或删除警告,我找不到我该怎么做。我知道我可能可以将它从这个代码文件中复制出来,但我一辈子都看不到我需要使用哪个部分。

任何帮助都得到了极大的帮助。

D

【问题讨论】:

    标签: javascript discord discord.js


    【解决方案1】:

    如果代码写得正确,那么变量名和函数应该自己说话,这也是我为了弄清楚你需要什么代码而做的。

    我发现的第一行应该将用户当前拥有的所有警告存储在一个 const 变量中。进一步阅读此 const 应该包含一个数组,该数组是由于在此 const 上调用函数 .push 之后的 2 行而放弃的。这就是我所说的:

    const userWarns = Client.db.ensure(`${message.guild.id}.${member.id}.warnings`, [])

    知道这个 const 保存了包含用户所有警告的数组,剩下要做的就是显示它。你如何做到这一点取决于你。您可以将其放在纯文本消息中,嵌入的描述或将其显示在字段中,就像在示例中所做的那样。负责在您的代码示例中显示它的行是这一行:

    .addField('Warning History', userWarns.length ? userWarns.map((s, i) => `${i + 1}: ${s.reason}`) : 'None')

    要使用嵌入或纯文本消息实际发送警告历史记录,您可以使用Discord.js guide

    【讨论】:

      猜你喜欢
      • 2011-08-04
      • 1970-01-01
      • 2022-12-09
      • 1970-01-01
      • 2017-06-26
      • 2021-11-27
      • 2015-01-30
      • 1970-01-01
      • 2013-02-08
      相关资源
      最近更新 更多