У меня есть сервер Discord с 1361 участником, и на моем веб-сайте я хочу отобразить общее количество присоединившихся пользователей.
Я выяснил, как получить всех онлайн-пользователей на сервере, используя:
<?php
$jsonIn = file_get_contents('https://discordapp.com/api/guilds/356230556738125824/widget.json');
$JSON = json_decode($jsonIn, true);
$membersCount = count($JSON['members']);
echo "Number of members: " . $membersCount;
?>
Что я должен сделать по-другому, чтобы получить общее количество ВСЕХ пользователей, которые присоединились к серверу, а не просто показать участников онлайн?
Теперь я понимаю, что возрождаю довольно старую тему, но думаю, что некоторые все еще могут использовать ответ. Как указал jrenk, вы должны вместо этого получить доступ https://discordapp.com/api/guilds/356230556738125824/members
,
Ваш 404: Unauthorized
Происходит от того, что вы, как вы уже догадались, не авторизованы.
Если вы создали бота, это довольно просто: просто добавьте заголовок запроса Authorization: Bot YOUR_BOT_TOKEN_HERE
, Если вы используете обычную учетную запись Discord, вся проблема немного сложнее:
Сначала вы должны будете отправить POST
запросить https://discordapp.com/api/auth/login
и установить тело в {"email": "EMAIL_HERE", "password": "PASSWORD_HERE"}
,
Вы получите ответ с параметром token
, Сохраните этот токен, он понадобится вам позже. НО:
НИКОГДА, НИКАКИХ ОБСТОЯТЕЛЬСТВ покажите кому-нибудь этот токен, так как он эквивалентен вашим учетным данным!
С этим токеном вы можете отправить POST
запрос по тому же адресу: https://discordapp.com/api/auth/login
, но теперь добавьте заголовок Authorization: YOUR_BOT_TOKEN_HERE
, Обратите внимание на отсутствующий «Бот» в начале.
Кроме того, что вы не должны забывать:
Если вы не добавите параметр
?limit=MAX_USERS
, вы получите только первый член гильдии. Взглянуть Вот чтобы увидеть детали.
Вы должны посчитать количество онлайн-членов
вот рабочий код
<?php
$members = json_decode(file_get_contents('https://discordapp.com/api/guilds/356230556738125824/widget.json'), true)['members'];
$membersCount = 1;
foreach ($members as $member) {
if ($member['status'] == 'online') {
$membersCount++;
}
}
echo "Number of members: " . $membersCount;
?>
Сначала создайте дискорд-бота и получите токен, смотрите следующий URL:
https://github.com/reactiflux/discord-irc/wiki/Creating-a-discord-bot-&-Получение-а-маркер
Как отметил @ 2Kreeper, не раскрывайте свой токен публично.
Затем используйте следующий код, заменив «введите бот-маркера здесь» а также «введите цеховой-ID здесь«с вашей собственной информацией:
<?php
$json_options = [
"http" => [
"method" => "GET",
"header" => "Authorization: Bot enter-bot-token-here"]
];
$json_context = stream_context_create($json_options);
$json_get = file_get_contents('https://discordapp.com/api/guilds/enter-guild-id-here/members?limit=1000', false, $json_context);
$json_decode = json_decode($json_get, true);
echo '<h2>Member Count</h2>';
echo count($json_decode);
echo '<h2>JSON Output</h2>';
echo '<pre>';
print_r($json_decode);
echo '</pre>';
?>