是否可以通过不和谐的API进行链接并创建邀请链接?我打算将链接存储在数据库中,并且只有特定用户才能基于discord bot创建的唯一1次链接进行加入。我计划将其连接到前端管理面板中,以便我可以跟踪所有链接以及它们属于谁,以及链接是否已被使用。并不是真正地关注发布消息,或者只需要它来创建唯一链接。
答案 0 :(得分:1)
在尝试自己做时发现了这个问题。这是我想出来的,请随意尝试。
先决条件:
a) 确保您已设置 BOT 并将其邀请到您的服务器。您将需要“BOT_TOKEN”进行身份验证。 (参见:https://codeburst.io/discord-bot-tutorial-2020-a8a2e37e347c)一个不错的教程
b) 您还需要通过打开“开发者选项”,右键单击您的频道并选择“CopyID”(参见:https://www.home-assistant.io/integrations/discord/#:~:text=In%20The%20Discord%20application%20go,channel%20ID%20(Copy%20ID))作为示例来获取您的频道 ID。
注意:我放了一些代码来避免调用 API 太多次,根据需要进行调整。
这是针对“API v6”的
define("INVITE_FILE","/tmp/lastinvite.dat");
define("INVITE_STALE",4500); //seconds
define("BOT_TOKEN","{PASTE YOUR BOT TOKEN HERE}");
define("CHANNEL_ID","{PASTE YOUR CHANNEL ID HERE!}");
function invite_discord($options)
{
//prevent too many messages
$f=file_exists(INVITE_FILE);
if ($f == false) $last=time()-500000;
else $last=@filemtime(INVITE_FILE);
$now=time();
$el=$now - $last;
if ($el < INVITE_STALE)
{
return file_get_contents(INVITE_FILE);
} // not last invite
// Replace the URL with your own webhook url
$url = "https://discordapp.com/api/v6/channels/" . CHANNEL_ID . "/invites";
$inviteobj=json_encode($options, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE );
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER,
array( "Authorization: Bot " . BOT_TOKEN,
'Content-Type: application/json',
'Referer: https://discordapp.com/channels/@me'
));
curl_setopt_array( $ch, [
CURLOPT_URL => $url,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $inviteobj]);
$response = curl_exec( $ch );
$works=strpos($response,'{"code":' );
if ($works === false) return "";
file_put_contents(INVITE_FILE,$response);
curl_close( $ch );
return $response;
}
你可以像这样使用这个功能。
$inviteobj = [
/*
* How long link should last (0 for forever)
*/
"max_age" => 0,
/*
* The total users that can use the invite (here I use 1)
*/
"max_uses" => 1,
];
$r=invite_discord($inviteobj);
$inviteresp=json_decode($r,true);
$code=$inviteresp["code"];
echo "Invite Code is $code\n";