Skip to content

Commit f1f7dab

Browse files
author
Justin
committed
added api conn to backend / refresh token automatically
1 parent 163ca23 commit f1f7dab

File tree

8 files changed

+75
-181
lines changed

8 files changed

+75
-181
lines changed

bot.php

+8-5
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,14 @@
1919
$dotenv = Dotenv::createImmutable(__DIR__);
2020
$dotenv->load();
2121

22-
$discord = new Discord([
23-
'token' => $_ENV['DISCORD_BOT_TOKEN'],
24-
'intents' => Intents::getDefaultIntents()
25-
]);
26-
22+
try {
23+
$discord = new Discord([
24+
'token' => $_ENV['DISCORD_BOT_TOKEN'],
25+
'intents' => Intents::getDefaultIntents()
26+
]);
27+
} catch (\Discord\Exceptions\IntentException $e) {
28+
echo $e->getMessage();
29+
}
2730

2831

2932
$discord->on('ready', function (Discord $discord) {

index.php

-29
This file was deleted.

src/Commands/Register.php

-52
This file was deleted.

src/Commands/Spotify/GetLatestSong.php

+36-9
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace Bot\Commands\Spotify;
44

55
use Bot\Helpers\ErrorHandler;
6+
use GuzzleHttp\Client;
67
use SpotifyWebAPI\SpotifyWebAPI;
78
use SpotifyWebAPI\Session;
89

@@ -25,29 +26,55 @@ public function getOptions(): array
2526

2627
public function handle($args, $discord, $username, $user_id): array
2728
{
28-
$users = json_decode(file_get_contents(__DIR__ . '/../../../users.json'), true);
2929

30-
if (!isset($users[$user_id]['access_token'])) {
31-
return ErrorHandler::handle('User is not authenticated with Spotify');
32-
}
30+
$api_url = $_ENV['API_URL'];
31+
$secure_token = $_ENV['SECURE_TOKEN'];
32+
$discord_id = $user_id;
33+
34+
$link = "$api_url?$discord_id&secure_token=$secure_token";
35+
36+
$client = new Client();
37+
38+
$response = $client->request('GET', $link);
39+
$response = json_decode($response->getBody(), true);
40+
41+
$users = $response['data'][0]['attributes'];
42+
$discord_id = $users['discord_id'];
43+
$accessToken = $users['spotify_access_token'];
3344

34-
$accessToken = $users[$user_id]['access_token'];
3545
$api = new SpotifyWebAPI();
3646
$api->setAccessToken($accessToken);
3747

3848
try {
3949
$me = $api->me();
40-
} catch (\Exception $e) {
41-
return ErrorHandler::handle('Failed to get user info from Spotify: ' . $e->getMessage());
50+
} catch (\SpotifyWebAPI\SpotifyWebAPIException $e) {
51+
if ($e->getMessage() == 'The access token expired') {
52+
$session = new Session(
53+
$_ENV['SPOTIFY_CLIENT_ID'],
54+
$_ENV['SPOTIFY_CLIENT_SECRET'],
55+
$_ENV['SPOTIFY_REDIRECT_URI']
56+
);
57+
$session->refreshAccessToken($users['spotify_refresh_token']);
58+
$accessToken = $session->getAccessToken();
59+
$refreshToken = $session->getRefreshToken();
60+
$link = "$api_url?$discord_id&secure_token=$secure_token&spotify_access_token=$accessToken&spotify_refresh_token=$refreshToken";
61+
$client->request('GET', $link);
62+
63+
$api->setAccessToken($accessToken);
64+
$me = $api->me();
65+
echo 'Access token refreshed for ' . $me->display_name . PHP_EOL;
66+
} else {
67+
return ErrorHandler::handle($e, $discord);
68+
}
4269
}
4370

4471
$tracks = $api->getMySavedTracks([
4572
'limit' => 10
4673
]);
4774

4875
$embed = [
49-
'title' => 'Latest songs added by '.$me->display_name,
50-
'description' => 'Here are the latest songs added by '.$me->display_name,
76+
'title' => 'Latest songs added by ' . $me->display_name,
77+
'content' => '',
5178
'color' => hexdec('34ebd8'),
5279
'fields' => []
5380
];

src/Commands/Spotify/Spotify.php

+1-65
Original file line numberDiff line numberDiff line change
@@ -30,76 +30,12 @@ public function handle($args, $discord, $username, $user_id)
3030
$_ENV['SPOTIFY_REDIRECT_URI']
3131
);
3232

33-
// request authorization
34-
$options = [
35-
'scope' => [
36-
'user-read-email',
37-
'user-read-private',
38-
'user-library-read',
39-
'user-top-read',
40-
'user-read-recently-played',
41-
'user-read-playback-state',
42-
'user-read-currently-playing',
43-
'user-follow-read',
44-
'user-read-playback-position',
45-
'user-read-recently-played',
46-
'user-read-playback-state',
47-
'user-modify-playback-state',
48-
'user-read-currently-playing',
49-
'user-read-playback-position',
50-
'user-read-recently-played',
51-
'user-read-playback-state',
52-
'user-modify-playback-state',
53-
'user-read-currently-playing',
54-
'user-read-playback-position',
55-
'user-read-recently-played',
56-
'user-read-playback-state',
57-
'user-modify-playback-state',
58-
'user-read-currently-playing',
59-
'user-read-playback-position',
60-
'user-read-recently-played',
61-
'user-read-playback-state',
62-
'user-modify-playback-state',
63-
'user-read-currently-playing',
64-
'user-read-playback-position',
65-
'user-read-recently-played',
66-
'user-read-playback-state',
67-
'user-modify-playback-state',
68-
'user-read-currently-playing',
69-
'user-read-playback-position',
70-
'user-read-recently-played',
71-
'user-read-playback-state',
72-
'user-modify-playback-state',
73-
'user-read-currently-playing',
74-
'user-read-playback-position',
75-
'user-read-recently-played',
76-
'user-read-playback-state',
77-
'user-modify-playback-state',
78-
],
79-
];
80-
81-
$session->requestCredentialsToken($options['scope']);
82-
$accessToken = $session->getAccessToken();
83-
$refreshToken = $session->getRefreshToken();
84-
$api = new SpotifyWebAPI();
85-
$api->setAccessToken($accessToken);
86-
87-
88-
$users = json_decode(file_get_contents('users.json'), true);
89-
$users[$user_id] = [
90-
'access_token' => $accessToken,
91-
'playlist_gen' => false,
92-
];
93-
file_put_contents('users.json', json_encode($users, JSON_PRETTY_PRINT));
94-
95-
96-
$url = "https://accounts.spotify.com/authorize?client_id={$_ENV['SPOTIFY_CLIENT_ID']}&response_type=code&redirect_uri={$_ENV['SPOTIFY_REDIRECT_URI']}&scope=user-read-email%20user-read-private%20user-library-read%20user-top-read%20user-read-recently-played%20user-read-playback-state%20user-read-currently-playing%20user-follow-read%20user-read-playback-position%20user-read-recently-played%20user-read-playback-state%20user-modify-playback-state%20user-read-currently-playing%20user-read-playback-position%20user-read-recently-played%20user-read-playback-state%20user-modify-playback-state%20user-read-currently-playing%20user-read-playback-position%20user-read-recently-played%20user-read-playback-state%20user-modify-playback-state%20user-read-currently-playing%20user-read-playback-position%20user-read-recently-played%20user-read-playback-state%20user-modify-playback-state%20user-read-currently-playing%20user-read-playback-position%20user-read-recently-played%20user-read-playback-state%20user-modify-playback-state";
33+
$url = "https://accounts.spotify.com/authorize?client_id={$_ENV['SPOTIFY_CLIENT_ID']}&response_type=code&redirect_uri={$_ENV['SPOTIFY_REDIRECT_URI']}&scope=user-read-email%20user-read-private%20user-library-read%20user-top-read%20user-read-recently-played%20user-read-playback-state%20user-read-currently-playing%20user-follow-read%20user-read-playback-position%20user-read-recently-played%20user-read-playback-state%20user-modify-playback-state%20user-read-currently-playing%20user-read-playback-position%20user-read-recently-played%20user-read-playback-state%20user-modify-playback-state%20user-read-currently-playing%20user-read-playback-position%20user-read-recently-played%20user-read-playback-state%20user-modify-playback-state%20user-read-currently-playing%20user-read-playback-position%20user-read-recently-played%20user-read-playback-state%20user-modify-playback-state%20user-read-currently-playing%20user-read-playback-position%20user-read-recently-played%20user-read-playback-state%20user-modify-playback-state&state={$user_id}";
9734
return [
9835
'title' => 'Spotify Login for '.$username,
9936
'content' => "Click [here]($url) to login to spotify",
10037
'flags' => 64,
10138
'color' => hexdec('34ebd8')
10239
];
10340
}
104-
10541
}

