Skip to content

Commit af2a9b6

Browse files
committed
Refactor VoicePaginator
1 parent ceaf016 commit af2a9b6

2 files changed

Lines changed: 19 additions & 23 deletions

File tree

tts_commands/src/settings/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1195,7 +1195,7 @@ pub async fn voices(
11951195
Ok(())
11961196
}
11971197

1198-
async fn list_polly_voices(ctx: &Context<'_>) -> Result<(String, Vec<String>)> {
1198+
async fn list_polly_voices(ctx: &Context<'_>) -> Result<(String, Box<[String]>)> {
11991199
let data = ctx.data();
12001200

12011201
let (voice_id, mode) = data
@@ -1239,7 +1239,7 @@ async fn list_polly_voices(ctx: &Context<'_>) -> Result<(String, Vec<String>)> {
12391239
))
12401240
}
12411241

1242-
async fn list_gcloud_voices(ctx: &Context<'_>) -> Result<(String, Vec<String>)> {
1242+
async fn list_gcloud_voices(ctx: &Context<'_>) -> Result<(String, Box<[String]>)> {
12431243
let data = ctx.data();
12441244

12451245
let (lang_variant, mode) = data

tts_commands/src/settings/voice_paginator.rs

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,15 @@ pub struct MenuPaginator<'a> {
99
index: usize,
1010
mode: TTSMode,
1111
ctx: Context<'a>,
12-
pages: Vec<String>,
12+
pages: Box<[String]>,
1313
footer: Cow<'a, str>,
1414
current_voice: String,
1515
}
1616

1717
impl<'a> MenuPaginator<'a> {
1818
pub fn new(
1919
ctx: Context<'a>,
20-
pages: Vec<String>,
20+
pages: Box<[String]>,
2121
current_voice: String,
2222
mode: TTSMode,
2323
footer: Cow<'a, str>,
@@ -76,22 +76,20 @@ impl<'a> MenuPaginator<'a> {
7676

7777
async fn edit_message(
7878
&self,
79-
message: serenity::MessageId,
79+
interaction: serenity::ComponentInteraction,
8080
disable: bool,
81-
) -> serenity::Result<serenity::MessageId> {
82-
let http = self.ctx.http();
83-
let channel_id = self.ctx.channel_id();
84-
81+
) -> serenity::Result<()> {
8582
let components = [self.create_action_row(disable)];
86-
let builder = EditMessage::default()
83+
let builder = CreateInteractionResponseMessage::default()
8784
.embed(self.create_page(&self.pages[self.index]))
8885
.components(&components);
8986

90-
Ok(channel_id.edit_message(http, message, builder).await?.id)
87+
let response = CreateInteractionResponse::UpdateMessage(builder);
88+
interaction.create_response(self.ctx.http(), response).await
9189
}
9290

9391
pub async fn start(mut self) -> serenity::Result<()> {
94-
let mut message_id = self.create_message().await?;
92+
let message_id = self.create_message().await?;
9593
let serenity_context = self.ctx.serenity_context();
9694

9795
loop {
@@ -104,30 +102,28 @@ impl<'a> MenuPaginator<'a> {
104102
break Ok(());
105103
};
106104

107-
message_id = match interaction.data.custom_id.as_str() {
105+
match interaction.data.custom_id.as_str() {
108106
"⏮️" => {
109107
self.index = 0;
110-
self.edit_message(message_id, false).await?
108+
self.edit_message(interaction, false).await?;
111109
}
112110
"◀" => {
113-
self.index -= 1;
114-
self.edit_message(message_id, false).await?
111+
self.index = self.index.saturating_sub(1);
112+
self.edit_message(interaction, false).await?;
115113
}
116114
"⏹️" => {
117-
self.edit_message(message_id, true).await?;
118-
return interaction.defer(&serenity_context.http).await;
115+
return self.edit_message(interaction, true).await;
119116
}
120117
"▶️" => {
121-
self.index += 1;
122-
self.edit_message(message_id, false).await?
118+
self.index = self.index.saturating_add(1).max(self.pages.len() - 1);
119+
self.edit_message(interaction, false).await?;
123120
}
124121
"⏭️" => {
125122
self.index = self.pages.len() - 1;
126-
self.edit_message(message_id, false).await?
123+
self.edit_message(interaction, false).await?;
127124
}
128125
_ => unreachable!(),
129-
};
130-
interaction.defer(&serenity_context.http).await?;
126+
}
131127
}
132128
}
133129
}

0 commit comments

Comments
 (0)