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
|
package net.tylermurphy.ken.command.social;
import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.entities.channel.middleman.GuildMessageChannel;
import net.dv8tion.jda.api.interactions.commands.OptionType;
import net.dv8tion.jda.internal.utils.tuple.Pair;
import net.tylermurphy.ken.Ken;
import net.tylermurphy.ken.command.Response;
import net.tylermurphy.ken.command.annotation.Command;
import net.tylermurphy.ken.command.annotation.Option;
import net.tylermurphy.ken.command.annotation.Requirement;
import java.util.List;
public class Sticker {
@Command(name="sticker", description="Post a sticker set in a server")
@Option(name="name", description="Name of the sticker", type=OptionType.STRING, required=true)
public Response sticker(Member sender, Guild guild, List<Object> args) {
String name = (String) args.get(0);
Pair<byte[], String> imageData = Ken.getInstance().getDatabase().getStickerTable().getImage(guild.getIdLong(), name.toLowerCase());
if(imageData == null) {
return Response.error(String.format("Sticker %s does not exists on this server", name));
}
byte[] image = imageData.getLeft();
return Response.success(String.format("%s posted sticker %s", sender.getEffectiveName(), name)).setFile(image, imageData.getRight());
}
@Command(name="addsticker", description="Add a sticker to the server")
@Option(name="name", description="Name of the sticker", type=OptionType.STRING, required=true)
@Option(name="sticker", description="Image or gif file", type=OptionType.ATTACHMENT, required=true)
@Requirement(Permission.MANAGE_SERVER)
public Response addSticker(GuildMessageChannel channel, Guild guild, List<Object> args) {
String name = (String) args.get(0);
Message.Attachment sticker = (Message.Attachment) args.get(1);
if(!sticker.isImage()) {
return Response.error("Attachment must be a valid discord image");
}
if(sticker.getSize() > 5 * 1024 * 1024) {
return Response.error("Attachment must be 5MB or less");
}
sticker.getProxy().download().whenComplete((s, error) -> {
if(error != null) {
channel.sendMessage(":x: Failed to retrieve uploaded image").queue();
return;
}
boolean result = Ken.getInstance().getDatabase().getStickerTable().setImage(guild.getIdLong(), name.toLowerCase(), s, sticker.getFileName());
if(result) {
channel.sendMessage(String.format(":white_check_mark: Successfully uploaded image with name " + name)).queue();
} else {
channel.sendMessage(":x: Failed to upload image to database").queue();
}
});
return Response.success(":wrench: Attempting to upload image");
}
@Command(name="deletesticker", description="Delete a sticker set in a server")
@Option(name="name", description="Name of the sticker", type=OptionType.STRING, required=true)
@Requirement(Permission.MANAGE_SERVER)
public Response deleteSticker(Member sender, Guild guild, List<Object> args) {
String name = (String) args.get(0);
boolean result = Ken.getInstance().getDatabase().getStickerTable().deleteImage(guild.getIdLong(), name.toLowerCase());
if(result) {
return Response.success(String.format(":white_check_mark: Sticker %s has been deleted", name));
} else {
return Response.error(String.format("Sticker %s does not exists on this server", name));
}
}
@Command(name="liststickers", description="List stickers set in this server")
public Response listStickers(Guild guild) {
List<String> names = Ken.getInstance().getDatabase().getStickerTable().getImages(guild.getIdLong());
if(names.size() > 1) {
String response = "The stickers in this server are: ``";
for(String name : names) {
response = response + name +", ";
}
response = response.substring(0, response.length()-2) + "``";
return Response.success(response);
} else {
return Response.error("There are no stickers in this server");
}
}
}
|