我想从我的Discord频道中删除那些订阅过期的用户。
可以从PHP做到吗?
我找到了以下RES API:https://github.com/restcord/restcord,但不清楚如何实现
也许
$ client->行会-> removeGuildMember($ parameters);
但是我认为这会将用户从服务器中删除,我需要首先列出所有用户电子邮件(和用户ID)的列表。
答案 0 :(得分:1)
我认为您无法使用Restcord或一般方式访问用户的电子邮件,但是要获得所有用户,可以使用$client->guild->listGuildMembers($parameters);
并将其存储在数组中以备后用。
但是,就您的问题而言,您可以创建一个角色,该角色无权访问该特定频道,并让用户使用其电子邮件和不和名称+标识符(即4个数字)来订阅您的网站他们名字的结尾)。
现在,答案的这一部分假设您正在将用户的电子邮件和不一致的名称存储在数据库中;循环遍历最初存储guildMembers的数组,并检查未订阅的用户。如果尚未订阅,请删除该角色,使他们可以访问该特定频道。
这是一个例子:
$user_array = $client->guild->listGuildMembers($parameters);
$host= "localhost";
$uid= "root";
$psw= "";
$db= "exampleDB";
try
{
$conn = new PDO("mysql:host=$host;dbname=$db", $uid, $psw);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("SELECT * FROM subscribers");
$stmt->execute();
while($row = $stmt->fetch()){
if(!in_array($row['discord_name'], $user_array){
$client->guild->removeGuildMemberRole($guildId, $row['id'], $roleId);
}
}
}
catch (PDOException $e)
{
echo "Failed to connect";
}
$conn = null
Enrique提出了一个好点,那就是可以更改不和谐名称,因此,为了进行反击,我们将遍历成员列表数组并查找与所订阅的成员名称相同的成员名称,然后获取该成员的ID并存储在订阅数据库中。
这是一个例子:
$host= "localhost";
$uid= "root";
$psw= "";
$db= "exampleDB";
$username;
$id;
if(isset($_POST['subscribe'])){
$username = $_POST['discord_name'];
foreach($user_list as $user){
if($user->name == $username){
$id = $user->id;
}
}
try
{
$conn = new PDO("mysql:host=$host;dbname=$db", $uid, $psw);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt->prepare("INSERT INTO subscribers(discord_name, id) VALUES('$username', '$id')");
$stmt->execute();
}
catch (PDOException $e)
{
echo "Failed to connect";
}
$conn = null;
我希望这会有所帮助,这只是您可以做什么的基本指南,剩下的取决于您!