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