使用 Discord API 和 cURL 发送 Discord DM

Posted

技术标签:

【中文标题】使用 Discord API 和 cURL 发送 Discord DM【英文标题】:Using Discord API & cURL to send a Discord DM 【发布时间】:2021-10-12 13:01:50 【问题描述】:

如何使用 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);

【问题讨论】:

你检查过 Discord 开发者documentation? @Variable 我最近检查过。我发现您需要打开一个 DM 频道,但我不完全确定该怎么做,然后在 cURL 函数中使用 DM 频道 ID。 【参考方案1】:

使用您当前的代码,我制作了一个小型 sn-p。您可能需要根据需要更改一些内容,但就此而言,它可以按预期工作。为了充分利用 CURL 请求而不是重复使用代码,我会将它放在一个函数中,在本例中为 MakeRequest($endpoint, $data)

$endpoint 是 String,$data 应该是 Array

为了打开并向用户发送直接消息,您需要这些端点。

用于创建新的直接消息

POST /users/@me/channels

用于发送消息:

POST /channels/channel.id/messages

<?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。 用户已阻止您的机器人。

【讨论】:

谢谢!我真的很感激,一直在寻找这个:) @Popcornography。不客气!希望这对你来说很好。 :) 我刚刚试了一下,效果很好。再次感谢您。现在我已经看到了,它也让理解如何在 API 中做其他事情变得更加容易:)

以上是关于使用 Discord API 和 cURL 发送 Discord DM的主要内容,如果未能解决你的问题,请参考以下文章

在 CMD 中使用 Curl 发送 Discord webhook

Discord 使用 php curl 获取公会成员列表

Discord webhook embed php curl 在最近的 Discord 更新后不再工作

如何使用 Discord API 和 Python 请求发送图片

使用 Discord 的 API 以用户身份发送消息

Discord Oauth2 中的 Curl 问题