Skip to content

Commit

Permalink
Fix a bug where it was impossible to find tracks after the expiration…
Browse files Browse the repository at this point in the history
… of the client's Deezer session
  • Loading branch information
Evilur committed Dec 26, 2022
1 parent df47829 commit 689b4dc
Show file tree
Hide file tree
Showing 5 changed files with 25 additions and 20 deletions.
6 changes: 3 additions & 3 deletions src/main/java/bragi/Bragi.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import bragi.core.Settings;
import bragi.core.EventHandler;
import bragi.core.Player;
import bragi.core.source.deezer.DeezerMethods;
import bragi.core.source.deezer.DeezerClient;
import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.JDABuilder;
import net.dv8tion.jda.api.entities.Guild;
Expand All @@ -15,8 +15,8 @@ public final class Bragi {
public static HashMap<Guild, Player> Players = new HashMap<>(); //Инициализированные сервера

public static void main(String[] args) throws Exception {
Settings.initialize(); //Инициализируем настройки
DeezerMethods.initializeDeezer(); //Подключаемся к серверам Deezer и инициализируем клиент
Settings.init(); //Инициализируем настройки
DeezerClient.init(); //Подключаемся к серверам Deezer и инициализируем клиент

//region Инициализация бота
JDA bot = JDABuilder.createDefault(Settings.getBotToken()).build(); //Создаем экземпляр бота
Expand Down
7 changes: 1 addition & 6 deletions src/main/java/bragi/core/Settings.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,6 @@
package bragi.core;

import org.json.JSONObject;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Properties;
Expand All @@ -31,7 +26,7 @@ public static String getPrefix() {
}

/* Метод для инициализирования переменных */
public static void initialize() throws Exception {
public static void init() throws Exception {
/* !!! Файл bragi.ini в корневом каталоге репозитория - это шаблон для файла '~/.config/bragi.ini' !!! */
try { //Пытаемся прочитать файл конфигурации
Path path = Paths.get(System.getProperty("user.home") + "/.config/bragi.ini"); //Путь к файлу конфигурации
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/bragi/core/event/GetNextTrack.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import bragi.Bragi;
import bragi.core.Player;
import bragi.core.source.deezer.DeezerMethods;
import bragi.core.source.deezer.DeezerClient;
import bragi.core.util.TrackInfo;
import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
Expand Down Expand Up @@ -80,7 +80,7 @@ private static String eval(Player player, int trackNumber, EmbedBuilder embed) {

try { //На всякий случай делаем еще одну проверку
/* Заменяем предыдущий трек на новый */
trackInfo = DeezerMethods.searchTrack(trackInfo.getSearchRequest(),
trackInfo = DeezerClient.searchTrack(trackInfo.getSearchRequest(),
Integer.parseInt(trackInfo.getNextTrackInSearchResults()));
playlist.set(trackNumber, trackInfo);

Expand Down
6 changes: 3 additions & 3 deletions src/main/java/bragi/core/event/PlayTrack.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import bragi.Bragi;
import bragi.core.Methods;
import bragi.core.Player;
import bragi.core.source.deezer.DeezerMethods;
import bragi.core.source.deezer.DeezerClient;
import bragi.core.util.TrackInfo;
import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
Expand Down Expand Up @@ -77,7 +77,7 @@ public static void run(MessageReceivedEvent event, String argument) {
}
} else { //Если вложений нет, работаем с аргументом
try { //Пытаемся найти трек на сервере по запросу
TrackInfo trackInfo = DeezerMethods.searchTrack(argument, 0); //Получаем инфо трека
TrackInfo trackInfo = DeezerClient.searchTrack(argument, 0); //Получаем инфо трека
try {
/* Пытаемся подключиться к голосовому каналу, если надо */
if (needToJoin) {
Expand Down Expand Up @@ -120,7 +120,7 @@ public static void run(SlashCommandInteractionEvent event) {
}

try { //Пытаемся найти трек на сервере по запросу
TrackInfo trackInfo = DeezerMethods.searchTrack(Objects.requireNonNull(event.getOption("query"))
TrackInfo trackInfo = DeezerClient.searchTrack(Objects.requireNonNull(event.getOption("query"))
.getAsString(), 0); //Получаем инфо трека

/* Пытаемся подключиться к голосовому каналу, если надо */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

import java.io.*;

public final class DeezerMethods {
public final class DeezerClient {
/* Идентификатор сессии пользователя */
private static String sessionId;
/* Лицензионный токен пользователя Deezer */
Expand All @@ -16,9 +16,12 @@ public final class DeezerMethods {
private static WebClient webClient;

/** Метод для инициализации Deezer клиента */
public static void initializeDeezer() {
/* Объявляем переменные для создания запроса на сервер Deezer для вытаскивания токена лицензии и идентификатора пользователя */
String requestUrl = "https://www.deezer.com/ajax/gw-light.php?version=8.32.0&api_key=ZAIVAHCEISOHWAICUQUEXAEPICENGUAFAEZAIPHAELEEVAHPHUCUFONGUAPASUAY&output=3&input=3&buildId=ios12_universal&screenHeight=480&screenWidth=320&lang=en&method=deezer.getUserData&api_version=1.0&api_token";
public static void init() {
/* Объявляем переменные для создания запроса на сервер для получения токена лицензии и id пользователя */
String requestUrl = "https://www.deezer.com/ajax/gw-light.php?version=8.32.0&api_key=" +
"ZAIVAHCEISOHWAICUQUEXAEPICENGUAFAEZAIPHAELEEVAHPHUCUFONGUAPASUAY&output=3&input=3&buildId=" +
"ios12_universal&screenHeight=480&screenWidth=320&lang=en&method=deezer.getUserData&api_version=" +
"1.0&api_token";
String requestBody = String.format("{arl=\"%s\"}", Settings.getDeezerArl());

try {
Expand All @@ -28,7 +31,8 @@ public static void initializeDeezer() {

/* Присваиваем переменным их законные значения */
sessionId = jsonObject.getJSONObject("results").getString("SESSION_ID");
licenseToken = jsonObject.getJSONObject("results").getJSONObject("USER").getJSONObject("OPTIONS").getString("license_token");
licenseToken = jsonObject.getJSONObject("results").getJSONObject("USER")
.getJSONObject("OPTIONS").getString("license_token");
} catch (Exception ignore) { }
}

Expand All @@ -38,16 +42,22 @@ public static TrackInfo searchTrack(String trackTitle, int trackIndex) throws Ex
String requestUrl = String.format("https://api.deezer.com/1.0/gateway.php?api_key=ZAIVAHCEISOHWAICUQUEXAEPICENGUAFAEZAIPHAELEEVAHPHUCUFONGUAPASUAY&output=3&input=3&sid=%s&method=search.music", sessionId);
String requestBody = String.format("{\"query\":\"%s\",\"nb\":1,\"output\":\"TRACK\",\"filter\":\"TRACK\",\"start\":%d}", trackTitle, trackIndex);


/* Делаем запрос на сервер Deezer */
JSONObject jsonObject = webClient.sendRequest(requestUrl, requestBody);

/* Если сессия клиента закончилась, обновляем ее и повторяем запрос */
if (jsonObject.get("error").toString().contains("NEED_API_AUTH_REQUIRED")) {
DeezerClient.init();
return searchTrack(trackTitle, trackIndex);
}

/* Получаем количество треков, найденных по поисковому запросу. Если не было найдено подходящих треков, выбрасываем исключение */
int totalOfSearchResults = jsonObject.getJSONObject("results").getInt("total");
if (totalOfSearchResults == 0)
throw new IOException("No search results");

JSONObject trackObject = jsonObject.getJSONObject("results").getJSONArray("data").getJSONObject(0);

TrackInfo trackInfo = new TrackInfo(); //Сюда будем записывать результат

/* Устанавливаем информацию о треке */
Expand Down

0 comments on commit 689b4dc

Please sign in to comment.