@@ -117,6 +117,8 @@ private static async Task CheckMessageAsync(DiscordClient client, DiscordChannel
117
117
await CheckMediaTalkAsync ( client , channel , message , emoji ) . ConfigureAwait ( false ) ;
118
118
if ( emoji == Config . Reactions . ShutUp && ! isBacklog )
119
119
await ShutupAsync ( client , user , message ) . ConfigureAwait ( false ) ;
120
+ if ( emoji == Config . Reactions . BadUpdate && ! isBacklog )
121
+ await BadUpdateAsync ( client , user , message , emoji ) . ConfigureAwait ( false ) ;
120
122
await CheckGameFansAsync ( client , channel , message ) . ConfigureAwait ( false ) ;
121
123
}
122
124
catch ( Exception e )
@@ -175,6 +177,59 @@ private static async ValueTask ShutupAsync(DiscordClient client, DiscordUser use
175
177
await message . DeleteAsync ( ) . ConfigureAwait ( false ) ;
176
178
}
177
179
180
+ private static async ValueTask BadUpdateAsync ( DiscordClient client , DiscordUser user , DiscordMessage message , DiscordEmoji emoji )
181
+ {
182
+ if ( message . Channel ? . Id != Config . BotChannelId )
183
+ return ;
184
+
185
+ if ( ! await user . IsSmartlistedAsync ( client , message . Channel . Guild ) . ConfigureAwait ( false ) )
186
+ return ;
187
+
188
+ await ToggleBadUpdateAnnouncementAsync ( message ) . ConfigureAwait ( false ) ;
189
+ try
190
+ {
191
+ await message . DeleteReactionAsync ( emoji , user ) . ConfigureAwait ( false ) ;
192
+ }
193
+ catch { }
194
+ }
195
+
196
+ internal static async ValueTask ToggleBadUpdateAnnouncementAsync ( DiscordMessage message )
197
+ {
198
+ if ( message . Embeds is not [ DiscordEmbed embed ] )
199
+ return ;
200
+
201
+ var result = new DiscordEmbedBuilder ( embed ) ;
202
+ const string warningTitle = "Warning!" ;
203
+ if ( embed . Color ? . Value == Config . Colors . UpdateStatusGood . Value )
204
+ {
205
+ result = result . WithColor ( Config . Colors . UpdateStatusBad ) ;
206
+ result . ClearFields ( ) ;
207
+ var warned = false ;
208
+ foreach ( var f in embed . Fields ! )
209
+ {
210
+ if ( ! warned )
211
+ {
212
+ result . AddField ( warningTitle , "This build is known to have severe problems, please avoid downloading." ) ;
213
+ warned = true ;
214
+ }
215
+ result . AddField ( f . Name ! , f . Value ! , f . Inline ) ;
216
+ }
217
+ }
218
+ else if ( embed . Color ? . Value == Config . Colors . UpdateStatusBad . Value )
219
+ {
220
+ result = result . WithColor ( Config . Colors . UpdateStatusGood ) ;
221
+ result . ClearFields ( ) ;
222
+ foreach ( var f in embed . Fields ! )
223
+ {
224
+ if ( f . Name is warningTitle )
225
+ continue ;
226
+
227
+ result . AddField ( f . Name ! , f . Value ! , f . Inline ) ;
228
+ }
229
+ }
230
+ await message . UpdateOrCreateMessageAsync ( message . Channel ! , embed : result ) . ConfigureAwait ( false ) ;
231
+ }
232
+
178
233
private static async ValueTask CheckGameFansAsync ( DiscordClient client , DiscordChannel channel , DiscordMessage message )
179
234
{
180
235
var bot = await client . GetMemberAsync ( channel . Guild , client . CurrentUser ) . ConfigureAwait ( false ) ;
0 commit comments