@@ -24,6 +24,7 @@ use commands::{Args, Commands, GuardFn, Result};
24
24
use diesel:: prelude:: * ;
25
25
use envy;
26
26
use indexmap:: IndexMap ;
27
+ use std:: collections:: HashMap ;
27
28
use serde:: Deserialize ;
28
29
use serenity:: { model:: prelude:: * , prelude:: * } ;
29
30
@@ -221,6 +222,11 @@ fn main() {
221
222
}
222
223
}
223
224
225
+ struct CommandHistory { }
226
+ impl TypeMapKey for CommandHistory {
227
+ type Value = HashMap < MessageId , MessageId > ;
228
+ }
229
+
224
230
struct Events {
225
231
cmds : Commands ,
226
232
}
@@ -230,11 +236,34 @@ impl RawEventHandler for Events {
230
236
match event {
231
237
Event :: Ready ( ev) => {
232
238
info ! ( "{} connected to discord" , ev. ready. user. name) ;
239
+ let mut data = cx. data . write ( ) ;
240
+ data. insert :: < CommandHistory > ( HashMap :: new ( ) ) ;
241
+ drop ( data) ;
242
+
233
243
ban:: start_unban_thread ( cx) ;
234
244
}
235
245
Event :: MessageCreate ( ev) => {
236
246
self . cmds . execute ( cx, & ev. message ) ;
237
247
}
248
+ Event :: MessageUpdate ( ev) => {
249
+ use serenity:: utils:: CustomMessage ;
250
+ let mut msg = CustomMessage :: new ( ) ;
251
+
252
+ msg. id ( ev. id )
253
+ . channel_id ( ev. channel_id )
254
+ . content ( ev. content . unwrap_or_else ( || String :: new ( ) ) ) ;
255
+
256
+ let msg = msg. build ( ) ;
257
+ self . cmds . execute ( cx, msg) ;
258
+ }
259
+ Event :: MessageDelete ( ev) => {
260
+ let mut data = cx. data . write ( ) ;
261
+ let history = data. get_mut :: < CommandHistory > ( ) . unwrap ( ) ;
262
+ if let Some ( response_id) = history. remove ( & ev. message_id ) {
263
+ info ! ( "deleting message: {:?}" , response_id) ;
264
+ let _ = ev. channel_id . delete_message ( & cx, response_id) ;
265
+ }
266
+ }
238
267
Event :: ReactionAdd ( ev) => {
239
268
if let Err ( e) = welcome:: assign_talk_role ( & cx, & ev) {
240
269
error ! ( "{}" , e) ;
0 commit comments