使用PHP获取Discord中的成员总数

f5emj3cl  于 2022-11-28  发布在  PHP
关注(0)|答案(7)|浏览(172)

我有一个不和谐的servern与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;
   ?>

我应该做些什么不同的事情来获得已经加入服务器的所有用户的总数,而不仅仅是显示在线成员?

pw9qyyiw

pw9qyyiw1#

现在,我意识到我在这里重提一个相当古老的主题,但我想有些人可能仍然会使用一个答案。
你的404: Unauthorized来自于你没有被授权的事实--你猜对了。如果你已经创建了一个机器人,这是相当容易的:只要添加一个请求头Authorization: Bot YOUR_BOT_TOKEN_HERE。如果您使用的是普通的Discord帐户,那么整个问题就有点棘手了:
首先,您必须向https://discordapp.com/api/auth/login发送一个POST请求,并将主体设置为{"email": "EMAIL_HERE", "password": "PASSWORD_HERE"}。您将得到一个带有参数token的响应。保存此令牌,稍后您将需要它。但是:

在任何情况下都不要向任何人展示此令牌,因为它等同于您的登录凭据!

使用此令牌,您现在可以向同一地址发送POST请求:https://discordapp.com/api/auth/login,但现在添加头文件Authorization: YOUR_BOT_TOKEN_HERE。请注意开头缺少“Bot”。
还有,你千万不要忘记:
如果不添加参数?limit=MAX_USERS,只能得到第一个帮众,详情请看这里。

kzipqqlq

kzipqqlq2#

你要统计一下在线会员的数量这里是工作代码

<?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;
?>
qyzbxkaa

qyzbxkaa3#

你需要一个机器人在你的discord服务器上获取所有成员。例如使用Discord js库。

lvjbypge

lvjbypge4#

首先创建一个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”替换为您自己的信息:

<?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>';

?>
bgtovc5b

bgtovc5b5#

对于仍然感兴趣的人,下面是我目前使用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;
2wnc66cl

2wnc66cl6#

除了Soubhagya Kumar对iTeY的回答注解之外,您可以简单地使用count(),如果您不需要循环,则不需要循环。

esbemjvw

esbemjvw7#

我重新考虑这个问题,因为它似乎仍然是相关的,其他的答案似乎有点太复杂了,我认为(也许API曾经是坏的(?))。
生成一个permanentdiscord invite,并将代码保留在末尾(https://discord.gg/xxxxxxx),然后您要做的就是:

<?php
    $server_code = "xxxxxxx";
    $url = "https://discord.com/api/v9/invites/".$server_code."?with_counts=true&with_expiration=true";
        
    $jsonIn = file_get_contents($url);
    $json_obj = json_decode($jsonIn, $assoc = false);
    $total = $json_obj ->approximate_member_count;
?>

这就是成员总数。请记住,这也将计算机器人,因此如果您想进一步优化它,就必须考虑到这一点

相关问题