这是我的第一篇文章,我做了很多的阅读在这里,所以希望我避免尴尬的自己。我已经做了很多的话题搜索,很少有结果,因为我是新来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
(例如),那么添加成员向计打印,如果没有匹配,那么它会简单地忽略,并移动到下一个。但我真的不知道从哪里开始的这一点。任何帮助或方向表示赞赏,谢谢。
您可以使用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'];}
这可能是真的,真的不好的做法,特别是对第一篇文章。 @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。这种用法案件在事实的限制,它不一定返回其具有的角色成员的任何细节,所以我不会说这完全覆盖每一个使用情况。