From ecc37f060c7fcc11e6cebd9c340951b8ea1f61be Mon Sep 17 00:00:00 2001 From: Bulat Kurbanov Date: Mon, 13 May 2024 19:36:16 +0200 Subject: [PATCH] Test command --- Cargo.toml | 2 +- src/commands/add_game.rs | 32 ++++++++++++++++++++++++++++++++ src/commands/mod.rs | 1 + src/config.rs | 6 ++++-- src/main.rs | 17 +++++++++++++++-- 5 files changed, 53 insertions(+), 5 deletions(-) create mode 100644 src/commands/add_game.rs create mode 100644 src/commands/mod.rs diff --git a/Cargo.toml b/Cargo.toml index b316f4a..208ac61 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,5 +8,5 @@ edition = "2021" [dependencies] once_cell = "1.19.0" tokio = { version = "1.35.1", features = ["rt-multi-thread", "macros", "time"] } -serenity = "0.12.1" +serenity = { verstion = "0.12.1", features = ["collector"] } reqwest = { version = "0.11.23", features = ["json"] } diff --git a/src/commands/add_game.rs b/src/commands/add_game.rs new file mode 100644 index 0000000..4d112fa --- /dev/null +++ b/src/commands/add_game.rs @@ -0,0 +1,32 @@ +use serenity::builder::*; +use serenity::model::prelude::*; +use serenity::prelude::*; +use serenity::utils::CreateQuickModal; + + +pub async fn run(ctx: &Context, interaction: &CommandInteraction) -> Result<(), serenity::Error> { + let modal = CreateQuickModal::new("Добавление игры") + .timeout(std::time::Duration::from_secs(600)) + .short_field("Категория") + .paragraph_field("Игра"); + let response = interaction.quick_modal(ctx, modal).await?.unwrap(); + + let inputs = response.inputs; + let (category, game) = (&inputs[0], &inputs[1]); + + response + .interaction + .create_response( + ctx, + CreateInteractionResponse::Message(CreateInteractionResponseMessage::new().content( + format!("{} {}", category, game), + )), + ) + .await?; + Ok(()) +} + + +pub fn register() -> CreateCommand { + CreateCommand::new("add_game").description("Добавить игру в список") +} diff --git a/src/commands/mod.rs b/src/commands/mod.rs new file mode 100644 index 0000000..b179fdf --- /dev/null +++ b/src/commands/mod.rs @@ -0,0 +1 @@ +pub mod add_game; diff --git a/src/config.rs b/src/config.rs index a784919..2ddb78b 100644 --- a/src/config.rs +++ b/src/config.rs @@ -8,10 +8,11 @@ fn get_env(env: &'static str) -> String { pub struct Config { pub discord_bot_token: String, + pub discord_guild_id: u64, pub discord_channel_id: u64, pub discord_bot_activity: String, pub telegram_bot_token: String, - pub telgram_channel_id: i128, + pub telegram_channel_id: i128, } @@ -19,10 +20,11 @@ impl Config { pub fn load() -> Config { Config { discord_bot_token: get_env("DISCORD_BOT_TOKEN"), + discord_guild_id: get_env("DISCORD_GUILD_ID").parse().unwrap(), discord_channel_id: get_env("DISCORD_CHANNEL_ID").parse().unwrap(), discord_bot_activity: get_env("DISCORD_BOT_ACTIVITY"), telegram_bot_token: get_env("TELEGRAM_BOT_TOKEN"), - telgram_channel_id: get_env("TELEGRAM_CHANNEL_ID").parse().unwrap(), + telegram_channel_id: get_env("TELEGRAM_CHANNEL_ID").parse().unwrap(), } } } diff --git a/src/main.rs b/src/main.rs index eceff00..8bf5b88 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,10 +1,11 @@ use reqwest::Url; -use serenity::all::ActivityData; +use serenity::all::{ActivityData, GuildId}; use serenity::async_trait; use serenity::model::channel::Message; use serenity::prelude::*; pub mod config; +pub mod commands; async fn send_to_telegram(msg: &str) { @@ -13,7 +14,7 @@ async fn send_to_telegram(msg: &str) { let url = Url::parse_with_params( base_url.as_ref(), &[ - ("chat_id", &config::CONFIG.telgram_channel_id.to_string().as_ref()), + ("chat_id", &config::CONFIG.telegram_channel_id.to_string().as_ref()), ("text", &msg) ] ).unwrap(); @@ -33,6 +34,18 @@ impl EventHandler for Handler { send_to_telegram(&msg.content).await; } + + async fn ready(&self, ctx: Context, _ready: serenity::model::gateway::Ready) { + let guild_id = GuildId::new(config::CONFIG.discord_guild_id); + + let _ = guild_id + .set_commands( + &ctx.http, + vec![ + commands::add_game::register(), + ] + ).await.unwrap(); + } }