discordrs 0.1.3

Discord Components V2 and modal interaction helpers for serenity
Documentation

discordrs

discordrs is a Rust library that provides:

  • Discord Components V2 builders (Container, TextDisplay, MediaGallery, Section, SelectMenu, etc.)
  • Modal builders and raw interaction response helpers
  • Modal Radio Group, Checkbox Group, and Checkbox component builders
  • Convenience helpers for sending/editing/followup messages with Components V2

Install

[dependencies]
discordrs = "0.1.1"

Modal Example (Radio/Checkbox)

use discordrs::{
    CheckboxBuilder, CheckboxGroupBuilder, ModalBuilder, RadioGroupBuilder, SelectOption,
};

let modal = ModalBuilder::new("preferences_modal", "Preferences")
    .add_radio_group(
        "Theme",
        Some("Pick one"),
        RadioGroupBuilder::new("theme")
            .add_option(SelectOption::new("Light", "light"))
            .add_option(SelectOption::new("Dark", "dark"))
            .required(true),
    )
    .add_checkbox_group(
        "Notifications",
        Some("Choose any"),
        CheckboxGroupBuilder::new("notify_channels")
            .add_option(SelectOption::new("Email", "email"))
            .add_option(SelectOption::new("Push", "push"))
            .min_values(0)
            .max_values(2),
    )
    .add_checkbox(
        "Agree to Terms",
        None,
        CheckboxBuilder::new("agree_terms").required(true),
    );

Quick Example

use discordrs::{button_style, create_container, send_container_message, ButtonConfig};
use serenity::http::Http;
use serenity::all::ChannelId;

async fn send_panel(http: &Http, channel_id: ChannelId) -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
    let buttons = vec![
        ButtonConfig::new("open_ticket", "티켓 열기").style(button_style::PRIMARY).emoji("🎫")
    ];

    let container = create_container(
        "지원 패널",
        "아래 버튼을 눌러 티켓을 생성하세요.",
        buttons,
        None,
    );

    send_container_message(http, channel_id, container).await?;
    Ok(())
}

Notes

  • This library uses raw Discord HTTP payloads for Components V2 because serenity does not yet model all V2 structures directly.
  • For crates.io publication, ensure the package name discordrs is available in your account.