sleepfinance / laravel-restcord
Requires
- php: ^7.3|^8.0|^8.1
- laravel/socialite: ^5.6
- restcord/restcord: dev-develop
Requires (Dev)
- barryvdh/laravel-ide-helper: ^2.12
- illuminate/contracts: ^6.0|^7.0|^8.0|^9.0|^10.0
- illuminate/support: ^6.0|^7.0|^8.0|^9.0|^10.0
- mockery/mockery: *
- php-coveralls/php-coveralls: ^2.5
- phpunit/phpunit: ^9
- socialiteproviders/discord: *
- symfony/var-dumper: *
- vlucas/phpdotenv: *
README
Sleep.finance 是一个创新的加密货币启动平台,旨在帮助新的加密项目轻松起步。该平台提供了一套全面的工具和功能,帮助从开始到结束管理项目,包括筹资、营销和社区参与。Sleep.finance 为您的项目启动提供一个安全、可靠且用户友好的平台。无论您是经验丰富的加密货币企业家还是初出茅庐,Sleep.finance 都是您下一个伟大想法的完美启动平台。今天加入我们,将您的加密项目提升到新的高度!
laravel-restcord (Laravel 8)
该存储库是 more-cores/laravel-restcord 的分支,已更新以兼容 PHP 8 和 Laravel 的最新版本。
一个用于 Restcord 的小型、流畅的包装器。
README 内容
功能
- 将 Restcord 集成到 Laravel Socialite,因此当前 OAuth 用户用于 API 调用(当使用
sessionHasDiscordToken
中间件时) - 通过 OAuth 处理 Webhooks 的创建(无需机器人)
- 通过 OAuth 处理将机器人添加到公会(无需 WebSocket 连接)
- 获取成员与公会的关联信息(角色、权限等)
安装
- 安装包
composer require more-cores/laravel-restcord:2.*
-
定义环境变量
DISCORD_BOT_TOKEN
。 -
为需要使用当前 OAuth 用户凭证与 Discord API 交互的路由添加中间件
sessionHasDiscordToken
。这是必需的,因为在 ServiceProvider 中不可用会话信息。 -
对于 Laravel <= 5.4,请在
config/app.php
中注册 service provider
'providers' => [ ... LaravelRestcord\ServiceProvider::class, ]
环境变量
DISCORD_BOT_KEY
DISCORD_BOT_SECRET
DISCORD_BOT_TOKEN
DISCORD_KEY
DISCORD_SECRET
机器人密钥/秘密将用于添加机器人或创建 Webhook 相关的回调端点,以及当应用程序在控制台运行时,如队列工作者和 cron。
用法
本文档假定您的用户通过 Discord 驱动 登录 Laravel Socialite。
在此文档中,您看到 $discord
时,它假定是 LaravelRestcord\Discord\Discord::class
的一个实例,这是从 Laravel 的 IOC 容器中可用的。
公会
获取当前用户可访问的公会列表
$discord->guilds() // Guild[]
获取用户与公会的关联信息
$guild->userCan(Permission::KICK_MEMBERS); // bool - uses permissions of the currently oauth'd user $member = $guild->getMemberById($discordUserId); // \LaravelRestcord\Discord\Member $member->roles(); // \LaravelRestcord\Discord\Role[] $member->joinedAt(); // Carbon
将机器人添加到公会
此实现使用 高级机器人授权 流程将机器人添加到公会。您应该在应用的设置中启用 需要 OAuth2 代码授权 选项。
use LaravelRestcord\Discord\HandlesBotAddedToGuild; use Illuminate\Http\RedirectResponse; class BotAddedToDiscordGuild { use HandlesBotAddedToGuild; public function botAdded(Guild $guild) : RedirectResponse { // do something with the guild information the bot was added to return redirect('/to/this/page'); } }
接下来,将绑定添加到您的 AppServiceProvider
中,这样当用户返回您的网站时,包知道将公会信息传递给哪个类。
$this->app->bind(HandlesBotAddedToGuild::class, BotAddedToDiscordGuild::class);
现在您可以将用户引导到 Discord 网站,让他们选择要将机器人添加到的公会
public function redirecToAddBot(Guild $guild = null) { // Reference https://discordapi.com/permissions.html to determine // the permissions your bot needs Discord::redirecToAddBot($permissions, $guild->?id()??null); }
如果您想在 UI 中显示按钮
public function redirecToAddBot(Guild $guild = null) { // Reference https://discordapi.com/permissions.html to determine // the permissions your bot needs $url = Discord::addBotUrl($permissions, $guild->?id()??null); return $url; // show this in href link }
此包处理路由需求,但您需要将回调 URL 白名单,这样它才能正常工作。将 http://MY-SITE.com/discord/bot-added
添加到您的 应用的跳转 URI。
当机器人被添加到公会时,您的处理程序将被触发。
一旦建立了 WebSocket 连接,您就可以通过此机器人发送消息。它只需要做一次,因此通常使用下面的代码片段来完成
"use strict"; var TOKEN="PUT YOUR TOKEN HERE"; fetch("https://discord.com/api/v7/gateway").then(function(a){return a.json()}).then(function(a){var b=new WebSocket(a.url+"/?encoding=json&v=6");b.onerror=function(a){return console.error(a)},b.onmessage=function(a){try{var c=JSON.parse(a.data);0===c.op&&"READY"===c.t&&(b.close(),console.log("Successful authentication! You may now close this window!")),10===c.op&&b.send(JSON.stringify({op:2,d:{token:TOKEN,properties:{$browser:"b1nzy is a meme"},large_threshold:50}}))}catch(a){console.error(a)}}});
创建 Webhooks
因为我们使用 OAuth 创建 Webhooks,所以用户将被引导到 Discord 网站,以选择公会/频道。此包处理解释请求/响应生命周期,因此您只需构建一个处理程序即可。
use LaravelRestcord\Discord\HandlesDiscordWebhooksBeingCreated; use Illuminate\Http\RedirectResponse; class Subscribe { use HandlesDiscordWebhooksBeingCreated; public function webhookCreated(Webhook $webhook) : RedirectResponse { // $webhook->token(); // Here you should save the token for use later when activating the webhook return redirect('/to/this/page'); } }
接下来,将绑定添加到您的 AppServiceProvider
中,这样当用户返回您的网站时,包知道将 webhook 数据传递给哪个类。
$this->app->bind(HandlesDiscordWebhooksBeingCreated::class, DiscordChannelAdded::class);
现在您可以将用户引导到 Discord 网站,以创建 webhook
public function createWebhook() { // redirects the user to Discord's interface for selecting // a guild and channel for the webhook Discord::redirectToCreateWebhook(); //for url $url = Discord::addWebHookUrl(); }
此包处理路由需求,但您需要将回调 URL 白名单,这样它才能正常工作。将 http://MY-SITE.com/discord/create-webhook
添加到您的 应用的跳转 URI。
当 webhook 被创建时,您的处理程序将被触发。