#node.js
Вопрос:
Я хочу создать бота, который удаляет чат с часовым интервалом, установленным пользователем. Моя проблема в том, и я знаю, как остановить взаимодействие после его запуска.
Я попытался очистить коллектор взаимодействий, но что бы я ни делал, бот просто не останавливается, как только начинает бесконечный цикл.
Файл timedClear
const { SlashCommandBuilder } = require("@discordjs/builders")
const ms = require("ms")
const thirtyMinutes = 1800000
const seconds = 5000
module.exports = {
data: new SlashCommandBuilder()
.setName("timedclean")
.setDescription("Delete 100 messages every set amount of hrs.")
.addBooleanOption((option) =>
option.setName("run").setDescription("Type false to stop timer.")
)
.addStringOption((option) =>
option
.setName("hrs")
.setDescription("Number hrs before deletes run again.")
),
async execute(interaction, client, interactionCollector, command) {
const hrs = interaction.options.getString("hrs")
const msHours = ms(`${String(hrs)}m`)
let runOption = interaction.options.getBoolean("run")
let id = interaction.id
async function warningMessage() {
if (runOption) {
interaction.channel.send(
`This chat is set to delete every ${hrs} hours.`
)
setTimeout(() => {
interaction.channel
.send("Warning: Chat will clear in 5 seconds.")
.then(clearAll())
}, msHours)
}
}
function clearAll() {
if (runOption) {
setTimeout(async () => {
interaction.channel.bulkDelete(100).then(warningMessage())
}, seconds)
}
}
if (msHours) {
interaction
.reply("Automated Deleting in Progress")
.then(warningMessage())
.then((id = interaction.id))
}
if (!runOption) {
//idk how to stop the above
}
},
}
bot.js
const fs = require("fs")
const {
Client,
Intents,
Collection,
InteractionCollector,
} = require("discord.js")
const config = require("./config.json")
console.clear()
const intents = [Intents.FLAGS.GUILDS]
const client = new Client({ intents })
client.commands = new Collection()
const interactionCollector = new InteractionCollector(client)
const commandFiles = fs
.readdirSync("./commands")
.filter((file) => file.endsWith(".js"))
for (const file of commandFiles) {
const command = require(`./commands/${file}`)
client.commands.set(command.data.name, command)
}
client.once("ready", () => {
console.log("Ready!")
})
client.on("message", (message) => {
console.log(message.author.tag)
})
client.on("interactionCreate", async (interaction) => {
if (!interaction.isCommand()) return
const command = client.commands.get(interaction.commandName)
if (!command) return
try {
await command.execute(interaction, client, interactionCollector)
} catch (error) {
console.error(error)
return interaction.channel
.send("There was an error while executing this command!")
.then((message) => message.delete(3000))
}
})
client.login(config.token)
Я перепробовал так много вещей, и я просто застрял.