Как получить id участников дискорд сервера без прав

Как получить список id участников дискорд сервера, не имея прав администратора, я слышал можно сделать какойто запрос, парс и прочее, подскажите пожта.Желательно на js


Ответы (2 шт):

Автор решения: Zoodogood
const responce = await fetch("https://discord.com/api/v10/guilds/<guildId>/members", {
    method: "GET",
    headers: {
      Authorization: <ТОКЕН ВАШЕЙ УЧЁТНОЙ ЗАПИСИ ИЛИ БОТА>
    }
});

const json = await responce.json();

Это минимальный пример запроса основанный на документации:
https://discord.com/developers/docs/resources/guild#list-guild-members

Однако при попытке получить доступ к списку пользователей мне возвращалось Missing Access.
Другие действия типа получить конкретного пользователя гильдии по айди возвращали корректный результат.
Проблема со спиком происходит из-за того, что как и указано в документации, это привелигериванное намерение.

Извините за неполный ответ. Теперь мне самому интересно разобраться в том, как подтверидть это намерение в запросе

→ Ссылка
Автор решения: Zoodogood

У меня получилось получить список пользователей через Шлюз WebSockets.:
https://discord.com/developers/docs/topics/gateway#request-guild-members-guild-request-members

const TOKEN    = "<Токен учётной записи>";
const GUILD_ID = "<id>"; // Айди обязан быть в строковом виде

const socket = new WebSocket("wss://gateway.discord.gg/");

socket.onopen  = () => {
  console.log(111);
  identify();
}

socket.onclose = () => console.log(222);

socket.onmessage = ({data}) => {
  data = JSON.parse(data);

  if (data.t === "GUILD_MEMBERS_CHUNK"){
    const members = data.d.members.map(member => member.user.id);
    console.log("MEMBERS", members);
    return;
  }

  if (data.t === "READY"){
    console.log("READY");
    fetchMembers();
    return;
  }

  console.log(data)
};



function send(data){
  data = JSON.stringify(data);
  socket.send(data);
};


const identify = () => {
  // Идентификация 
  send({"op":2,"d":{"token": TOKEN, "compress":false,"properties":{"$os":"Windows","$browser":"Discord Client","$device":"ASUS ROG Phone 5","$os_version":"10","$referrer":"","$referring_domain":"","$referrer_current":"","$referring_domain_current":"","$release_channel":"stable","$client_build_number":127546,"$client_event_source":null,"$browser_user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36","$browser_version":"101.0.4951.54"},"version":9,"client_state":{"guild_hashes":{},"highest_last_message_id":"0","read_state_version":0,"user_guild_settings_version":-1,"user_settings_version":-1},"presence":{"activities":[],"afk":false,"since":0,"status":"online"}}})
};


const fetchMembers = () => {
  // Запрос списка пользователей
  console.log("FETCH MEMBERS CHUNK");
  send({"op": 8,"d": {"guild_id": GUILD_ID, "presences":false, "query": "", "nonce": GUILD_ID, "limit": 0}})
};

Надеюсь, у Вас это тоже сработает.

Изменено:
Оказалось, для получения пользователей методом выше (opcode: 8), нужно одно из следующих прав:
Администратор, Право банить/кикать, Управлять ролями

Существует также универсальное решение, но со своими неудобствами:

const fetchMembers = () => {
  // Укажите айди любого канала, к которому у вас есть доступ на сервере
  const CHANNEL_ID    = "<id>";
  // Сколько пользователей надо получить
  const MEMBERS_COUNT = <count>;

  // [[0, 99], [100, 199], [200, 299]]
  const countsArray = [...new Array(Math.floor(MEMBERS_COUNT / 100))]
    .map((_, i) => [i * 100, (i + 1) * 100 - 1]);

  send({"op":14,"d": {  
    "guild_id": GUILD_ID,  
    "typing": false, 
    "threads": false,  
    "activities": false,  
    "thread_member_lists": [],  
    "members": [],  
    "channels": {[CHANNEL_ID]: countsArray}  
  }});
}
→ Ссылка