aboutsummaryrefslogtreecommitdiff
path: root/events/dm.js
blob: 0396a355618c162634e513c25889c8c5c569dcfd (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
const { ActivityType, ButtonBuilder, ButtonStyle, ActionRowBuilder} = require("discord.js");
const { EmbedBuilder } = require("discord.js");
const fs = require('fs')
const path = require("path");
let db = require("../src/db")
let settings = require("../src/settings")
const llog = require("../src/logg")
let config_loc = __filename+".json"
module.exports = {
    name : "dm",
    config_loc : config_loc,
    async main (client,Discord,message){
        llog.debug("dm")
        if(message==null||message.author.bot)return;
        llog.debug("dm " + message.author.id)
        let config = JSON.parse(fs.readFileSync(config_loc))
        //start tickets
        let date = new Date().toLocaleString()
        let tickets = await db.Tickets.findAll({where:{status:'open',author:message.author.id}})
        let matt = Array.from(message.attachments, ([name, value]) => ({ name, value }))
        let smatt = []
        for(let att of matt){
            smatt.push({attachment:att.value.url})
        }
        if(tickets.length==0){
            let nticket = this.generate_id()
            const embed = new EmbedBuilder()
                .setTitle("New Ticket | "+nticket)
                .setAuthor({name: message.author.tag, iconURL: message.author.displayAvatarURL()})
                .setColor(settings.defaultColor)
                .setDescription("Message: "+message.content)
                .setFooter({text:"Created by: "+message.author.id+" | Created: "+date})
            
            const confirm = new ButtonBuilder()
                .setCustomId('confirm')
                .setLabel('Confirm')
                .setStyle(ButtonStyle.Primary);
            const row = new ActionRowBuilder()
                .addComponents(confirm);
            
            let mess = await message.channel.send({embeds:[embed],components:[row],files:smatt});
            
            const collectorFilter = i => true;

            try {
	            const confirmation = await mess.awaitMessageComponent({ filter: collectorFilter, time: 60000000 });
                if(confirmation.customId == "confirm"){

                    let nt = await db.Tickets.create({
                        ticket:nticket,
                        message: message.content,
                        attachments: JSON.stringify(matt),
                        status: "open",
                        author: message.author.id,
                        name: message.author.tag,
                        created: date,
                        messages: JSON.stringify([]),
                        pfp: message.author.displayAvatarURL()
                    })

                    const aembed = new EmbedBuilder()
                        .setTitle("New Ticket | "+nticket)
                        .setAuthor({name: message.author.tag, iconURL: message.author.displayAvatarURL()})
                        .setColor(settings.defaultColor)
                        .setDescription("Message: '"+message.content+"'\n\nUse `/ticket` or `sns ticket reply "+nticket+" {message}`")
                        .setFooter({text:"Created by: "+message.author.id+" | Created: "+date})

                    global.channels["admin-chan"].send({embeds:[aembed],files:smatt})
                    confirmation.deferUpdate()
                }
            } catch (e) {
                const confirm_timeout = new ButtonBuilder()
                    .setCustomId('confirm')
                    .setLabel('Confirm')
                    .setStyle(ButtonStyle.Primary)
                    .setDisabled(true);
                const row_timeout = new ActionRowBuilder()
                    .addComponents(confirm_timeout);
	            await mess.edit({ components: [row_timeout] });
            }
        } else {
            let ticket = tickets[0]
            let messages = JSON.parse(ticket.messages)
            messages.push({message:message.content,attachments:matt})
            db.Tickets.update({'messages':JSON.stringify(messages)},{where:{id:ticket.id}})
            const aembed = new EmbedBuilder()
                .setTitle("Updated Ticket | "+ticket.ticket)
                .setAuthor({name: message.author.tag, iconURL: message.author.displayAvatarURL()})
                .setColor(settings.defaultColor)
                .setDescription("Message: '"+message.content+"'\n\nReply with `sns ticket reply "+ticket.ticket+" {message}`")
                .setFooter({text:"Created by: "+message.author.id+" | Created: "+date})

            global.channels["admin-chan"].send({embeds:[aembed],files:smatt})
        }
        //done w/ tickets
    },
    generate_id(){
        let config = JSON.parse(fs.readFileSync(config_loc))
        var ticket = "";
        var characters = config["ticket-id-chars"].value;
        for (var i = 0; i < config["ticket-id-length"].value; i++) {
            ticket += characters.charAt(Math.floor(Math.random() * characters.length));
            if (i == config["ticket-id-split"].value) ticket += "-";
        }
        return ticket
    }
}