[英]Discord.js Sorting through all text channels on a server
module.exports = {
name: 'cleartextchats',
description:
'clears desired amount of text chats created by the bot. usage: cleartextchats <amount>',
execute(message, args) {
var channelAmount = args[0];
console.log('executing cleartextchats');
for (var i = 0; i < channelAmount; i++) {
var textChat = message.guild.channels.cache
.filter((ch) => ch.type === 'text')
.find(
(targetch) => targetch.topic == 'volturnbot' && targetch.deleted == false
);
message.channel.send(`deleting ` + textChat.name);
textChat.delete();
}
},
};
for 循環不會越過第一個刪除的通道。 我認為這是因為除非我使用不同的/新消息,否則緩存不會更新,但該命令應該從消息運行。 我想不出一種方法來實現這一點,它適用於任何數量的頻道。
目前,每當我的機器人創建文本頻道時,它都會更新主題以包含“volturnbot”,以便它可以刪除沒有類別的自己的頻道。
我認為這是因為除非我使用不同的/新消息,否則緩存不會更新,但該命令應該從消息運行。
我相信這個假設是正確的。 這可能是因為即使在 for 循環中刪除頻道后, channel.deleted
屬性仍然為false
,因為頻道刪除可能會產生輕微的延遲。 我能想到的解決方案有兩種:
A) 代替使用for
循環,您也許可以使用setInterval
作為延遲為 1000 毫秒左右的循環(可能必須根據工作情況增加或減少)。 您需要創建兩個新變量:一個用於包含setInterval
循環,另一個用於跟蹤循環發生了多少次迭代。 當迭代變量等於 channelAmount 變量時,即使用return clearInterval(intervalVariable)
,其中 intervalVariable 是包含循環的變量。 (這是假設超時為緩存提供了足夠的時間在通道被刪除后進行更新)。
B) 循環訪問緩存的文本通道,而不是每次從緩存中獲取一個通道。 例子:
var channelAmount = Number(args[0]);
console.log("executing cleartextchats")
var channels = message.guild.channels.cache.filter(ch => ch.deleted == false && ch.type === 'text' && ch.topic && ch.topic.match("volturnbot"));
var iterations = 0;
for (var textChat of channels) {
iterations++;
message.channel.send(`deleting ` + textChat.name)
textChat.delete()
if (iterations == channelAmount) break;
}
老實說,我更喜歡選項 B,而且我很肯定選項 B 會更好地滿足您在這里想要實現的目標。 您還提到頻道主題“包括”短語“volturnbot”,我不確定這是否表明描述可能不僅僅是“volturnbot”,所以我為此選擇了選項 B 使用topic.match("volturnbot")
原因。
因為guild.channels.cache
返回一個集合,所以你也必須使用.array()
,而不是找到單個通道然后搜索相同的緩存,將所有通道放在一個數組中並循環遍歷它。
var channelAmount = Number(args[0]);
var textChats = message.guild.channels.cache
.filter((ch) => ch.type === 'text' && ch.topic === 'volturnbot')
.array()
for (var i = 0; i <= channelAmount; i++) {
message.channel.send("deleting " + textChats[i].name)
//textChats[i].delete()
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.