Skip to content

Commit

Permalink
Merge branch 'release/0.7.3'
Browse files Browse the repository at this point in the history
  • Loading branch information
kosugikun committed Sep 17, 2022
2 parents e402e51 + f6af294 commit 5aa9c44
Show file tree
Hide file tree
Showing 9 changed files with 113 additions and 34 deletions.
4 changes: 1 addition & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,7 @@ JMusicBotは、シンプルでかつ操作性の良いUIを使用しています
* ニコニコ動画、YouTubeや、Soundcloudなどを含む多くのサイトをサポート(ニコニコ動画、SoundCloud側の仕様変更のため再生できない楽曲があります。)
* 多数のオンラインラジオ/ストリームをサポート
* ローカルファイルをサポート
*再生リストのサポート(web/youtube/ニコニコ動画/local)

※ 現在、ニコニコ動画の再生はサポートしていません。
* 再生リストのサポート(web/youtube/ニコニコ動画/local)

# セットアップ

Expand Down
29 changes: 29 additions & 0 deletions appveyor.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
image: ubuntu

install:
- sh: sudo add-apt-repository --yes ppa:rpardini/adoptopenjdk
- sh: sudo apt-get update
- sh: sudo apt-get install -y adoptopenjdk-11-jdk-hotspot-installer
- sh: sudo apt install adoptopenjdk-11-jdk-hotspot-set-default
#/usr/lib/jvm/adoptopenjdk-11-jdk-hotspot
- sh: export JAVA_HOME=/usr/lib/jvm/adoptopenjdk-11-jdk-hotspot
- sh: echo $JAVA_HOME
- sh: export PATH=${PATH}

before_build:
- mvn -v

build_script:
- mvn clean package -DskipTests

test_script:
- mvn install verify

on_finish:
- sh: |
find "$APPVEYOR_BUILD_FOLDER" -type f -name 'TEST*.xml' -print0 | xargs -0 -I '{}' curl -F 'file=@{}' "https://ci.appveyor.com/api/testresults/junit/$APPVEYOR_JOB_ID"
artifacts:
- path: "**/target/*.?ar"

version: "0.7.3.{build}"
5 changes: 3 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<groupId>com.jagrosh</groupId>
<artifactId>JMusicBot</artifactId>
<!-- バージョン装飾子参考の参考に: https://kengotoda.gitbooks.io/what-is-maven/deploy/snapshot-and-stable.html -->
<version>0.7.1</version>
<version>0.7.3</version>
<packaging>jar</packaging>

<repositories>
Expand Down Expand Up @@ -47,7 +47,7 @@
<dependency>
<groupId>com.github.Cosgy-Dev</groupId>
<artifactId>lavaplayer-fork</artifactId>
<version>original-3a8f565d48-1</version>
<version>original-35a2bffefb-1</version>
</dependency>
<!--
<dependency>
Expand Down Expand Up @@ -240,6 +240,7 @@
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<kotlin.version>1.6.10</kotlin.version>
<revision>SNAPSHOT</revision>
</properties>
</project>

