summaryrefslogtreecommitdiff
path: root/src/main/java/net/tylermurphy/ken/command/social/Sticker.java
blob: 9fc5c5213343d8e1ef45417ef9906d5fc2b33408 (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
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");
        }
    }

}