Skip to content

Commit 888aef0

Browse files
author
Vivien Mouret
committed
✨ roll slash command
1 parent a6e2f5f commit 888aef0

1 file changed

Lines changed: 233 additions & 0 deletions

File tree

slash/roll.js

Lines changed: 233 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,233 @@
1+
'use.strict'
2+
3+
const { SlashCommandBuilder } = require('discord.js'),
4+
{ randomIntFromInterval, getCurrentDatetime } = require('../core/utils.js'),
5+
fs = require('node:fs'),
6+
{ parse } = require('json2csv'),
7+
csvParse = require('fast-csv'),
8+
{ Weapons } = require('../core/classes/weapons.js');
9+
10+
const weapons = new Weapons();
11+
12+
module.exports = {
13+
data: new SlashCommandBuilder()
14+
.setName('roll')
15+
.setDescription('Pour lancer une roulette d\items de **The Legend Of Zelda**'),
16+
async execute(message, client, language, initDateTime) {
17+
var roll = [],
18+
result = [],
19+
earn = [],
20+
earnCsv = [],
21+
dataUser = [];
22+
23+
try {
24+
weapons.setPreRoll(client);
25+
26+
var sword = weapons.fiRoll,
27+
claymore = weapons.seRoll,
28+
shield = weapons.thRoll,
29+
bow = weapons.foRoll,
30+
axes = weapons.ffRoll;
31+
32+
for (let i = 0; i < 15; i++) {
33+
if (roll.length < 3) {
34+
roll.push(sword[randomIntFromInterval(0, (sword.length - 1))]);
35+
} else if (3 <= roll.length && roll.length < 6) {
36+
roll.push(claymore[randomIntFromInterval(0, (claymore.length - 1))]);
37+
} else if (6 <= roll.length && roll.length < 9) {
38+
roll.push(shield[randomIntFromInterval(0, (shield.length - 1))]);
39+
} else if (9 <= roll.length && roll.length < 12) {
40+
roll.push(bow[randomIntFromInterval(0, (bow.length - 1))]);
41+
} else if (12 <= roll.length && roll.length < 15) {
42+
roll.push(axes[randomIntFromInterval(0, (axes.length - 1))]);
43+
};
44+
45+
if (roll.length % 3 == 0) {
46+
let y = i - 1,
47+
ii = i - 2;
48+
if (roll[i].name == roll[y].name && roll[i].name == roll[ii].name) {
49+
result.push('☑️');
50+
earn.push(roll[i].name.slice(3).split('_').join(' '));
51+
earnCsv.push(roll[i].name);
52+
} else { result.push('❌'); };
53+
};
54+
};
55+
} catch (err) {
56+
return message
57+
.reply({
58+
'channel_id': message.channel.channel_id,
59+
'content': `${language.errorRoll}`,
60+
'fetchReply': false,
61+
'ephemeral': true
62+
})
63+
.then(() => {
64+
console.log(`[${getCurrentDatetime('comm')}] Error roll algo ${err}`);
65+
});
66+
};
67+
68+
if (earnCsv.length != 0) {
69+
let filePath = `./data/inventory_user_roll.csv`;
70+
71+
for (let i = 0; i < earnCsv.length; i++) {
72+
dataUser.push({
73+
'id': Number(message.user.id),
74+
'user': String(message.user.username),
75+
'inventory': String(earnCsv[i])
76+
});
77+
};
78+
79+
fs.exists(filePath, async (e) => {
80+
if (e) {
81+
fs.createReadStream(filePath)
82+
.pipe(csvParse.parse({ headers: true, delimiter: ',' }))
83+
.on('data', async row => {
84+
if (row.id != 'id') {
85+
dataUser.push({
86+
'id': Number(row.id),
87+
'user': String(row.user),
88+
'inventory': String(row.inventory)
89+
});
90+
};
91+
})
92+
.on('end', () => {
93+
fs.writeFileSync(filePath, parse(dataUser), async function (err) {
94+
if (err) {
95+
await message.editReply({
96+
'channel_id': message.channel.channel_id,
97+
'content': `${language.errorRoll}`,
98+
'fetchReply': false,
99+
'ephemeral': true
100+
});
101+
console.log(`[${getCurrentDatetime('comm')}] ${message.guild.name} / ${message.channel.name} # ${message.user.username}'s inventory error save ${err}`);
102+
throw err;
103+
} else {
104+
console.log(`[${getCurrentDatetime('comm')}] ${message.guild.name} / ${message.channel.name} # ${message.user.username}'s inventory save`);
105+
};
106+
});
107+
});
108+
} else {
109+
fs.writeFileSync(filePath, parse(dataUser), async function (err) {
110+
if (err) {
111+
await message.editReply({
112+
'channel_id': message.channel.channel_id,
113+
'content': `${language.errorRoll}`,
114+
'fetchReply': false,
115+
'ephemeral': true
116+
});
117+
console.log(`[${getCurrentDatetime('comm')}] ${message.guild.name} / ${message.channel.name} # ${message.user.username}'s inventory error save ${err}`);
118+
throw err;
119+
} else {
120+
console.log(`[${getCurrentDatetime('comm')}] ${message.guild.name} / ${message.channel.name} # ${message.user.username}'s inventory save`);
121+
};
122+
});
123+
};
124+
});
125+
};
126+
127+
var fi_line = `${roll[0]} ${roll[1]} ${roll[2]} ${result[0]}`,
128+
se_line = `${roll[3]} ${roll[4]} ${roll[5]} ${result[1]}`,
129+
th_line = `${roll[6]} ${roll[7]} ${roll[8]} ${result[2]}`,
130+
fo_line = `${roll[9]} ${roll[10]} ${roll[11]} ${result[3]}`,
131+
ff_line = `${roll[12]} ${roll[13]} ${roll[14]} ${result[4]}`;
132+
133+
await message.reply(
134+
{
135+
'channel_id': message.channel.channel_id,
136+
'content': fi_line + '\n' +
137+
se_line + '\n' +
138+
th_line + '\n' +
139+
fo_line + '\n' +
140+
ff_line,
141+
'fetchReply': true,
142+
'ephemeral': false
143+
}
144+
);
145+
146+
switch (earn.length) {
147+
case 1:
148+
await message.editReply(
149+
{
150+
'channel_id': message.channel.channel_id,
151+
'content': fi_line + '\n' +
152+
se_line + '\n' +
153+
th_line + '\n' +
154+
fo_line + '\n' +
155+
ff_line + '\n' +
156+
`${message.user.username}: ${language.winRoll} **${earn}** !`,
157+
'fetchReply': false,
158+
'ephemeral': false
159+
})
160+
break;
161+
case 2:
162+
await message.editReply(
163+
{
164+
'channel_id': message.channel.channel_id,
165+
'content': fi_line + '\n' +
166+
se_line + '\n' +
167+
th_line + '\n' +
168+
fo_line + '\n' +
169+
ff_line + '\n' +
170+
`${message.user.username}: ${language.winRoll} **${earn[0]}** !\n${language.winRoll2} **${earn[1]}** !!!`,
171+
'fetchReply': false,
172+
'ephemeral': false
173+
});
174+
break;
175+
case 3:
176+
await message.editReply(
177+
{
178+
'channel_id': message.channel.channel_id,
179+
'content': fi_line + '\n' +
180+
se_line + '\n' +
181+
th_line + '\n' +
182+
fo_line + '\n' +
183+
ff_line + '\n' +
184+
`${message.user.username}: ${language.winRoll3} **${earn[0]}** + **${earn[1]}** + **${earn[2]}** WTFFF ...`,
185+
'fetchReply': false,
186+
'ephemeral': false
187+
});
188+
break;
189+
case 4:
190+
await message.editReply(
191+
{
192+
'channel_id': message.channel.channel_id,
193+
'content': fi_line + '\n' +
194+
se_line + '\n' +
195+
th_line + '\n' +
196+
fo_line + '\n' +
197+
ff_line + '\n' +
198+
`${message.user.username}: ${language.winRoll41} **${earn[0]}**, **${earn[1]}**, **${earn[2]}**, **${earn[3]}** ${language.winRoll42} .....`,
199+
'fetchReply': false,
200+
'ephemeral': false
201+
});
202+
break;
203+
case 5:
204+
await message.editReply(
205+
{
206+
'channel_id': message.channel.channel_id,
207+
'content': fi_line + '\n' +
208+
se_line + '\n' +
209+
th_line + '\n' +
210+
fo_line + '\n' +
211+
ff_line + '\n' +
212+
`${message.user.username}: **${earn[0]}**, **${earn[1]}**, **${earn[2]}**, **${earn[3]}**, **${earn[4]}** ${language.winRoll5}`,
213+
'fetchReply': false,
214+
'ephemeral': false
215+
});
216+
break;
217+
default:
218+
await message.editReply(
219+
{
220+
'channel_id': message.channel.channel_id,
221+
'content': fi_line + '\n' +
222+
se_line + '\n' +
223+
th_line + '\n' +
224+
fo_line + '\n' +
225+
ff_line + '\n' +
226+
`${message.user.username}: ${language.lossRoll}`,
227+
'fetchReply': false,
228+
'ephemeral': false
229+
});
230+
break;
231+
};
232+
}
233+
};

0 commit comments

Comments
 (0)