我正在嘗試制作一個可按服務器自定義的不和諧禁用詞過濾器,類似于 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()
}
})
})
我認為當同時發送數千條訊息時,這種方法會非常緩慢和低效,我想知道是否有更好的方法通過將單詞存盤在快取/地圖或其他東西中來做到這一點,謝謝。
uj5u.com熱心網友回復:
我只會在機器人啟動時運行該查詢,并將它們存盤在客戶端物件的一個??物件中,這樣就可以輕松訪問它而不必依賴全域物件。
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()
}
})
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/392300.html
標籤:javascript 节点.js 不和谐 不和谐.js
