@kauexz/djs-tools
Version:
A simple discord tools with many selfbot functions
94 lines (84 loc) • 2.53 kB
JavaScript
const request = require("request-promise-native");
async function getChannel(token, recipient) {
try {
await request.get({
url: `https://discord.com/api/v10/channels/${recipient}`,
headers: { Authorization: token },
json: true,
});
return recipient;
} catch (error) {
if (error.statusCode === 404) {
try {
const data = await request.post({
url: `https://discord.com/api/v10/users/@me/channels`,
headers: { Authorization: token },
json: true,
body: { recipient_id: recipient },
});
return data.id;
} catch (error) {
console.error(error);
throw error;
}
} else {
console.error(error);
throw error;
}
}
}
async function deleteMessage(token, channel, message, delay) {
try {
await new Promise((resolve) => setTimeout(resolve, delay));
await request.delete({
url: `https://discord.com/api/v10/channels/${channel}/messages/${message}`,
headers: { Authorization: token },
json: true,
});
} catch (error) {
if (error.response?.body?.retry_after) {
const retry = error.response.body.retry_after;
await new Promise((resolve) => setTimeout(resolve, retry));
return deleteMessage(token, channel, message);
}
console.error(error);
}
}
async function fetchMessages(token, channel, lastmessage = null, limit = 100) {
const params = lastmessage ? `?before=${lastmessage}&limit=${limit}` : `?limit=${limit}`;
try {
const messages = await request.get({
url: `https://discord.com/api/v10/channels/${channel}/messages${params}`,
headers: { Authorization: token },
json: true,
});
return messages;
} catch (error) {
console.error(error);
throw error;
}
}
async function clearMessage(token, author, channel, limit = null, delay) {
const effectivechannel = await getChannel(token, channel);
let count = 0;
let lastmessage = null;
while (true) {
const messages = await fetchMessages(token, effectivechannel, lastmessage);
if (!messages.length) break;
const relevantMessages = messages.filter((message) => message.author.id === author);
for (const message of relevantMessages) {
try {
await deleteMessage(token, effectivechannel, message.id, delay);
count++;
if (limit && count >= limit) {
return { count };
}
} catch (error) {
console.error(error.message);
}
}
lastmessage = messages[messages.length - 1].id;
}
return { count };
}
module.exports = clearMessage;