You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用discord.js实现多服务器下动态获取服务器名称变量

Discord.js 自动警告系统:获取服务器名称并发送私信警告

问题描述

我想基于discord.js开发一个多服务器可用的自动警告系统:当用户发送屏蔽词时,会通过私信收到警告,警告内容需要显示「你在{服务器名称}因{原因}被警告」,但不知道如何获取服务器名称变量。相关代码片段如下:

var array = ['blocked words one','blocked words two','etc']
if(msg.author.hasPermission('VIEW_AUDIT_LOG')) return;
    if(array.some(w => `${msg.content.toLowerCase()}`.includes(`${w}`))) {
        msg.delete();
    msg.reply('Please do not send flagged words, you have been muted for 2 minutes')  
    }
    var servername = **I do now know how to do it**
    var reason = (`*__Warning from Auto-Mod__** | **__Reason:__** Using filtered words | **__Your Message:__**\n${msg.content}`)
    var filterEmbed = new Discord.MessageEmbed()
        .setTitle(`You were warned in ${servername}`)

(尚未完成向用户发送该警告的步骤,仅展示需要帮助的部分)

解决方案

  1. 获取服务器名称
    直接通过msg.guild.name即可获取消息所在服务器的名称,msg对象的guild属性对应当前服务器实例,name属性就是服务器的名称。

  2. 完善私信警告发送逻辑
    使用msg.author.send()方法给触发规则的用户发送私信,同时建议添加错误捕获,避免因用户关闭私信导致机器人报错。

修改后的完整代码示例

const array = ['blocked words one', 'blocked words two', 'etc'];

// 跳过有权限查看审计日志的用户
if (msg.author.hasPermission('VIEW_AUDIT_LOG')) return;

// 检查消息是否包含屏蔽词
if (array.some(word => msg.content.toLowerCase().includes(word))) {
    msg.delete();
    msg.reply('Please do not send flagged words, you have been muted for 2 minutes');

    // 获取服务器名称
    const serverName = msg.guild.name;
    const reason = `*__Warning from Auto-Mod__** | **__Reason:__** Using filtered words | **__Your Message:__**\n${msg.content}`;
    
    // 创建警告Embed
    const filterEmbed = new Discord.MessageEmbed()
        .setTitle(`You were warned in ${serverName}`)
        .setDescription(reason)
        .setColor('#ff0000'); // 可选:设置警告颜色为红色

    // 发送私信警告并处理可能的错误
    msg.author.send({ embeds: [filterEmbed] })
        .catch(err => {
            console.log(`无法给用户 ${msg.author.tag} 发送私信: ${err}`);
            // 可选:如果私信失败,在频道内提示用户(注意不要泄露屏蔽内容)
            msg.channel.send(`${msg.author}, 无法向你发送私信警告,请检查你的隐私设置。`);
        });
}

注意事项

  • 确保机器人拥有SEND_MESSAGES和EMBED_LINKS权限,才能正常发送Embed私信。
  • 若使用discord.js v14及以上版本,创建Embed需使用EmbedBuilder而非MessageEmbed,导入方式为const { EmbedBuilder } = require('discord.js');。

内容的提问来源于stack exchange,提问作者Fear

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 18:54:26