簡體   English   中英

Discord.JS 可定制的禁用詞/過濾器

[英]Discord.JS Customizable Banned Words/Filter

我正在嘗試制作一個 discord 禁用詞過濾器,該過濾器可按服務器自定義,類似於 MEE6、Dyno 等。

我目前將服務器和指定的單詞保存在數據庫中。 我目前要過濾這些詞是在發送的每條消息中查詢數據庫搜索,我相信這不是一個好主意。

示例代碼:

client.on("messageCreate", async message => {
sql.query(`SELECT * FROM words WHERE serverid = ${serverID}`, (err, res) => {
  let words = res[0]
    for (let i in words) {
    if(message.content.includes(words[i])) return message.delete()
    }
  })
})

我認為當同時發送數千條消息時,這種方法會非常緩慢且效率低下,我想知道是否有更好的方法通過將單詞存儲在緩存/映射或其他東西中來做到這一點,謝謝。

我只會在機器人啟動時運行該查詢,並將它們存儲在客戶端 object 的 object 中,這樣就可以輕松訪問它,而不必依賴全局 object。

client.wordFilters = {}
// for every server id
sql.query(`SELECT * FROM words WHERE serverid = ${serverID}`, (err, res) => {
     client.wordFilters[serverID] = [...res] 
// assuming res is an array of banned words 
// or you need to turn it into an array first
// or just use it as an object, use it as how you see fit
  })

然后每次添加新的禁用詞時,不要忘記將其推送到client.wordFilters[serverID]內部的數組中

client.on("messageCreate", async message => {
  // assuming the res object above is an array
  for (let i = 0; i < client.wordFilters[serverID]; i++){
     let word = client.wordFilters[serverID][i]
     if(message.content.includes(word)) return message.delete()
  }
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM