@@ -515,16 +515,21 @@ impl From<TagName> for String {
515
515
#[ allow( clippy:: unused_async) ]
516
516
async fn tag_autocomplete ( ctx : Context < ' _ > , partial_tag : & str ) -> Vec < TagName > {
517
517
let database = & ctx. data ( ) . database ;
518
+ let Ok ( database) = database. lock ( ) else {
519
+ return Vec :: new ( ) ;
520
+ } ;
521
+
522
+ let Some ( guild_id) = ctx. guild_id ( ) else {
523
+ return Vec :: new ( ) ;
524
+ } ;
518
525
519
526
database
520
- . lock ( )
521
- . unwrap ( )
522
527
. prepare ( "select name from tags where INSTR(name, :name) and guild = :guild limit 25" )
523
528
. and_then ( |mut statement|
524
529
// Convert `Vec<Result<String>>` into `Result<Vec<TagName>>` (abort if one of the rows failed).
525
530
statement
526
531
. query_and_then (
527
- named_params ! ( ":name" : partial_tag, ":guild" : ctx . guild_id( ) . unwrap ( ) . get( ) ) ,
532
+ named_params ! ( ":name" : partial_tag, ":guild" : guild_id. get( ) ) ,
528
533
|row| row. get :: < _ , String > ( "name" )
529
534
)
530
535
. and_then ( |rows| rows. map ( |row| row. map ( TagName ) ) . collect :: < Result < Vec < _ > , _ > > ( ) ) )
@@ -545,11 +550,12 @@ async fn tag(
545
550
TagName ( tag_name) : TagName ,
546
551
) -> Result < ( ) , PoiseError > {
547
552
let database = & ctx. data ( ) . database ;
553
+ let guild_id = ctx. guild_id ( ) . ok_or ( "no guild id, so no tags" ) ?. get ( ) ;
548
554
let text = database
549
555
. lock ( )
550
- . unwrap ( )
556
+ . map_err ( |_| "db mutex poisoned, oops" ) ?
551
557
. prepare ( "select text from tags where name = :name and guild = :guild" ) ?
552
- . query ( named_params ! ( ":name" : tag_name, ":guild" : ctx . guild_id( ) . unwrap ( ) . get ( ) ) ) ?
558
+ . query ( named_params ! ( ":name" : tag_name, ":guild" : guild_id) ) ?
553
559
. next ( ) ?
554
560
. map ( |row| row. get :: < _ , String > ( "text" ) )
555
561
. transpose ( ) ?;
@@ -583,9 +589,12 @@ async fn set_tag(
583
589
) -> Result < ( ) , PoiseError > {
584
590
let database = & ctx. data ( ) . database ;
585
591
586
- database. lock ( ) . unwrap ( ) . execute (
592
+ let guild_id = ctx. guild_id ( ) . ok_or ( "no guild id, so no tags" ) ?. get ( ) ;
593
+ database. lock ( )
594
+ . map_err ( |_| "db mutex poisoned, oops" ) ?
595
+ . execute (
587
596
"insert into tags (name, guild, text) values (:name, :guild, :text) on conflict do update set text = :text" ,
588
- named_params ! ( ":name" : tag_name, ":guild" : ctx . guild_id( ) . unwrap ( ) . get ( ) , ":text" : tag_text) ,
597
+ named_params ! ( ":name" : tag_name, ":guild" : guild_id, ":text" : tag_text) ,
589
598
) ?;
590
599
591
600
let author = ctx. author ( ) . id ;
@@ -618,10 +627,14 @@ async fn delete_tag(
618
627
) -> Result < ( ) , PoiseError > {
619
628
let database = & ctx. data ( ) . database ;
620
629
621
- let num_rows = database. lock ( ) . unwrap ( ) . execute (
622
- "delete from tags where name = :name and guild = :guild" ,
623
- named_params ! ( ":name" : tag_name, ":guild" : ctx. guild_id( ) . unwrap( ) . get( ) ) ,
624
- ) ?;
630
+ let guild_id = ctx. guild_id ( ) . ok_or ( "no guild id, so no tags" ) ?. get ( ) ;
631
+ let num_rows = database
632
+ . lock ( )
633
+ . map_err ( |_| "db mutex poisoned, oops" ) ?
634
+ . execute (
635
+ "delete from tags where name = :name and guild = :guild" ,
636
+ named_params ! ( ":name" : tag_name, ":guild" : guild_id) ,
637
+ ) ?;
625
638
626
639
let message = if num_rows > 0 {
627
640
format ! ( "Tag {tag_name:?} deleted by <@{}>" , ctx. author( ) . id)
@@ -653,12 +666,13 @@ async fn list_tags(
653
666
) -> Result < ( ) , PoiseError > {
654
667
let reply = {
655
668
let database = & ctx. data ( ) . database ;
656
- let database = database. lock ( ) . unwrap ( ) ;
669
+ let database = database. lock ( ) . map_err ( |_| "db mutex poisoned, oops" ) ? ;
657
670
let mut statement = database. prepare (
658
671
"select name from tags where guild = :guild and (:filter is null or instr(name, :filter) > 0) order by name" ,
659
672
) ?;
673
+ let guild_id = ctx. guild_id ( ) . ok_or ( "no guild id, so no tags" ) ?. get ( ) ;
660
674
let mut results = statement. query_map (
661
- named_params ! ( ":filter" : filter, ":guild" : ctx . guild_id( ) . unwrap ( ) . get ( ) ) ,
675
+ named_params ! ( ":filter" : filter, ":guild" : guild_id) ,
662
676
|row| row. get :: < _ , Box < str > > ( "name" ) ,
663
677
) ?;
664
678
results. try_fold ( String :: new ( ) , |mut acc, name| {
0 commit comments