通过与PHP雪花(Discord.php)循环

问题描述 投票:1回答:2

这是我的第一篇文章,我做了很多的阅读在这里,所以希望我避免尴尬的自己。我已经做了很多的话题搜索,很少有结果,因为我是新来PHP它不帮助,并且文档的话题稀疏。

对于PHP不和谐的API被限制在一定的数据块的,你可以要求什么,我试图做的是:获取成员,检查他们有什么样的角色,如果他们有它,指望他们。

目前使用API​​,你可以一个行内统计所有成员,但你不能用一个特定的角色算个公会内的所有成员。我最终的结论是遍历雪花和处理比较自己。

此代码返回一个公会的雪花(最高1000):

<?php
    $json_options = [
      "http" => [
        "method" => "GET",
        "header" => "Authorization: Bot TOKENREDACTED"
      ]
    ];    
    $json_context = stream_context_create($json_options); 
    $json_get     = file_get_contents('https://discordapp.com/api/guilds/GUILDIDREDACTED/members?limit=1000', false, $json_context);
    $json_decode  = json_decode($json_get, true);
    print_r($json_decode);
?>

和雪花,我通过这个样子的努力循环:

Array
(
    [0] => Array
        (
            [nick] => nickname
            [user] => Array
                (
                    [username] => username
                    [discriminator] => 7697
                    [id] => 123456789012345
                    [avatar] => 32ad726b873445fff9145e47144a9465
                )
            [roles] => Array
                (
                    [0] => 123456789012345678
                    [1] => 123456789012345678
                )
            [mute] => 
            [deaf] => 
            [joined_at] => 2018-05-18T07:22:49.562000+00:00
        )
    [1] => Array (annnd repeat for the next member)

正如你所看到的雪花在阵列中的条款相当复杂。

我想在这里做的是通过每个数组项([0][1][2]等),然后到角色中循环。如果[user]有角色ID 123456789012345678(例如),那么添加成员向计打印,如果没有匹配,那么它会简单地忽略,并移动到下一个。但我真的不知道从哪里开始的这一点。任何帮助或方向表示赞赏,谢谢。

php arrays discord snowflake
2个回答
1
投票

您可以使用array-filter并获得唯一你需要in-array的元素,然后用简单的方法count指望他们。考虑以下:

$arr = array_filter($json_decode, function($e) {return in_array("123456789012345678", $e['roles']);});
echo count($arr);

如果你的“角色ID”是动态的,你可以这样做:

$myRole = "123456789012345678";
$arr = array_filter($json_decode, function($e) use ($myRole) {return in_array($myRole, $e['roles']);});

如果你也想显示username你可以这样做:

foreach($arr as $e) {echo $e['user']['username'];}

0
投票

这可能是真的,真的不好的做法,特别是对第一篇文章。 @wesley默奇非常感谢你的方向,我得到了现在。此外,随时回复,所以我可以标记你的答案。这里是工作的代码,我想和大家一起分享和的代码做什么如下解释:

<?php
$json_options = [
  "http" => [
    "method" => "GET",
    "header" => "Authorization: Bot Your-Discord-Bot-Token-Here"
  ]
];

$json_context = stream_context_create($json_options);

$json_get     = file_get_contents('https://discordapp.com/api/guilds/your-guild-id-here/members?limit=1000', false, $json_context);


print_r(substr_count ( $json_get ,'Role-Id-To-Look-For'));
?>

此代码将查询雪花的API,它那么雪花转换为字符串,并计算其中的那个角色包含在雪花的出现。在这种情况下,我有12人这个角色,我可以确认它成功返回的12值。在这种用法情况下,它不一定解析阵列的事,我能只检查雪花作为字符串我一直在寻找的ID。这种用法案件在事实的限制,它不一定返回其具有的角色成员的任何细节,所以我不会说这完全覆盖每一个使用情况。

© www.soinside.com 2019 - 2024. All rights reserved.