我已经在使用Discord机器人几天了。
最初只使用简单的命令等。但是慢慢地,我也致力于音乐机器人这一主题。
我还为此使用了YouTube数据API,到目前为止一切正常。但是,我现在想合并一个Youtube搜索命令或将其构建到另一个(播放命令)中。我已经有一半的搜索命令。
到目前为止,您可以进行 $ play(歌曲标题)
,将找到找到的第一条曲目。
但是,我希望能够看到前10个搜索结果,然后在它们之间进行选择。
我已经找到了如何显示搜索结果的方法,但是在输入另一个命令之后,现在我需要一些如何输入命令的帮助。
因此,您输入:$ play褪色
然后出现一个普通的EmbedBuilder并向您显示搜索结果,然后您可以通过输入1、2、3、4、5、6、7、8、9或10来选择所需的曲目。
这是代码:
public class PlayCommand implements ServerCommand {
private final YouTube youTube;
public PlayCommand() {
YouTube temp = null;
try {
temp = new YouTube.Builder(
GoogleNetHttpTransport.newTrustedTransport(),
JacksonFactory.getDefaultInstance(),
null
)
.setApplicationName("JDA Discord Bot")
.build();
} catch (Exception e) {
e.printStackTrace();
}
youTube = temp;
}
@Override
public void performCommand(List<String> args, Member m, TextChannel channel, Message message) throws RiotApiException {
String input = String.join(" ", args.subList(1, args.size() - 1));
if (!isUrl(input)) {
String ytSearched = searchYoutube(channel, input);
if (ytSearched == null) {
channel.sendMessage("Keine Ergebnisse!").queue();
return;
}
input = ytSearched;
}
PlayerManager manager = PlayerManager.getInstance();
manager.loadAndPlay(channel, input);
manager.getGuildMusicManager(channel.getGuild()).player.setVolume(100);
}
private boolean isUrl(String input) {
try {
new URL(input);
return true;
} catch (MalformedURLException ignored) {
return false;
}
}
@Nullable
private String searchYoutube(TextChannel channel, String input) {
String youtubeKey = "AIzaSyDoQ4OInMTYth7hdlWwQSIaHuxpxxv7eJs";
try {
List<SearchResult> results = youTube.search()
.list("id,snippet")
.setQ(input)
.setMaxResults(10L)
.setType("video")
.setFields("items(id/kind,id/videoId,snippet/title,snippet/thumbnails/default/url)")
.setKey(youtubeKey)
.execute()
.getItems();
if (!results.isEmpty()) {
String videoId = results.get(0).getId().getVideoId();
/*EmbedBuilder builder = new EmbedBuilder();
builder.setTitle("Suchergebnisse");
builder.setColor(Color.RED);
builder.setDescription( "1. " + results.get(0).getSnippet().getTitle() + "\n" +
"2. " + results.get(1).getSnippet().getTitle() + "\n" +
"3. " + results.get(2).getSnippet().getTitle() + "\n" +
"4. " + results.get(3).getSnippet().getTitle() + "\n" +
"5. " + results.get(4).getSnippet().getTitle() + "\n" +
"6. " + results.get(5).getSnippet().getTitle() + "\n" +
"7. " + results.get(6).getSnippet().getTitle() + "\n" +
"8. " + results.get(7).getSnippet().getTitle() + "\n" +
"9. " + results.get(8).getSnippet().getTitle() + "\n" +
"10. " + results.get(9).getSnippet().getTitle());
channel.sendMessage(builder.build()).queue();
*/
return "https://www.youtube.com/watch?v=" + videoId;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
答案 0 :(得分:0)
我认为您正在寻找EventWaiter。 使用JDA-Utilities,您可以实现自己想要的。
您基本上只是在等待一个事件,检查它是否适合您的用例(例如:是一个特定事件,或包含特定文本) 查看有关stackoverflow answer的有关EventWaiter的信息,并将其添加为EventListener。
例如,您想检查接收到的文本是否是youtube搜索结果的一部分。另外,不要忘记接受答案有时间限制。