parent
720c596573
commit
ee9c435b5d
@ -0,0 +1,92 @@ |
|||||||
|
/* |
||||||
|
* 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()); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,98 @@ |
|||||||
|
/* |
||||||
|
* 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