From 9f88bf05b8024f534157db8c4dcda74041fd83b4 Mon Sep 17 00:00:00 2001
From: liyunze <50455574+liyunze-coding@users.noreply.github.com>
Date: Tue, 7 Jul 2026 19:06:17 +1000
Subject: [PATCH] organised functions
---
src/events/interaction_create.rs | 368 ++++++++++++++++++-------------
1 file changed, 209 insertions(+), 159 deletions(-)
diff --git a/src/events/interaction_create.rs b/src/events/interaction_create.rs
index 4139a4e..aca3c30 100644
--- a/src/events/interaction_create.rs
+++ b/src/events/interaction_create.rs
@@ -4,15 +4,219 @@ use crate::{
Data, Error,
commands::verification::{StudentRow, VerificationModal},
};
-use ::serenity::all::{
- Context, CreateEmbed, CreateEmbedFooter, CreateInteractionResponse,
- CreateInteractionResponseMessage, GuildId, RoleId,
- collector::ModalInteractionCollector,
+use ::serenity::{
+ all::{
+ ComponentInteraction, Context, CreateEmbed, CreateEmbedFooter, CreateInteractionResponse,
+ CreateInteractionResponseMessage, GuildId, ModalInteraction, RoleId,
+ collector::ModalInteractionCollector,
+ },
+ model::guild::Member,
};
use dotenv::dotenv;
use poise::Modal as _;
use poise::serenity_prelude as serenity;
+/// Read the verified role id from the environment.
+fn verified_role_id() -> RoleId {
+ dotenv().ok();
+ let role_id_string = std::env::var("VERIFIED_ROLE_ID").expect("missing VERIFIED_ROLE_ID");
+ let role_id_u64: u64 = role_id_string
+ .parse()
+ .expect("Unable to parse VERIFIED_ROLE_ID into number");
+ RoleId::new(role_id_u64)
+}
+
+/// Wrap an embed into an ephemeral interaction response.
+fn ephemeral_embed(embed: CreateEmbed) -> CreateInteractionResponse {
+ CreateInteractionResponse::Message(
+ CreateInteractionResponseMessage::new()
+ .add_embed(embed)
+ .ephemeral(true),
+ )
+}
+
+/// Show the verification modal and wait for (and parse) the submission.
+///
+/// Returns `None` when the user let the modal time out or the submission
+/// could not be parsed (an error response is sent in the latter case).
+async fn collect_verification_modal(
+ ctx: &Context,
+ component_interaction: &ComponentInteraction,
+) -> Result