Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将用户从与PHP不一致的频道中踢出_Php_Discord - Fatal编程技术网

如何将用户从与PHP不一致的频道中踢出

如何将用户从与PHP不一致的频道中踢出,php,discord,Php,Discord,我想从我的Discord频道中删除订阅我的网站已过期的用户。 可以从PHP中执行此操作吗? 我发现了这个RES-API:但不清楚如何做到这一点 也许吧 $client->guild->removeGuildMember($parameters) 但我认为这会将用户从服务器上删除,我需要一个所有用户电子邮件(和用户ID)的列表。我认为您不能使用Restcord或一般方式访问用户的电子邮件,但要获得所有用户,您可以使用$client->guild->listGuildMembers($paramet

我想从我的Discord频道中删除订阅我的网站已过期的用户。
可以从PHP中执行此操作吗?
我发现了这个RES-API:但不清楚如何做到这一点
也许吧

$client->guild->removeGuildMember($parameters)


但我认为这会将用户从服务器上删除,我需要一个所有用户电子邮件(和用户ID)的列表。

我认为您不能使用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

$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;

Enrique提出了一个很好的观点,即不一致的名称可以更改,因此为了应对这种情况,我们将循环遍历成员列表数组,找到与订阅的名称相同的成员名称,然后获取该成员的id并将其存储在订阅数据库中

下面是一个例子:

$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

$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;


我希望这有帮助,这只是一个基本的指导方针,你可以做什么,其余的取决于你

谢谢Ameer,我喜欢用角色管理这个想法,但是你能完成代码吗?我认为答案最重要的部分是#删除这里的成员部分。我的意思是,我需要一种分配角色的方法,还需要一个API调用来删除角色。另外,“discord_name”是一个固定名称还是用户可以更改的名称(如昵称)?我需要一个安全的方法来识别用户(这就是我在邮件中思考的原因),当然,关于不一致的名称,它是可以更改的,所以我将在编辑中添加一个解决方案。我正在测试代码,但“listGuildMembers”并没有返回所有用户,实际上只有一个,你知道是什么导致的吗?哦,我看到它有一个限制参数默认为“1”