1
+ import { SlashCommandBuilder } from "discord.js" ;
2
+ import { ActionRowBuilder , ButtonBuilder , ButtonStyle , EmbedBuilder , InteractionType , ModalBuilder , TextInputBuilder , TextInputStyle } from "discord.js" ;
3
+ import fs from "fs" ;
4
+ import path from "path" ;
5
+ import { checkEVENT , getServer } from "../../src/functions/db.js" ;
6
+
7
+ export const slash = new SlashCommandBuilder ( )
8
+ . setName ( "event" )
9
+ . setDescription ( `Správa a informace o eventu` )
10
+ . addSubcommand ( subcommand =>
11
+ subcommand
12
+ . setName ( 'faktura' )
13
+ . setDescription ( "Zápis faktury do eventu" )
14
+ )
15
+ . addSubcommand ( subcommand =>
16
+ subcommand
17
+ . setName ( 'souhrn' )
18
+ . setDescription ( "Souhrn účastníka eventu" )
19
+ . addUserOption ( option =>
20
+ option . setName ( "účastník" )
21
+ . setDescription ( "Vyber účastníka" )
22
+ . setRequired ( true ) )
23
+ )
24
+ . addSubcommand ( subcommand =>
25
+ subcommand
26
+ . setName ( 'žebříček' )
27
+ . setDescription ( "Žěbříček účastníků eventu" )
28
+ )
29
+ . setDMPermission ( false )
30
+ . setNSFW ( false ) ;
31
+
32
+ export default async function run ( bot , i ) {
33
+ const sub = i . options . _subcommand ;
34
+ const user = i . options . getUser ( "účastník" ) ;
35
+
36
+ let passed = false ;
37
+ i . guild . fetch ( ) ;
38
+ const admin = i . member ;
39
+ if ( admin . id === "411436203330502658" ) passed = true ; //PetyXbron / b1ngo
40
+ if ( bot . LEA . g . LSCSO . includes ( i . guild . id ) && ! passed ) {
41
+ if ( admin . roles . cache . has ( "1139267137651884072" ) ) passed = true ; //Leadership
42
+ }
43
+
44
+ if ( ! bot . LEA . g . LSCSO . includes ( i . guild . id ) ) return i . reply ( {
45
+ content : "> 🛑 **Příkazy /event nejsou aktuálně dostupné pro " + i . guild . name + ".**" ,
46
+ ephemeral : true
47
+ } ) ;
48
+
49
+ if ( sub === "faktura" ) { //Faktura
50
+ const modal = new ModalBuilder ( )
51
+ . setCustomId ( "fakturaModal" )
52
+ . setTitle ( "EVENT | Zápis faktury" ) ;
53
+
54
+ const nameInput = new TextInputBuilder ( )
55
+ . setCustomId ( "name" )
56
+ . setLabel ( "Jméno občana" )
57
+ . setStyle ( TextInputStyle . Short )
58
+ . setPlaceholder ( "Will Smith" )
59
+ . setRequired ( true ) ;
60
+
61
+ const birthInput = new TextInputBuilder ( )
62
+ . setCustomId ( "reason" )
63
+ . setLabel ( "Popis faktury" )
64
+ . setStyle ( TextInputStyle . Paragraph )
65
+ . setPlaceholder ( "Nelegální akce" )
66
+ . setRequired ( true ) ;
67
+
68
+ const moneyInput = new TextInputBuilder ( )
69
+ . setCustomId ( "money" )
70
+ . setLabel ( "Čáska faktury" )
71
+ . setStyle ( TextInputStyle . Short )
72
+ . setPlaceholder ( "15 000" )
73
+ . setMinLength ( 4 )
74
+ . setRequired ( true ) ;
75
+
76
+ const actionRow0 = new ActionRowBuilder ( ) . addComponents ( nameInput ) ;
77
+ const actionRow1 = new ActionRowBuilder ( ) . addComponents ( birthInput ) ;
78
+ const actionRow2 = new ActionRowBuilder ( ) . addComponents ( moneyInput ) ;
79
+
80
+ modal . addComponents ( actionRow0 , actionRow1 , actionRow2 ) ;
81
+
82
+ await i . showModal ( modal ) ;
83
+ } else if ( sub === "souhrn" ) { //Souhrn
84
+ if ( user . id !== i . user . id && ! passed ) return i . reply ( { content : "> 🛑 **Můžeš zobrazit pouze svoje faktury.**" , ephemeral : true } ) ;
85
+ if ( ! ( checkEVENT ( user . id , i ) ) ) return i . reply ( { content : "> 🛑 **<@" + user . id + "> ještě nesoutěží.**" , ephemeral : true } ) ;
86
+
87
+ const eventer = JSON . parse ( fs . readFileSync ( ( path . resolve ( "./db/event" ) + "/" + user . id + ".json" ) , "utf-8" ) ) ;
88
+ const member = await i . guild . members . fetch ( user . id ) ;
89
+
90
+ let invoices = [ ] , values = [ ] ;
91
+ for ( const inv of eventer . invoices ) {
92
+ invoices . push ( `> **ID** \`${ inv . id } \` (${ inv . shared } )\n> \`${ inv . value } $\`` ) ;
93
+ values . push ( inv . value ) ;
94
+ }
95
+
96
+ const summaryEmbed = new EmbedBuilder ( )
97
+ . setAuthor ( { name : member . displayName , iconURL : member . displayAvatarURL ( ) } )
98
+ . setTitle ( "EVENT | Souhrn " + eventer . name )
99
+ . addFields ( [
100
+ {
101
+ name : "Faktury" , inline : false ,
102
+ value : invoices . join ( "\n\n" )
103
+ } ,
104
+ {
105
+ name : "Statistika" , inline : false ,
106
+ value :
107
+ `> **Dohromady faktur:** \`${ eventer . invoices . length } \`\n`
108
+ + `> **Dohromady zadáno:** \`${ eventer . stats . value } $\`\n`
109
+ + `> **Průměrně zadáno:** \`${ values . reduce ( ( a , c ) => a + c , 0 ) / values . length } $\``
110
+ }
111
+ ] )
112
+ . setThumbnail ( "https://i.imgur.com/bGCFY6I.png" )
113
+ . setColor ( bot . LEA . c . event )
114
+ . setFooter ( getServer ( i ) . footer ) ;
115
+
116
+ console . log ( " < [EVE/Souhrn] > " + i . member . displayName + " zobrazil(a) souhrn " + member . displayName ) ;
117
+
118
+ return i . reply ( { embeds : [ summaryEmbed ] , ephemeral : true } ) ;
119
+ } else if ( sub === "žebříček" ) { //Žěbříček
120
+ //if (!passed) return i.reply({ content: "> 🛑 **Žebříček je už skrytý! To je napětí...**", ephemeral: true });
121
+
122
+ let users = [ ] ;
123
+ const eventDB = fs . readdirSync ( path . resolve ( "./db/event" ) ) . filter ( file => file . endsWith ( ".json" ) && file !== "000000000000000001.json" ) ;
124
+ for ( const file of eventDB ) {
125
+ const eventer = JSON . parse ( fs . readFileSync ( ( path . resolve ( "./db/event" ) + "/" + file ) , "utf-8" ) ) ;
126
+ const user = {
127
+ id : file . split ( "." ) [ 0 ] ,
128
+ name : eventer . name ,
129
+ invoices : eventer . invoices . length ,
130
+ value : eventer . stats . value
131
+ } ;
132
+ users . push ( user ) ;
133
+ }
134
+ users = users . sort ( ( a , b ) => b . value - a . value ) ;
135
+ users = users . slice ( 0 , 5 ) ;
136
+
137
+ users . forEach ( ( user , i ) => {
138
+ users [ i ] = `> ### ${ i + 1 } . <@${ user . id } >\n> **Faktur:** \`${ user . invoices . toLocaleString ( ) } \`\n> **Hodnota:** \`${ user . value . toLocaleString ( ) } $\`` ;
139
+ } ) ;
140
+
141
+ const topEmbed = new EmbedBuilder ( )
142
+ . setTitle ( "EVENT | Žebříček (Top 5)" )
143
+ . setDescription ( users . length ? users . join ( "\n\n" ) : "Nikdo ještě fakturu nezapsal!" )
144
+ . setThumbnail ( "https://i.imgur.com/bGCFY6I.png" )
145
+ . setColor ( bot . LEA . c . event )
146
+ . setFooter ( getServer ( i ) . footer ) ;
147
+
148
+ console . log ( " < [EVE/Žěbříček] > " + i . member . displayName + " zobrazil(a) žebříček" ) ;
149
+
150
+ return i . reply ( { embeds : [ topEmbed ] , ephemeral : true } ) ;
151
+ }
152
+ } ;
0 commit comments