@@ -14,41 +14,12 @@ pub async fn create_rollout(
14
14
crate :: discord:: commands:: Error
15
15
> {
16
16
17
- let guild = ctx
18
- . http ( )
19
- . get_guild (
20
- crate :: env:: GUILD_ID
21
- . as_str ( )
22
- . parse ( )
23
- . unwrap ( )
24
- )
25
- . await ?;
26
-
27
- let role = guild
28
- . roles
29
- . get (
30
- & crate :: env:: ROLE_ID
31
- . as_str ( )
32
- . parse ( )
33
- . unwrap ( )
34
- )
35
- . unwrap ( ) ;
36
-
37
- if !ctx
38
- . author ( )
39
- . has_role (
40
- ctx. http ( ) ,
41
- & guild,
42
- role
43
- )
44
- . await ?
45
- {
46
-
47
- ctx. say ( "You don't have permission to use this command" )
48
- . await ?;
49
-
17
+ if !crate :: discord:: utils:: no_perm:: check_and_send_no_perm (
18
+ ctx,
19
+ ctx. author ( )
20
+ ) . await ? {
50
21
return Ok ( ( ) ) ;
51
- }
22
+ } ;
52
23
53
24
// Add rollout to queue
54
25
let build_queue = ctx
@@ -95,51 +66,51 @@ pub async fn create_rollout(
95
66
96
67
ctx. send ( response) . await ?;
97
68
98
- while let Some ( mci ) = serenity_prelude:: ComponentInteractionCollector :: new ( ctx. serenity_context ( ) )
69
+ while let Some ( component_interaction ) = serenity_prelude:: ComponentInteractionCollector :: new ( ctx. serenity_context ( ) )
99
70
. timeout ( std:: time:: Duration :: from_secs ( 120 ) )
100
71
. filter ( move |mci| mci. data . custom_id . starts_with ( "approve-" ) || mci. data . custom_id . starts_with ( "reject-" ) )
101
72
. await
102
73
{
103
74
104
75
// check permissions
105
76
106
- if !mci.
107
- user
108
- . has_role (
109
- ctx. http ( ) ,
110
- & guild,
111
- role
112
- )
113
- . await ?
114
- {
115
-
116
- let embed = serenity_prelude:: CreateEmbed :: default ( )
117
- . title ( "Oops!" )
118
- . description ( "You don't have permission to use this interaction" . to_string ( ) )
119
- . author (
120
- serenity_prelude:: CreateEmbedAuthor :: new ( & mci. user . name )
121
- . icon_url ( mci. user . avatar_url ( ) . unwrap_or_default ( ) )
122
- . url ( mci. user . avatar_url ( ) . unwrap_or_default ( ) )
77
+ crate :: discord:: utils:: no_perm:: check_and_send_no_perm ( ctx, & component_interaction. user ) . await ?;
78
+
79
+ // If interactor and creator are same, disregard it because
80
+ // author can't approve or deny their own rollout
81
+ if component_interaction. user . id == ctx. author ( ) . id {
82
+ ctx
83
+ . send (
84
+ poise:: CreateReply :: default ( )
85
+ . embed (
86
+ poise:: serenity_prelude:: CreateEmbed :: new ( )
87
+ . title ( "Invalid action" )
88
+ . description (
89
+ "You are not allowed to approve or deny your own rollout"
90
+ )
91
+ . color ( 0xFF0000 )
123
92
)
124
- . color ( 0xFF0000 ) ;
125
-
126
- let reply = serenity_prelude:: CreateInteractionResponseMessage :: new ( )
127
- . embed ( embed) ;
93
+ . ephemeral ( true )
94
+ ) . await ?;
128
95
129
- mci. create_response ( ctx, serenity_prelude:: CreateInteractionResponse :: Message ( reply) ) . await ?;
96
+ component_interaction
97
+ . create_response (
98
+ ctx,
99
+ serenity_prelude:: CreateInteractionResponse :: Acknowledge
100
+ ) . await ?;
130
101
131
- continue ;
102
+ return Ok ( ( ) ) ;
132
103
}
133
104
134
- if mci . data . custom_id == format ! ( "approve-{}" , version) {
105
+ if component_interaction . data . custom_id == format ! ( "approve-{}" , version) {
135
106
let build_queue = ctx
136
107
. data ( )
137
108
. build_queue
138
109
. lock ( )
139
110
. await ;
140
111
141
112
let success = build_queue
142
- . approve_rollout ( & version, mci . user . id . get ( ) )
113
+ . approve_rollout ( & version, component_interaction . user . id . get ( ) )
143
114
. expect (
144
115
"failed to approve rollout" ,
145
116
) ;
@@ -152,15 +123,15 @@ pub async fn create_rollout(
152
123
153
124
if !success {
154
125
let embed = serenity_prelude:: CreateEmbed :: default ( )
155
- . title ( "Oops! " )
156
- . description ( "There was an error approving the rollout. This version may have already been approved or rejected or it was your own rollout ." )
126
+ . title ( "Invalid action " )
127
+ . description ( "There was an error approving the rollout. This version may have already been approved." )
157
128
. color ( 0xFF0000 ) ;
158
129
159
130
let reply = poise:: CreateReply :: default ( )
160
131
. embed ( embed) ;
161
132
162
133
ctx. send ( reply) . await ?;
163
- mci . create_response ( ctx, serenity_prelude:: CreateInteractionResponse :: Acknowledge ) . await ?;
134
+ component_interaction . create_response ( ctx, serenity_prelude:: CreateInteractionResponse :: Acknowledge ) . await ?;
164
135
continue ;
165
136
}
166
137
@@ -173,30 +144,30 @@ pub async fn create_rollout(
173
144
". The rollout has not been started because it has not been approved by enough people."
174
145
} ;
175
146
176
- let embed_author = serenity_prelude:: CreateEmbedAuthor :: new ( & mci . user . name )
177
- . icon_url ( mci . user . avatar_url ( ) . unwrap_or_default ( ) )
178
- . url ( mci . user . avatar_url ( ) . unwrap_or_default ( ) ) ;
147
+ let embed_author = serenity_prelude:: CreateEmbedAuthor :: new ( & component_interaction . user . name )
148
+ . icon_url ( component_interaction . user . avatar_url ( ) . unwrap_or_default ( ) )
149
+ . url ( component_interaction . user . avatar_url ( ) . unwrap_or_default ( ) ) ;
179
150
180
151
let embed = serenity_prelude:: CreateEmbed :: default ( )
181
152
. title ( "Rollout Approved" )
182
- . description ( format ! ( "Rollout of version {} has been approved by {}{} FUCK THIS SHIT {}" , version, & mci . user. name, extra, & mci . data. custom_id) )
153
+ . description ( format ! ( "Rollout of version {} has been approved by {}{}. ID: {}" , version, & component_interaction . user. name, extra, & component_interaction . data. custom_id) )
183
154
. author ( embed_author)
184
155
. color ( 0x00FF00 ) ;
185
156
186
157
let reply = poise:: CreateReply :: default ( )
187
158
. embed ( embed) ;
188
159
189
160
ctx. send ( reply) . await ?;
190
- mci . create_response ( ctx, serenity_prelude:: CreateInteractionResponse :: Acknowledge ) . await ?;
191
- } else if mci . data . custom_id == format ! ( "reject-{}" , version) {
161
+ component_interaction . create_response ( ctx, serenity_prelude:: CreateInteractionResponse :: Acknowledge ) . await ?;
162
+ } else if component_interaction . data . custom_id == format ! ( "reject-{}" , version) {
192
163
let build_queue = ctx
193
164
. data ( )
194
165
. build_queue
195
166
. lock ( )
196
167
. await ;
197
168
198
169
let success = build_queue
199
- . reject_rollout ( & version, mci . user . id . get ( ) )
170
+ . reject_rollout ( & version, component_interaction . user . id . get ( ) )
200
171
. expect (
201
172
"failed to reject rollout" ,
202
173
) ;
@@ -205,33 +176,33 @@ pub async fn create_rollout(
205
176
206
177
if !success {
207
178
let embed = serenity_prelude:: CreateEmbed :: default ( )
208
- . title ( "Oops! " )
209
- . description ( "There was an error rejecting the rollout. This version may have already been approved or rejected or it was your own rollout ." )
179
+ . title ( "Invalid action " )
180
+ . description ( "There was an error rejecting the rollout. This version may have already been rejected." )
210
181
. color ( 0xFF0000 ) ;
211
182
212
183
let reply = poise:: CreateReply :: default ( )
213
184
. embed ( embed) ;
214
185
215
186
ctx. send ( reply) . await ?;
216
- mci . create_response ( ctx, serenity_prelude:: CreateInteractionResponse :: Acknowledge ) . await ?;
187
+ component_interaction . create_response ( ctx, serenity_prelude:: CreateInteractionResponse :: Acknowledge ) . await ?;
217
188
continue ;
218
189
}
219
190
220
- let embed_author = serenity_prelude:: CreateEmbedAuthor :: new ( & mci . user . name )
221
- . icon_url ( mci . user . avatar_url ( ) . unwrap_or_default ( ) )
222
- . url ( mci . user . avatar_url ( ) . unwrap_or_default ( ) ) ;
191
+ let embed_author = serenity_prelude:: CreateEmbedAuthor :: new ( & component_interaction . user . name )
192
+ . icon_url ( component_interaction . user . avatar_url ( ) . unwrap_or_default ( ) )
193
+ . url ( component_interaction . user . avatar_url ( ) . unwrap_or_default ( ) ) ;
223
194
224
195
let embed = serenity_prelude:: CreateEmbed :: default ( )
225
196
. title ( "Rollout Rejected" )
226
- . description ( format ! ( "Rollout of version {} has been rejected by {}. Cancelling rollout" , version, & mci . user. name) )
197
+ . description ( format ! ( "Rollout of version {} has been rejected by {}. Cancelling rollout" , version, & component_interaction . user. name) )
227
198
. author ( embed_author)
228
199
. color ( 0xFF0000 ) ;
229
200
230
201
let reply = poise:: CreateReply :: default ( )
231
202
. embed ( embed) ;
232
203
233
204
ctx. send ( reply) . await ?;
234
- mci . create_response ( ctx, serenity_prelude:: CreateInteractionResponse :: Acknowledge ) . await ?;
205
+ component_interaction . create_response ( ctx, serenity_prelude:: CreateInteractionResponse :: Acknowledge ) . await ?;
235
206
}
236
207
}
237
208
0 commit comments