我有一个拥有1361名成员的Discord服务器,在我的网站上我想显示已加入用户的总数。
我已经想出如何使用以下方式获取服务器上的所有在线会员:
<?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;
?>
我应该采取哪些不同的方式来获取已加入服务器的所有用户的总数,而不仅仅是显示在线成员?
答案 0 :(得分:1)
现在,我意识到我正在恢复一个相当旧的线程,但我认为有些人可能仍会使用答案。正如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
。注意缺少的&#34; Bot&#34;在开始。
另外,你不能忘记:
如果你不添加参数
?limit=MAX_USERS
,你将只获得第一个公会成员。看看here以查看详细信息。
答案 1 :(得分:1)
您需要在不和谐服务器上安装一个漫游器来获取所有成员。例如,使用Discord js库。
答案 2 :(得分:0)
您必须计算在线会员的数量 这是工作代码
<?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;
?>
答案 3 :(得分:0)
首先创建一个discord bot并获取令牌,请参见以下URL:
https://github.com/reactiflux/discord-irc/wiki/Creating-a-discord-bot-&-getting-a-token
正如@ 2Kreeper所指出的,请勿公开公开您的令牌。
然后使用以下代码,替换“ enter-bot-token-here ”和“ enter-guild-id-here ” em> ”和您自己的信息:
<?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>';
?>
答案 4 :(得分:0)
对于仍然有兴趣的人,这是我目前使用RestCord使用的解决方案:
use RestCord\DiscordClient;
$serverId = <YourGuildId>;
$discord = new DiscordClient([
'token' => '<YourBotToken>'
]);
$limit = 1000;
$membercnt = 0;
$_ids = array();
function getTotalUsersCount($ids, $limit, $serverId, $discord) {
if( count($ids) > 0 ) {
$last_id = max($ids);
$last_id = (int)$last_id;
} else {
$last_id = null;
}
$members = $discord->guild->listGuildMembers(['guild.id' => $serverId, 'limit' => $limit, 'after' => $last_id]);
$_ids = array();
foreach( $members as $member ) {
$ids[] = $member->user->id;
$_ids[] = $member->user->id;
}
if( count($_ids) > 0 ) {
return getTotalUsersCount($ids, $limit, $serverId, $discord);
} else {
return $ids;
}
}
$ids = getTotalUsersCount($_ids, $limit, $serverId, $discord);
$membercnt = count($ids);
echo "Member Count: " . $membercnt;
答案 5 :(得分:0)
除了iTeY提供的Soubhagya Kumar的答案评论,您还可以简单地使用count(),如果不需要循环,则无需循环。