UNPKG

@kauexz/djs-tools

Version:

A simple discord tools with many selfbot functions

94 lines (84 loc) 2.53 kB
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;