blob: e645fe710885936a3f9a910425fc8fdf0340d30a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
package soundchan;
import net.dv8tion.jda.core.entities.MessageChannel;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.*;
public class LocalAudioManager {
/*
A list of local files for the sound bot to play.
*/
public Map<String, String> filenameDict;
public Map<String, String> usernameDict;
private String filepath;
public LocalAudioManager(String filepath_in){
filepath = filepath_in;
filenameDict = new HashMap<>();
PopulateFiles();
}
/**
* Constructor for when there is a file listing users and sounds to play for them
* @param filepath_in Path to folder where sounds are located
* @param userSoundFile Path to file with users and sounds
*/
public LocalAudioManager(String filepath_in, String userSoundFile) {
filepath = filepath_in;
filenameDict = new HashMap<>();
usernameDict = new HashMap<>();
PopulateFiles();
MapUserAudio(userSoundFile);
}
/**
* Gives filepath to sound to play either from a command or when given a username
* @param command Command or username to play soundbite
* @return Path to sound, or "" if no sound for given command
*/
public String GetFilePath(String command){
String path;
try{
path = filepath + "/" + filenameDict.get(command);
}catch(Exception ex){
System.out.println("File " + command + " not found!");
path = "";
}
if(path.contentEquals("") || path.contentEquals(filepath + "/null")) {
try {
path = filepath + "/" + usernameDict.get(command);
} catch (Exception ex) {
System.out.println("File " + command + " not found!");
path = "";
}
}
return path;
}
public void ListSounds(MessageChannel channel){
Set<String> localSounds = filenameDict.keySet();
String toPrint = "The following sounds you can play are:\n```";
for (String sound:
localSounds) {
toPrint = toPrint + " * " + sound + "\n";
}
toPrint = toPrint + "```";
channel.sendMessage(toPrint).queue();
}
private void PopulateFiles(){
File folder = new File(filepath);
File[] listOfFiles = folder.listFiles();
for (File file : listOfFiles) {
if (file.isFile()) {
String filename = file.getName();
filenameDict.put(filename.substring(0, filename.indexOf('.')), filename);
}
}
}
/**
* Reads in users and their respective sounds from file, then builds a map of users to the filenames. This assumes
* filenames for the sounds are valid, but doesn't check for them.
* @param userSoundFile The file (with path if required) with listing of users and the sounds to play when they join
*/
private void MapUserAudio(String userSoundFile) {
Properties userSoundProp = LoadProperties(userSoundFile);
Set<String> users = userSoundProp.stringPropertyNames();
for(String user : users) {
String soundFile = userSoundProp.getProperty(user);
usernameDict.put(user, soundFile);
}
}
/**
* Builds a property object from a file.
* @param filename File to be read
* @return Property object with information from file
*/
private static Properties LoadProperties(String filename){
Properties properties = new Properties();
InputStream input = null;
try{
input = new FileInputStream(filename);
properties.load(input);
}catch (IOException ex){
ex.printStackTrace();
} finally {
try {
input.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
return properties;
}
}
|