· 7 years ago · Sep 08, 2018, 07:34 PM
1const Discord = require('discord.js');
2const bot = new Discord.Client();
3const config = require('./config.js');
4var sqlite3 = require('sqlite3').verbose();
5var db = new sqlite3.Database('database.db');
6var fs = require('fs');
7
8const events = {
9 MESSAGE_REACTION_ADD: 'messageReactionAdd',
10 MESSAGE_REACTION_REMOVE: 'messageReactionRemove',
11};
12
13bot.on('ready', () => {
14 console.log(`Cipica Bot Initializat!`);
15
16 db.serialize(function() {
17 db.run(`CREATE TABLE IF NOT EXISTS ticket (
18 id INTEGER PRIMARY KEY AUTOINCREMENT,
19 id_ticket TEXT,
20 userid TEXT,
21 userName TEXT,
22 closed BOOLEAN,
23 date TEXT
24 )`);
25 });
26
27 db.close();
28
29});
30
31bot.on('error', console.error);
32
33bot.on('raw', async event => {
34 if (!events.hasOwnProperty(event.t)) return;
35
36 if(event.t == 'MESSAGE_REACTION_ADD'){
37 if(event.d.channel_id == config.check_channel_id){
38 if(event.d.emoji.name == config.emoji){
39 let guild = bot.guilds.get(event.d.guild_id);
40 let user = guild.members.find("id", event.d.user_id);
41 let role = guild.roles.find("name",config.role);
42 user.addRole(role).catch();
43 }
44 }
45 }
46});
47
48bot.on('message', message => {
49 if (message.author.equals(bot.user)) return;
50
51 if(message.channel.parent == `<#${config.category_id}>`){
52 fs.appendFileSync(`logs/${message.channel.name}.txt`,
53 `${message.createdAt.toDateString()} ${message.author.name} : ${message}\n`,
54 function (err) {});
55 }
56
57 if (!message.content.startsWith(config.prefix)) return;
58 if (message.guild != null) {
59 message.content = message.content.toLowerCase();
60
61 let arg = message.content.substring(config.prefix.length).split(" ");
62
63 switch(arg[0]){
64 case "setup":
65 setupFunction(message);
66 break;
67 case "ticket":
68 case "tc":
69 let user = message.mentions.users.first();
70 if(user != null){
71 ticketHistory(message, user);
72 return;
73 }
74 ticketFunction(message);
75 break;
76 case "history":
77 if(!message.member.hasPermission(Discord.Permissions.FLAGS.ADMINISTRATOR)){
78 message.channel.send(":exclamation: You don't have acces to this command!");
79 return;
80 }
81
82 if(arg[1] != null){
83 fs.readdir("logs", (err, files) => {
84 files.forEach(file => {
85 if(file.includes(arg[1])){
86 message.author.send(`History message`, new Discord.Attachment("logs/" + file)).catch();
87 message.channel.send("A file with history was send on your DM!");
88 return;
89 }
90
91 });
92 })
93 }
94
95 break;
96 case "help":
97 var embed = new Discord.RichEmbed()
98 .addField("Normal Commands", "**-help** Show the help menu \n **?help** Show the help menu on bot **gtaonline-shop-bot** ")
99 .addField("Ticket Commands", "**-ticket** Create a new ticket \n **-close** Close the ticket you're currently in \n **-history** Admin only ")
100 .setFooter("©gtaonline-shop.com | By Gradin98", "https://i.imgur.com/ySV77In.png")
101 .setColor("0x2e813d")
102 message.channel.send(embed)
103 break;
104 case "close":
105 if(message.channel.parent == `<#${config.category_id}>`) {
106 let name = message.channel.name;
107 let nameTicket = name.split('-')[1]
108 let id = name.split('-')[2];
109
110 db = new sqlite3.Database('database.db');
111 db.serialize(function() {
112 db.run(`UPDATE ticket SET closed = 1 WHERE id_ticket = '${nameTicket}-${id}'`);
113 });
114
115 db.close();
116
117 message.channel.delete();
118 }
119 else{
120 var embed = new Discord.RichEmbed()
121 .setDescription(":x: You can't execute this **command** here!")
122 .setColor("0x2e813d")
123 message.channel.send(embed)
124 return;
125 }
126 break;
127 }
128 }
129
130});
131
132bot.login(config.token);
133
134function ticketHistory(message, user){
135 if(!message.member.hasPermission(Discord.Permissions.FLAGS.ADMINISTRATOR)){
136 message.channel.send(":exclamation: You don't have acces to this command!");
137 return;
138 }
139
140 db = new sqlite3.Database('database.db');
141 var msg = `Disponible Tickets for ${user.username}\n\n`;
142 db.serialize(function() {
143 db.all(`SELECT id_ticket, date FROM ticket
144 WHERE userid LIKE ${user.id}`, function(err, rows) {
145 rows.forEach(function (row) {
146 msg += `\`${row.date} - ${row.id_ticket}\` \n`;
147 });
148 if(msg.length > 1999){
149 message.channel.send(msg.substring(0,1998));
150 }
151 else{
152 message.channel.send(msg);
153 }
154
155 });
156
157 });
158 db.close();
159}
160
161async function ticketFunction(message){
162 let id = message.author.username + "-" + makeid();
163 checkTicket(message, id.toLowerCase());
164
165}
166
167async function checkTicket(message, id){
168 db = new sqlite3.Database('database.db');
169 db.serialize(function() {
170 db.all(`SELECT id_ticket FROM ticket WHERE userid LIKE ${message.author.id}
171 AND closed LIKE 0`, function(err, rows) {
172 var checkUser = false;
173 rows.forEach(function (row) {
174 if(row.id_ticket != null){
175 checkUser = true;
176 }
177
178 });
179
180 if(checkUser){
181 var embed = new Discord.RichEmbed()
182 .setDescription("You already have a ticket opened!")
183 .setColor("0x2e813d")
184 message.channel.send(embed)
185 }
186 else{
187 createTicket(message, id);
188 }
189 });
190
191 });
192 db.close();
193}
194
195async function createTicket(message, id){
196 db = new sqlite3.Database('database.db');
197
198 db.run(`INSERT INTO ticket(id_ticket, userid, userName, closed, date) \
199 VALUES ('${id}','${message.author.id}','${message.author.username}',0, '${message.createdAt}')`);
200
201
202 let channel = await message.guild.createChannel(`ticket-${id}`);
203 channel = await channel.setParent(config.category_id);
204 channel = await channel.overwritePermissions(message.guild.roles.find('name', '@everyone'), {
205 'CREATE_INSTANT_INVITE' : false, 'VIEW_CHANNEL': false,
206 'CONNECT': false, 'SPEAK': false
207 });
208 channel = await channel.overwritePermissions(message.guild.members.find('id', message.author.id), {
209 'VIEW_CHANNEL': true, 'CONNECT': true, 'SPEAK': true,
210 });
211
212 fs.appendFile(`logs/ticket-${id}.txt`,
213 `#################################################\n
214 LOG CREATED FOR ${id} AT ${message.createdAt}\n
215 #################################################\n`
216 , function (err) {
217 });
218
219 var embed = new Discord.RichEmbed()
220 .setDescription(":white_check_mark: Your ticket has been created ")
221 .setColor("0x2e813d")
222 message.channel.send(embed)
223}
224
225function makeid() {
226 var text = "";
227 var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
228
229 for (var i = 0; i < 6; i++)
230 text += possible.charAt(Math.floor(Math.random() * possible.length));
231
232 return text;
233 }
234
235function setupFunction(message){
236 if(!message.member.hasPermission(Discord.Permissions.FLAGS.ADMINISTRATOR)){
237 message.channel.send(":exclamation: You don't have acces to this command!");
238 return;
239 }
240
241 let channel = message.guild.channels.find("id", config.check_channel_id);
242 let embed = new Discord.RichEmbed()
243 .setTitle(config.embed_message.title)
244 .setColor(config.embed_message.color)
245 .setDescription(config.embed_message.description);
246
247 channel.send(embed)
248 .then(message => message.react(config.emoji));
249}