【问题标题】:discord.js Link blockerdiscord.js 链接拦截器
【发布时间】:2021-07-18 02:18:39
【问题描述】:

我目前正在尝试编写 Discord 链接拦截器:

我的代码:

client.on('message', (message) => {
    if (message.content.includes('discord.gg/')) {
        message.delete()
        .then(message.channel.send('<@!' + message.member + '>' + config.link_deleted_chat_message))
        .then(message.member.send('<@!' + message.member + '>' + config.link_deleted_dm_message))
    }
    if (message.content.includes('discordapp.com/')) {
        message.delete()
        .then(message.channel.send('<@!' + message.member + '>' + config.link_deleted_chat_message))
        .then(message.member.send('<@!' + message.member + '>' + config.link_deleted_dm_message))
        }
    if (message.content.includes('https:')) {
        message.delete()
        .then(message.channel.send('<@!' + message.member + '>' + config.link_deleted_chat_message))
        .then(message.member.send('<@!' + message.member + '>' + config.link_deleted_dm_message))
        }
    if (message.content.includes('http:')) {
        message.delete()
        .then(message.channel.send('<@!' + message.member + '>' + config.link_deleted_chat_message))
        .then(message.member.send('<@!' + message.member + '>' + config.link_deleted_dm_message))
        }
    if (message.content.includes('www.')) {
        message.delete()
        .then(message.channel.send('<@!' + message.member + '>' + config.link_deleted_chat_message))
        .then(message.member.send('<@!' + message.member + '>' + config.link_deleted_dm_message))
        }
  })

如何将所有关键字(http: ; discord.gg/ ; 等)放在一个“if part”中?

我需要那个,因为我希望机器人只写一次消息,即使你写了“https://discord.gg/”。如果您只写“https://discord.gg/”,则消息会因为第一个“https://”而出现两次,然后因为“discord.gg/”而出现一次。

【问题讨论】:

    标签: javascript node.js discord.js


    【解决方案1】:

    选项 1 - else if

    if 语句之一匹配时,将跳过所有后续else if 块。

    client.on('message', (message) => {
        if (message.content.includes('discord.gg/')) {
            message.delete()
            .then(message.channel.send('<@!' + message.member + '>' + config.link_deleted_chat_message))
            .then(message.member.send('<@!' + message.member + '>' + config.link_deleted_dm_message))
        }
        else if (message.content.includes('discordapp.com/')) {
            message.delete()
            .then(message.channel.send('<@!' + message.member + '>' + config.link_deleted_chat_message))
            .then(message.member.send('<@!' + message.member + '>' + config.link_deleted_dm_message))
            }
        else if (message.content.includes('https:')) {
            message.delete()
            .then(message.channel.send('<@!' + message.member + '>' + config.link_deleted_chat_message))
            .then(message.member.send('<@!' + message.member + '>' + config.link_deleted_dm_message))
            }
        else if (message.content.includes('http:')) {
            message.delete()
            .then(message.channel.send('<@!' + message.member + '>' + config.link_deleted_chat_message))
            .then(message.member.send('<@!' + message.member + '>' + config.link_deleted_dm_message))
            }
        else if (message.content.includes('www.')) {
            message.delete()
            .then(message.channel.send('<@!' + message.member + '>' + config.link_deleted_chat_message))
            .then(message.member.send('<@!' + message.member + '>' + config.link_deleted_dm_message))
            }
      })
    

    选项 2 - 正则表达式

    您可以将所有搜索合并为一个regular expression

    client.on('message', (message) => {
        if (message.content.match(/discord\.gg|discordapp\.com|https?:|www\./) !== null) {
            message.delete()
            .then(message.channel.send('<@!' + message.member + '>' + config.link_deleted_chat_message))
            .then(message.member.send('<@!' + message.member + '>' + config.link_deleted_dm_message))
        }
      })
    

    【讨论】:

    • 我认为在这种情况下RegExp#test()String#match() 更合适。此外,虽然我认为正则表达式是最好的方法,但您可以为每个被禁止的字符串创建一个数组,并使用 Array#some() 遍历所有字符串以进行匹配,从而只产生一个 if 块。 bannedLinks.some((str) =&gt; message.content.includes(str))
    猜你喜欢
    • 2012-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-15
    • 1970-01-01
    • 1970-01-01
    • 2015-11-22
    • 2015-04-20
    相关资源
    最近更新 更多