php 使用Discord API和cURL发送Discord DM

svmlkihl  于 2023-01-12  发布在  PHP
关注(0)|答案(1)|浏览(276)

我怎样才能发送一个带有cURL的Discord DM?我已经让它在频道消息中工作了,但是Discord DM对我的网站保持用户更新是非常重要的。下面是我到目前为止得到的,ID是一个Discord用户ID。

$url = 'https://discordapp.com/api/channels/591765736003731487/messages';

$ch = curl_init();
$f = fopen('request.txt', 'w');
curl_setopt_array($ch, array(
    CURLOPT_URL            => $url, 
    CURLOPT_HTTPHEADER     => array('Authorization : Bot <TOKEN>'), 
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_FOLLOWLOCATION => 1,
    CURLOPT_VERBOSE        => 1,
    CURLOPT_SSL_VERIFYPEER => 0,
    CURLOPT_STDERR         => $f,
));
$response = curl_exec($ch);
fclose($f);
curl_close($ch);
vmjh9lq9

vmjh9lq91#

使用您当前的代码,我已经做了一个小片段。您可能需要根据您的需要更改一些内容,但就这一点而言,它可以按预期工作。为了充分利用CURL请求,并且不生成和使用重复代码,我将把它放在一个函数中,在本例中为MakeRequest($endpoint, $data)
其中,$endpointString,而$data应该是Array
为了打开直接消息并将其发送给用户,您需要这些终结点。
用于创建新的直接消息
POST/用户/@我/频道
发送信息:
POST/通道/{通道ID}/消息

<?php
function MakeRequest($endpoint, $data) {
    # Set endpoint
    $url = "https://discord.com/api/".$endpoint."";

    # Encode data, as Discord requires you to send json data.
    $data = json_encode($data);

    # Initialize new curl request
    $ch = curl_init();
    $f = fopen('request.txt', 'w');

    # Set headers, data etc..
    curl_setopt_array($ch, array(
        CURLOPT_URL            => $url, 
        CURLOPT_HTTPHEADER     => array(
            'Authorization: Bot token',
            "Content-Type: application/json",
            "Accept: application/json"
        ),
        CURLOPT_RETURNTRANSFER => 1,
        CURLOPT_FOLLOWLOCATION => 1,
        CURLOPT_VERBOSE        => 1,
        CURLOPT_SSL_VERIFYPEER => 0,
        CURLOPT_POSTFIELDS => $data
        CURLOPT_STDERR         => $f,
    ));

    $request = curl_exec($ch);
    curl_close($ch);
    return json_decode($request, true);
}

# Open the DM first
$newDM = MakeRequest('/users/@me/channels', array("recipient_id" => "ID From the user"));

# Check if DM is created, if yes, let's send a message to this channel.
if(isset($newDM["id"])) {
    $newMessage = MakeRequest("/channels/".$newDM["id"]."/messages", array("content" => "Hello World."));
}
?>

**注意:**出于安全和隐私考虑,在以下情况下可能无法打开直接消息:

  • 用户与机器人程序不共享同一服务器。
  • 用户已从服务器成员关闭DM。
  • 用户已阻止您的机器人程序。

相关问题