【问题标题】:How would I kick all the users that contain a phrase in their name?我将如何踢所有名称中包含短语的用户?
【发布时间】:2021-10-18 23:57:03
【问题描述】:

如果所有用户的名字中都包含一个短语,例如“ihatemelons”,那么有什么好方法可以找到所有用户来踢他们。

                let server = message.guild.id
        
        //grab all discord names
        let list = client.guilds.cache.get(server)
        console.log(`All Users In Guild: ${list}`)
        list.members.cache.forEach(member => console.log(member.user.username)); 
        //Regex term to search 
        let re = (/_/ig)
        
        //Search all of them
        let usersFound = list.members.cache.forEach.match(re)(member => console.log(member.user.username))
        list.members.cache.forEach(usersFound => console.log(member.user.username)); 
        
        //What to do with the users that have the phrase in their name
        message.reply(`Found:${usersFound}`)

除非我被困在我搜索的地方,因为 let usersFound = list.members.cache.forEach.match(re)(member => console.log(member.user.username)) 不起作用

【问题讨论】:

  • 提供你当前的代码,你卡在哪一部分?
  • @Elitezen 我重做了一些你能帮我解决问题吗?
  • forEach 是一个方法,而不是一个属性。
  • @user15517071 如何将正则表达式与列表找到的每个用户进行匹配,然后将这些用户存储起来?

标签: javascript node.js discord discord.js


【解决方案1】:

您可以使用正则表达式来查找您不喜欢的短语,例如,如果您不喜欢用户名中的单词creepy,您可以这样做:

let regex = /creepy/ig
regex.test("creepyUsername"); // Outputs true

有关正则表达式的更多信息:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions

【讨论】:

  • 你能再解释一下吗?我很困惑
  • 当然,两个斜线是正则表达式指示符。你放在斜线之间的词就是你想找到的词。 i 表示忽略大小写,g 标签表示可以搜索多个匹配项。如果您还需要更多解释,请告诉我。如果要向正则表达式添加更多单词,可以使用 |字符,例如,如果你想在用户名中找到 bad 单词,你的正则表达式将是 /creepy|bad/ig
【解决方案2】:
message.guild.members.cache.filter(member => member.user.username.includes('ihatemelons'))

由于GuildMemberManager.cache 返回Collection,您可以使用Collection 和Map 提供的方法。 Collection.filter() 的作用类似于 Array.filter(),但返回的是 Collection


编辑

这对我有用:

const members = await message.guild.members.fetch();
let usersFound = members.filter(member => member.user.username.includes('ihatemelons'));

// OR: case-insensitive:

let usersFound = members.filter(member => /ihatemelons/i.test(member.user.username));
// OR
let usersFound = members.filter(member => member.user.username.toLowerCase().includes('ihatemelons'));

usersFound.forEach(member => console.log(member.user.username));

确保您已启用在 Discord 开发者门户中接收完整成员列表的特权意图。

【讨论】:

  • 那么,一旦我在地图中拥有了所有包含“ihatemelons”的用户,我将如何踢他们每一个人?
  • 您可以使用 forEach 遍历它们中的每一个。
  • 附带说明,discord.js 有comprehensive documentation。当您不确定如何从 discord.js 对象中访问某些信息时,它会非常有用。
  • 这似乎不起作用?让 usersFound = message.guild.members.cache.filter(member => member.user.username.includes('ihatemelons')) usersFound.forEach(member => console.log(member.user.username))
  • 它对我有用。请注意,String.includes() 区分大小写。
猜你喜欢
  • 2020-03-08
  • 1970-01-01
  • 1970-01-01
  • 2022-08-24
  • 1970-01-01
  • 2014-07-06
  • 1970-01-01
  • 2015-01-10
  • 2022-01-19
相关资源
最近更新 更多