Compare commits
No commits in common. 'soundboard' and 'master' have entirely different histories.
soundboard
...
master
@ -1,92 +0,0 @@ |
|||||||
/* |
|
||||||
* Copyright (C) 2024 jimj316 |
|
||||||
* |
|
||||||
* This program is free software: you can redistribute it and/or modify |
|
||||||
* it under the terms of the GNU General Public License as published by |
|
||||||
* the Free Software Foundation, either version 3 of the License, or |
|
||||||
* (at your option) any later version. |
|
||||||
* |
|
||||||
* This program is distributed in the hope that it will be useful, |
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||||
* GNU General Public License for more details. |
|
||||||
* |
|
||||||
* You should have received a copy of the GNU General Public License |
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/ |
|
||||||
package moe.nekojimi.chords; |
|
||||||
|
|
||||||
import com.amihaiemil.eoyaml.Yaml; |
|
||||||
import com.amihaiemil.eoyaml.YamlInput; |
|
||||||
import com.amihaiemil.eoyaml.YamlMapping; |
|
||||||
import com.amihaiemil.eoyaml.YamlPrinter; |
|
||||||
import java.io.File; |
|
||||||
import java.io.FileWriter; |
|
||||||
import java.io.IOException; |
|
||||||
import java.util.*; |
|
||||||
|
|
||||||
/** |
|
||||||
* |
|
||||||
* @author jimj316 |
|
||||||
*/ |
|
||||||
public class Soundboard |
|
||||||
{ |
|
||||||
|
|
||||||
private final Chords bot; |
|
||||||
private final Map<String, Track> sounds = new HashMap<>(); |
|
||||||
|
|
||||||
public Soundboard(Chords bot) |
|
||||||
{ |
|
||||||
this.bot = bot; |
|
||||||
} |
|
||||||
|
|
||||||
public void loadYAML(File file) throws IOException |
|
||||||
{ |
|
||||||
if (!file.exists()) |
|
||||||
return; |
|
||||||
YamlInput input = Yaml.createYamlInput(file); |
|
||||||
YamlMapping mapping = input.readYamlMapping(); |
|
||||||
sounds.putAll(Util.yamlMappingToMap(mapping, (t) -> Track.fromYaml(t.asMapping()))); |
|
||||||
} |
|
||||||
|
|
||||||
public void saveYAML(File file) throws IOException |
|
||||||
{ |
|
||||||
YamlPrinter printer = Yaml.createYamlPrinter(new FileWriter(file)); |
|
||||||
printer.print(Util.mapToMapping(sounds, (t) -> t.toYaml())); |
|
||||||
} |
|
||||||
|
|
||||||
public void add(String emoji, Track t) |
|
||||||
{ |
|
||||||
t.setKept(true); |
|
||||||
sounds.put(emoji, t); |
|
||||||
} |
|
||||||
|
|
||||||
public boolean remove(String emoji) |
|
||||||
{ |
|
||||||
if (!sounds.containsKey(emoji)) |
|
||||||
return false; |
|
||||||
Track t = sounds.get(emoji); |
|
||||||
t.setKept(false); |
|
||||||
t.delete(); |
|
||||||
sounds.remove(emoji); |
|
||||||
return true; |
|
||||||
} |
|
||||||
|
|
||||||
public boolean play(String emoji) |
|
||||||
{ |
|
||||||
if (!sounds.containsKey(emoji)) |
|
||||||
return false; |
|
||||||
if (bot.getMusicHandler() == null) |
|
||||||
return false; |
|
||||||
final Track track = sounds.get(emoji); |
|
||||||
track.setKept(true); |
|
||||||
bot.getMusicHandler().play(track); |
|
||||||
return true; |
|
||||||
} |
|
||||||
|
|
||||||
public List<String> getEmoji() |
|
||||||
{ |
|
||||||
return new ArrayList<>(sounds.keySet()); |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
@ -1,98 +0,0 @@ |
|||||||
/* |
|
||||||
* Copyright (C) 2024 jimj316 |
|
||||||
* |
|
||||||
* This program is free software: you can redistribute it and/or modify |
|
||||||
* it under the terms of the GNU General Public License as published by |
|
||||||
* the Free Software Foundation, either version 3 of the License, or |
|
||||||
* (at your option) any later version. |
|
||||||
* |
|
||||||
* This program is distributed in the hope that it will be useful, |
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||||
* GNU General Public License for more details. |
|
||||||
* |
|
||||||
* You should have received a copy of the GNU General Public License |
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/ |
|
||||||
package moe.nekojimi.chords.commands; |
|
||||||
|
|
||||||
import java.net.MalformedURLException; |
|
||||||
import java.net.URL; |
|
||||||
import java.util.List; |
|
||||||
import moe.nekojimi.chords.Chords; |
|
||||||
import moe.nekojimi.chords.TrackRequest; |
|
||||||
|
|
||||||
/** |
|
||||||
* |
|
||||||
* @author jimj316 |
|
||||||
*/ |
|
||||||
public class SoundboardCommand extends Command |
|
||||||
{ |
|
||||||
|
|
||||||
public SoundboardCommand(Chords bot) |
|
||||||
{ |
|
||||||
super(bot, "board"); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public void call(Invocation invocation) |
|
||||||
{ |
|
||||||
String action = invocation.getArgs().isEmpty() ? "" : invocation.getArgs().get(0); |
|
||||||
String emoji = invocation.getArgs().size() < 2 ? "" : invocation.getArgs().get(1); |
|
||||||
if (action.equals("add")) |
|
||||||
{ |
|
||||||
String urlString = invocation.getArgs().get(2); |
|
||||||
if (emoji.isBlank()) |
|
||||||
{ |
|
||||||
invocation.respond("You must specify a trigger!"); |
|
||||||
return; |
|
||||||
} |
|
||||||
try |
|
||||||
{ |
|
||||||
URL url; |
|
||||||
if (invocation.getArgs().size() < 3) |
|
||||||
{ |
|
||||||
invocation.respond("No URL given!"); |
|
||||||
return; |
|
||||||
} |
|
||||||
url = new URL(urlString); |
|
||||||
TrackRequest request = new TrackRequest(); |
|
||||||
request.setUrl(url); |
|
||||||
request.setInvocation(invocation); |
|
||||||
request.setKeepTracks(true); |
|
||||||
|
|
||||||
bot.getDownloader().requestSpecific(List.of(request), (t) -> |
|
||||||
{ |
|
||||||
bot.getSoundboard().add(emoji, t); |
|
||||||
bot.saveSoundboard(); |
|
||||||
}); |
|
||||||
} catch (MalformedURLException ex) |
|
||||||
{ |
|
||||||
invocation.respond("That's not a valid URL! " + ex.getMessage()); |
|
||||||
return; |
|
||||||
} |
|
||||||
} else if (action.equals("remove")) |
|
||||||
{ |
|
||||||
if (emoji.isBlank()) |
|
||||||
{ |
|
||||||
invocation.respond("You must specify a trigger!"); |
|
||||||
return; |
|
||||||
} |
|
||||||
bot.getSoundboard().remove(emoji); |
|
||||||
bot.saveSoundboard(); |
|
||||||
} else if (action.equals("list")) |
|
||||||
{ |
|
||||||
List<String> list = bot.getSoundboard().getEmoji(); |
|
||||||
String response = "__Soundboard commands available:__\n"; |
|
||||||
for (String item : list) |
|
||||||
{ |
|
||||||
response += item + " "; |
|
||||||
} |
|
||||||
invocation.respond(response); |
|
||||||
} else |
|
||||||
{ |
|
||||||
invocation.respond("Specify \"add\" or \"remove\" after the command!"); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
Loading…
Reference in new issue