10 changes: 10 additions & 0 deletions src/main/java/com/jagrosh/jmusicbot/BotConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@ public class BotConfig {
private String searchingEmoji;
private String nicoEmail;
private String nicoPass;
private String ytEmail;
private String ytPass;
// [JMusicBot-JP] added useNicoNico, changeNickName, pauseNoUsers, resumeJoined, stopNoUsers, cosgyDevHost, helpToDm, officialInvite
private boolean useNicoNico, changeNickName, stayInChannel, pauseNoUsers, resumeJoined, stopNoUsers, songInGame, npImages, updatealerts, useEval, dbots, cosgyDevHost, helpToDm, autoStopQueueSave, auditCommands, officialInvite, useinvitecommand;
private long owner, maxSeconds, aloneTimeUntilStop;
Expand Down Expand Up @@ -124,6 +126,9 @@ public void load() {
auditCommands = config.getBoolean("auditcommands");
officialInvite = config.getBoolean("officialinvite");
useinvitecommand = config.getBoolean("useinvitecommand");
ytEmail = config.getString("ytemail");
ytPass = config.getString("ytpass");

cosgyDevHost = false;
// [JMusicBot-JP] End

Expand Down Expand Up @@ -331,6 +336,11 @@ public String getNicoNicoEmailAddress() {
public String getNicoNicoPassword() {
return nicoPass;
}

public String getYouTubeEmailAddress(){return ytEmail;}

public String getYouTubePassword(){return ytPass; }

// [JMusicBot-JP] End

public boolean getCosgyDevHost() {
Expand Down
39 changes: 32 additions & 7 deletions src/main/java/com/jagrosh/jmusicbot/audio/AudioHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,8 @@
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.entities.User;
import org.json.JSONObject;
import org.json.XML;

import java.awt.*;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.HashSet;
import java.util.LinkedList;
Expand Down Expand Up @@ -234,15 +231,41 @@ public Message getNowPlaying(JDA jda) throws Exception {
+ FormatUtil.volumeIcon(audioPlayer.getVolume()));

} else {
if (rm.getOwner() != 0L) {
User u = guild.getJDA().getUserById(rm.user.id);
if (u == null)
eb.setAuthor(rm.user.username + "#" + rm.user.discrim, null, rm.user.avatar);
else
eb.setAuthor(u.getName() + "#" + u.getDiscriminator(), null, u.getEffectiveAvatarUrl());
}
try {
eb.setTitle(track.getInfo().title, track.getInfo().uri);
} catch (Exception e) {
eb.setTitle(track.getInfo().title);
}

if (track instanceof YoutubeAudioTrack && manager.getBot().getConfig().useNPImages()) {
eb.setThumbnail("https://img.youtube.com/vi/" + track.getIdentifier() + "/maxresdefault.jpg");
}

String titleUrl = GensokyoInfoAgent.getInfo().getMisc().getCirclelink().equals("") ?
if (track.getInfo().author != null && !track.getInfo().author.isEmpty())
eb.setFooter("出典: " + track.getInfo().author, null);

double progress = (double) audioPlayer.getPlayingTrack().getPosition() / track.getDuration();
eb.setDescription((audioPlayer.isPaused() ? JMusicBot.PAUSE_EMOJI : JMusicBot.PLAY_EMOJI)
+ " " + FormatUtil.progressBar(progress)
+ " `[" + FormatUtil.formatTime(track.getPosition()) + "/" + FormatUtil.formatTime(track.getDuration()) + "]` "
+ FormatUtil.volumeIcon(audioPlayer.getVolume()));
/*String titleUrl = GensokyoInfoAgent.getInfo().getMisc().getCirclelink().equals("") ?
"https://gensokyoradio.net/" :
GensokyoInfoAgent.getInfo().getMisc().getCirclelink();
String albumArt = GensokyoInfoAgent.getInfo().getMisc().getAlbumart().equals("") ?
String albumArt = "";
if(manager.getBot().getConfig().useNPImages()){
albumArt = GensokyoInfoAgent.getInfo().getMisc().getAlbumart().equals("") ?
"https://cdn.discordapp.com/attachments/240116420946427905/373019550725177344/gr-logo-placeholder.png" :
"https://gensokyoradio.net/images/albums/original/" + GensokyoInfoAgent.getInfo().getMisc().getAlbumart();

}
eb.setTitle(GensokyoInfoAgent.getInfo().getSonginfo().getTitle(), titleUrl)
.addField("アルバム", GensokyoInfoAgent.getInfo().getSonginfo().getAlbum(), true)
.addField("アーティスト", GensokyoInfoAgent.getInfo().getSonginfo().getArtist(), true)
Expand All @@ -259,11 +282,13 @@ public Message getNowPlaying(JDA jda) throws Exception {
+ FormatUtil.volumeIcon(audioPlayer.getVolume()));
eb.addField("リスナー", Integer.toString(GensokyoInfoAgent.getInfo().getServerinfo().getListeners()), true)
.setImage(albumArt)
.setColor(new Color(66, 16, 80))
.setFooter("コンテンツはgensokyoradio.netによって提供されています。\n" +
"GRロゴはGensokyo Radioの商標です。" +
"\nGensokyo Radio is © LunarSpotlight.", null);
if(manager.getBot().getConfig().useNPImages()){
eb.setImage(albumArt);
}*/
}

return mb.setEmbeds(eb.build()).build();
Expand Down
6 changes: 6 additions & 0 deletions src/main/java/com/jagrosh/jmusicbot/audio/PlayerManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,12 @@ public void init() {
);
}

registerSourceManager(new YoutubeAudioSourceManager(
true,
bot.getConfig().getYouTubeEmailAddress(),
bot.getConfig().getYouTubePassword()
));

TransformativeAudioSourceManager.createTransforms(bot.getConfig().getTransforms()).forEach(this::registerSourceManager);
AudioSourceManagers.registerRemoteSources(this);
AudioSourceManagers.registerLocalSource(this);
Expand Down
35 changes: 21 additions & 14 deletions src/main/java/dev/cosgy/agent/GensokyoInfoAgent.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,15 +23,14 @@

import java.net.HttpURLConnection;
import java.net.URI;
import java.net.URL;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

public class GensokyoInfoAgent extends Thread {
private static final Logger log = LoggerFactory.getLogger(GensokyoInfoAgent.class);
private static final int INTERVAL_MILLIS = 60000; // 5 secs
private static long INTERVAL_MILLIS = 1000; // 5 secs
private static ResultSet info = null;
private static String lastSong = "";

Expand All @@ -44,17 +43,25 @@ public GensokyoInfoAgent() {
private static ResultSet fetch() throws Exception {
HttpURLConnection connection = null;
try{

if(info != null){
if(info.getSongtimes().getPlayed() < info.getSongtimes().getDuration()){
return info;
}
}
// XMLの取得元URL設定
//URL url = new URL("https://gensokyoradio.net/xml");

System.setProperty("http.agent", "Chrome");

HttpRequest req = HttpRequest.newBuilder(new URI("https://gensokyoradio.net/json"))
.GET()
.timeout(Duration.ofSeconds(10))
.setHeader("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36")
.setHeader("accept-language", "ja,en-US;q=0.9,en;q=0.8")
.build();

HttpClient client = HttpClient.newBuilder()
.version(HttpClient.Version.HTTP_1_1)
.followRedirects(HttpClient.Redirect.NORMAL)
.connectTimeout(Duration.ofSeconds(10))
.build();

Expand All @@ -68,6 +75,7 @@ private static ResultSet fetch() throws Exception {
return info;
case 403:
log.info("幻想郷ラジオの情報取得エラー(403)");
log.info("Body:{}", res.body());
return null;
default:
log.info("幻想郷ラジオの情報取得エラー(other)");
Expand All @@ -82,7 +90,7 @@ private static ResultSet fetch() throws Exception {
}

public static ResultSet getInfo() throws Exception {
return info == null ? fetch() : info;
return fetch();
}

@Override
Expand All @@ -91,17 +99,16 @@ public void run() {

//noinspection InfiniteLoopStatement
while (true) {

try {
fetch();
sleep(INTERVAL_MILLIS);
} catch (Exception e) {
log.error("情報を取得中に例外が発生しました!", e);
try {
sleep(1000);
} catch (InterruptedException e1) {
log.error("エージェントの例外後にスリープ中に中断されました", e);
break;
sleep(1000);
// 現在再生中の曲が終わるまで幻想郷ラジオに曲の情報をリクエストしない。
// DDos攻撃になってしまうので...
if (info != null) {
info.getSongtimes().setPlayed(info.getSongtimes().getPlayed() + 1);
}
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
Expand Down
8 changes: 4 additions & 4 deletions src/main/resources/logback.xml
Original file line number Diff line number Diff line change
Expand Up @@ -40,18 +40,18 @@
</encoder>
</appender>

<root level="INFO">
<!--<root level="INFO">
<appender-ref ref="Simple"/>
<appender-ref ref="File"/>
</root>
<!--<root level="DEBUG">
<root level="DEBUG">
<appender-ref ref="Simple"/>
<appender-ref ref="File"/>
</root>-->

<!--<root level="TRACE">
<root level="TRACE">
<appender-ref ref="Simple"/>
<appender-ref ref="File"/>
</root>-->
</root>

</configuration>
11 changes: 7 additions & 4 deletions src/main/resources/reference.conf
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,6 @@
// Notepad++などのエディタで編集する事を推奨します。
// ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

// この設定値はプログラム側で設定するので絶対に変更しないようにお願いします。
// 変更した場合、今後のアップデートで正しくファイル内容の更新がされなくなる可能性があります。
version = 1

// この項目は、Botがログインするためのトークンを設定します
// 入力するトークンはBotトークンでなければなりません(ユーザートークンは機能しません)
// Botトークンを取得する方法がわからない場合は、こちらのガイドを参照してください。
Expand Down Expand Up @@ -120,6 +116,13 @@ useniconico = false
nicomail = "[email protected]"
nicopass = "0123456789"

// YouTubeにログインして使用したい際はこちらにログイン情報を入力してください。
// YouTubeの再生は、ログイン無しで行なえます。ですが、YouTubeプレミアム限定動画などは
// 再生する際にプレミアムに登録したアカウントが必要になります。
// 使用するアカウントが2段階認証を有効にしている場合はアプリパスワードを使用してください。
ytemail = ""
ytpass = ""

// この項目は、1曲の最大の長さを設定します。
// 0以下に設定すると、無制限になります。
// この制限は、任意の場所から曲が読み込まれた時に使用されます。
Expand Down

0 comments on commit 5aa9c44

Please sign in to comment.