routmoute/routmoute-discord-bundle

此包提供了对 Discord OAuth 和 API 的简单访问,适用于 Symfony 5

1.1.0 2021-02-13 19:11 UTC

This package is auto-updated.

Last update: 2024-09-27 21:21:13 UTC


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 IDCLIENT 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, discriminator
  • email - email
  • ...

bot_token

必需 Discord 提供的机器人 TOKEN