@@ -26,8 +26,9 @@ use envy;
26
26
use indexmap:: IndexMap ;
27
27
use serde:: Deserialize ;
28
28
use serenity:: { model:: prelude:: * , prelude:: * , utils:: CustomMessage } ;
29
- use std:: collections :: HashMap ;
29
+ use std:: time :: Duration ;
30
30
31
+ const MESSAGE_AGE_MAX : Duration = Duration :: from_secs ( 3600 ) ;
31
32
#[ derive( Deserialize ) ]
32
33
struct Config {
33
34
tags : bool ,
@@ -224,7 +225,7 @@ fn main() {
224
225
225
226
struct CommandHistory { }
226
227
impl TypeMapKey for CommandHistory {
227
- type Value = HashMap < MessageId , MessageId > ;
228
+ type Value = IndexMap < MessageId , MessageId > ;
228
229
}
229
230
230
231
struct Events {
@@ -242,24 +243,30 @@ impl RawEventHandler for Events {
242
243
drop ( cache) ;
243
244
244
245
let mut data = cx. data . write ( ) ;
245
- data. insert :: < CommandHistory > ( HashMap :: new ( ) ) ;
246
+ data. insert :: < CommandHistory > ( IndexMap :: new ( ) ) ;
246
247
drop ( data) ;
247
248
248
- ban:: start_unban_thread ( cx) ;
249
+ ban:: start_cleanup_thread ( cx) ;
249
250
}
250
251
Event :: MessageCreate ( ev) => {
251
252
self . cmds . execute ( cx, & ev. message ) ;
252
253
}
253
254
Event :: MessageUpdate ( ev) => {
254
- let mut msg = CustomMessage :: new ( ) ;
255
-
256
- msg. id ( ev. id )
257
- . channel_id ( ev. channel_id )
258
- . content ( ev. content . unwrap_or_else ( || String :: new ( ) ) ) ;
259
-
260
- let msg = msg. build ( ) ;
261
- info ! ( "sending edited message - {:?}" , msg. content) ;
262
- self . cmds . execute ( cx, & msg) ;
255
+ let age = ev. timestamp . and_then ( |create| {
256
+ ev. edited_timestamp
257
+ . and_then ( |edit| edit. signed_duration_since ( create) . to_std ( ) . ok ( ) )
258
+ } ) ;
259
+
260
+ if age. is_some ( ) && age. unwrap ( ) < MESSAGE_AGE_MAX {
261
+ let mut msg = CustomMessage :: new ( ) ;
262
+ msg. id ( ev. id )
263
+ . channel_id ( ev. channel_id )
264
+ . content ( ev. content . unwrap_or_else ( || String :: new ( ) ) ) ;
265
+
266
+ let msg = msg. build ( ) ;
267
+ info ! ( "sending edited message - {:?}" , msg. content) ;
268
+ self . cmds . execute ( cx, & msg) ;
269
+ }
263
270
}
264
271
Event :: MessageDelete ( ev) => {
265
272
let mut data = cx. data . write ( ) ;
0 commit comments