Skip to content

Instantly share code, notes, and snippets.

@acrossoffwest
Created May 10, 2022 18:15
Show Gist options
  • Save acrossoffwest/1189d36fe0097b6fe39f9f058fe961d7 to your computer and use it in GitHub Desktop.
Save acrossoffwest/1189d36fe0097b6fe39f9f058fe961d7 to your computer and use it in GitHub Desktop.
Get all discord users
const waiter = (cb, waitSeconds = 1) => new Promise(async (resolve) => {
setTimeout(async () => {
const result = await cb();
resolve(result);
}, waitSeconds * 1000);
});
const extractUsers = async (tabName = 'all', listClass = 'peopleList', itemClass = 'peopleListItem') => {
return waiter(() => document.querySelector('[class^="childWrapper"]').click())
.then(() => waiter(() => document.querySelector('[class^="nameAndDecorators"]').click()))
.then(() => waiter(() => document.querySelector(`[aria-controls="${tabName}-tab"]`).click()))
.then(() => waiter(async () => {
const wrapper = document.querySelector(`[class^=${listClass}]`);
wrapper.scroll(0, 0);
const content = wrapper.querySelector(`div`);
const contentHeight = content?.clientHeight ?? 600;
const getTextContent = (el, classPrefix, index = 0) => el.querySelectorAll(`[class^=${classPrefix}]`)[index].textContent;
const extractUser = (element) => getTextContent(element, `username`) + getTextContent(element, `discriminator`);
const extractUsersPromise = async (content, offset) => {
return new Promise((res) => {
const elements = content.querySelectorAll(`[class^=${itemClass}]`);
wrapper.scroll(0, offset);
setTimeout(() => {
res(Object.values(elements).map(extractUser));
}, 100);
})
}
let results = [];
try {
for (let i = 0; i < contentHeight; i += 300) {
const extractedUsers = await extractUsersPromise(content, i);
results = [...results, ...extractedUsers.filter(user => !results.includes(user))];
}
} catch (e) {
console.error(e);
}
return results;
}));
}
extractUsers().then(users => {
console.log(users.length);
console.log(users.join('\r\n'));
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment