routmoute / routmoute-discord-bundle
此包提供了对 Discord OAuth 和 API 的简单访问,适用于 Symfony 5
1.1.0
2021-02-13 19:11 UTC
Requires
- php: >=7.2.5
- symfony/http-client: ^4.4|^5.2
- symfony/yaml: ^4.4|^5.2
Requires (Dev)
- symfony/framework-bundle: ^4.4|^5.2
- symfony/phpunit-bridge: ^4.4|^5.2
README
手动安装
请确保已全局安装 Composer,具体说明请参阅 Composer 文档中的 安装章节。
步骤 1: 创建配置文件
创建配置文件 config/packages/routmoute_discord.yaml
,并根据需要修改作用域
// config/packages/routmoute_discord.yaml routmoute_discord: oauth: client_id: '%env(ROUTMOUTE_DISCORD_CLIENT_ID)%' client_secret: '%env(ROUTMOUTE_DISCORD_CLIENT_SECRET)%' scope: - identify - email api: bot_token: '%env(ROUTMOUTE_DISCORD_BOT_TOKEN)%'
步骤 2: 下载包
打开命令行,进入您的项目目录,并执行以下命令以下载此包的最新稳定版本
composer require routmoute/routmoute-discord-bundle
配置
步骤 1: 创建您的 Discord 应用程序
- 访问 https://discord.com/developers/applications
- 创建新应用程序
- 复制用于下一步的
CLIENT ID
和CLIENT SECRET
- 转到
OAuth2
选项卡 - 添加重定向
https://yourDomain.domain/receiveDiscord
- 转到机器人选项卡,并复制用于下一步的
TOKEN
步骤 2: 创建您的环境变量
在您的 .env
文件中添加这些环境变量。
ROUTMOUTE_DISCORD_CLIENT_ID=YourClientId
ROUTMOUTE_DISCORD_CLIENT_SECRET=YourClientSecret
ROUTMOUTE_DISCORD_BOT_TOKEN=YourBotToken
用法(适用于 Symfony 5)
Discord OAuth
步骤 1: 在您的应用程序中创建控制器
创建控制器,例如 src/Controller/DiscordOAuthController.php
// src/Controller/DiscordOAuthController.php <?php namespace App\Controller; use Routmoute\Bundle\RoutmouteDiscordBundle\Service\RoutmouteDiscordOAuthService; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Routing\Generator\UrlGeneratorInterface; class DiscordOAuthController extends AbstractController { /** * @Route("/connectToDiscord", name="routmoute_discord_redirect", methods="GET") */ public function redirectToDiscord(RoutmouteDiscordOAuthService $oAuthService, UrlGeneratorInterface $urlGenerator): RedirectResponse { $redirectUrl = $urlGenerator->generate('routmoute_discord_receiver', [], UrlGeneratorInterface::ABSOLUTE_URL); return new RedirectResponse($oAuthService->getRedirectDiscordUrl($redirectUrl)); } /** * @Route("/receiveDiscord", name="routmoute_discord_receiver", methods="GET") */ public function receiveFromDiscordAuthorize(Request $request, RoutmouteDiscordOAuthService $oAuthService, UrlGeneratorInterface $urlGenerator): RedirectResponse { $redirectUrl = $urlGenerator->generate('routmoute_discord_receiver', [], UrlGeneratorInterface::ABSOLUTE_URL); $userData = $oAuthService->getUserData($request, $redirectUrl); // TODO: Process userData and change path_to_redirect return $this->redirectToRoute('path_to_redirect'); } }
步骤 2: 创建您的重定向按钮
在您的前端创建一个按钮,使其重定向到 routmoute_discord_redirect
路径。
例如,在 twig 模板中
<a href="{{ path('routmoute_discord_redirect') }}"> <button type="button">Link my account with discord</button> </a>
Discord API(机器人)
控制器中的示例用法
<?php namespace App\Controller; use Routmoute\Bundle\RoutmouteDiscordBundle\Service\RoutmouteDiscordApiService; class MyController extends AbstractController { public function index(RoutmouteDiscordApiService $discordAPI) { $discordId = 'theUserDiscordId'; $userInfos = $discordAPI->getUserFromDiscordId($discordId); $userInfos["id"]; $userInfos["username"]; $userInfos["discriminator"]; $userInfos["avatar"]; } }
https://discord.com/developers/docs/resources/user
参数
client_id
必需 Discord 提供的 CLIENT ID
client_secret
必需 Discord 提供的 CLIENT SECRET
scope
必需 Discord API 的作用域 - https://discord.com/developers/docs/topics/oauth2#shared-resources
identify
- discordId, avatar, username, discriminatoremail
- email- ...
bot_token
必需 Discord 提供的机器人 TOKEN