¿Cómo podría enviar un Discord DM con cURL? Lo tengo funcionando con mensajes de canal, pero un Discord DM es muy importante para mi sitio web para mantener a los usuarios actualizados. A continuación se muestra lo que tengo hasta ahora, siendo la ID una ID de usuario de Discord.
$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);Usando su código actual, hice un pequeño fragmento. Es posible que deba cambiar algunas cosas según sus necesidades, pero en este caso funciona según lo previsto. Para hacer un buen uso de la solicitud CURL y no hacer y usar código repetitivo, lo pondría en una función, en este caso MakeRequest($endpoint, $data)
Donde $endpoint es una cadena y $data debe ser una matriz
Para abrir y enviar un mensaje directo a un usuario, necesita estos puntos finales.
Para crear un nuevo mensaje directo
POST/usuarios/@yo/canales
Para enviar mensajes:
POST/canales/{canal.id}/mensajes
<?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.")); } ?>Advertencia: debido a cuestiones de seguridad y privacidad, es posible que un mensaje directo no se abra si:
- El usuario no comparte el mismo servidor que su bot.
- El usuario ha desactivado los DM de los miembros del servidor.
- El usuario ha bloqueado tu bot.