aboutsummaryrefslogtreecommitdiff
path: root/commands/util/say.js
blob: eda3675a81db7e7f5c2cc0e5f01b09f58cc86449 (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
const fs = require('fs')
const path = require("path");
let config_loc = __filename+".json"
const { PermissionsBitField } = require('discord.js');
let config = JSON.parse(fs.readFileSync(config_loc))
const { EmbedBuilder, ActionRowBuilder,ButtonBuilder,ButtonStyle } = require("discord.js");
const settings = require("../../src/settings")

/*let presets = {
    "ticket-create": function(client, info){
        let embed = new EmbedBuilder()
            .setColor(settings.defaultColor)
            .setTitle("create a ticket")
            .setDescription("test")

        const create = new ButtonBuilder()
                .setCustomId('new-private-thread')
                .setLabel('Create Ticket')
                .setStyle(ButtonStyle.Primary)

        const row = new ActionRowBuilder()
                .addComponents(create);

        info.id.send({embeds:[embed],components:[row]})
    }
}*/
module.exports = {
    name : "say",
    command: ["say"],
    mod_only: true,
    config:config,
    config_loc:config_loc,
    async main (client,Discord,message,args){
        let id = message.mentions.channels.first()
        let echo = message.content.slice(8)
        if(id){
            echo = echo.split(/ +/g);
            echo.shift();
            echo = echo.join(' ')
        } else {
            id = message.channel
        }
        this.exec(client,{id:id,echo:echo})
    },
    s_options:[{type:"sub",name:"text",options:[{type:"string",name:"echo",desc:"message to be said",required:true,autocomplete:false},
            {type:"channel",name:"channel",desc:"channel to be sent to",required:false,autocomplete:false}]},
            //{type:"sub",name:"preset",options:[{type:"string",name:"pre",desc:"preset message",required:true,autocomplete:Object.keys(presets)}]},
            {type:"sub", name:"embed",options:[
                {type:"string",name:"hex-color",desc:"hex color on left side of embed",required:false,autocomplete:false},
                {type:"string",name:"title",desc:"embed title",required:false,autocomplete:false},
                {type:"string",name:"url",desc:"embed url",required:false,autocomplete:false},
                {type:"string",name:"description",desc:"embed body",required:false,autocomplete:false},
                {type:"string",name:"thumbnail",desc:"embed thumbnail",required:false,autocomplete:false},
                {type:"string",name:"image",desc:"embed image",required:false,autocomplete:false},
                {type:"string",name:"footer",desc:"footer text",required:false,autocomplete:false},
            ]}],
    async s_main (client,Discord,interaction){
        try{
            let action = interaction.options.getSubcommand()
            if(action == "text"){
                this.exec(client,
                    {echo:interaction.options.getString("echo"),
                    id:interaction.options.getChannel("channel") ?? interaction.channel})
                await interaction.reply({ content:'sent', ephemeral: true })
                interaction.deleteReply()
            } else if(action == "embed"){
                this.embed_exec(client, {msg:interaction,id:interaction.channel})
            }
        } catch(e) {
            info.interaction.channel.reply({ content: 'error sending message, most likely from permissions or length', ephemeral: true})
        }
        
        
    },

    async exec(client,info){
        return await info.id.send(info.echo)
    },

    async embed_exec(client, info){
        let interaction = info.msg
        let opt;
        try{
            let embed = new EmbedBuilder()
                .setColor(interaction.options.getString("hex-color") ?? settings.defaultColor)
            if((opt = interaction.options.getString("title")) != null)
                embed.setTitle(opt)
            if((opt = interaction.options.getString("url")) != null)
                embed.setURL(opt)
            if((opt = interaction.options.getString("description")) != null)
                embed.setDescription(opt)
            if((opt = interaction.options.getString("thumbnail")) != null)
                embed.setThumbnail(opt)
            if((opt = interaction.options.getString("image")) != null)
                embed.setImage(opt)
            if((opt = interaction.options.getString("image")) != null)
                embed.setImage(opt)
            if((opt = interaction.options.getString("footer")))
                embed.setFooter({text:opt})
            info.id.send({embeds:[embed]})
            await interaction.reply({ content:'sent', ephemeral: true })
            interaction.deleteReply()
        } catch(e){
            await interaction.reply({ content:'invalid configuration', ephemeral: true })
        }
        
    }
}