src/Commands/Spotify/TogglePlaylistGen.php

-18
Original file line numberDiff line numberDiff line change
@@ -21,24 +21,6 @@ public function getOptions(): array
2121

2222
public function handle($args, $discord, $username, $user_id)
2323
{
24-
$users = json_decode(file_get_contents(__DIR__.'/../../../users.json'), true);
2524

26-
if (!isset($users[$user_id])) {
27-
return ErrorHandler::handle('You are not registered. Please register using /spotify');
28-
}
29-
30-
$state = $users[$user_id]['playlist_gen'];
31-
32-
$state = !$state;
33-
34-
$users[$user_id]['playlist_gen'] = $state;
35-
file_put_contents(__DIR__.'/../../../users.json', json_encode($users, JSON_PRETTY_PRINT));
36-
37-
return [
38-
'title' => 'Toggled Playlist Generator',
39-
'content' => "Current State: ".($state ? 'On' : 'Off'),
40-
'flags' => 64,
41-
'color' => hexdec('34ebd8')
42-
];
4325
}
4426
}

src/Events/MessageListener.php

+2-3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Bot\Events;
44

5+
use Bot\Helpers\TokenHandler;
56
use Discord\Discord;
67
use Discord\Http\Exceptions\NoPermissionsException;
78
use Discord\Parts\Channel\Message;
@@ -16,9 +17,7 @@ public function handle(Message $message, Discord $discord): void
1617
{
1718
$channel = $discord->getChannel($message->channel_id);
1819
if ($message->author->id != $discord->id) {
19-
if ($message->author->id == "1103661771316805663") {
20-
$channel->sendMessage("Received Tokens: " . $message->content);
21-
}
20+
2221
}
2322
}
2423
}

src/Helpers/TokenHandler.php

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
namespace Bot\Helpers;
4+
5+
class TokenHandler
6+
{
7+
public static function storeTokens($tokens) {
8+
9+
//read the users.json file
10+
$users = file_get_contents(__DIR__ . "/../../users.json");
11+
//decode the json into an array
12+
13+
$decoded_tokens = json_decode($tokens, true);
14+
foreach ($decoded_tokens as $user_id => $user_tokens) {
15+
$user_tokens = str_replace("\\", "", $user_tokens["access_token"]);
16+
$data = array(
17+
"access_token" => $user_tokens["access_token"],
18+
"refresh_token" => $user_tokens["refresh_token"],
19+
"playlist_gen" => false
20+
);
21+
$json_data = json_encode($data);
22+
$users = json_decode($users, true);
23+
$users[$user_id] = $json_data;
24+
$users = json_encode($users);
25+
file_put_contents(__DIR__ . "/../../users.json", $users);
26+
}
27+
}
28+
}

0 commit comments

Comments
 (0)