feat: implemented new slash commands
This commit is contained in:
parent
05829327d6
commit
dd0b1d652d
17 changed files with 116 additions and 8 deletions
|
@ -1,2 +1,7 @@
|
|||
pub mod moove;
|
||||
pub mod say;
|
||||
pub use moover::*;
|
||||
pub use notice::*;
|
||||
pub use user_interactions::*;
|
||||
|
||||
pub mod moover;
|
||||
pub mod notice;
|
||||
pub mod user_interactions;
|
||||
|
|
7
src/commands/moover/mod.rs
Normal file
7
src/commands/moover/mod.rs
Normal file
|
@ -0,0 +1,7 @@
|
|||
pub use moove::*;
|
||||
pub use say::*;
|
||||
pub use gif::*;
|
||||
|
||||
pub mod moove;
|
||||
pub mod say;
|
||||
pub mod gif;
|
0
src/commands/notice/birthday.rs
Normal file
0
src/commands/notice/birthday.rs
Normal file
0
src/commands/notice/events.rs
Normal file
0
src/commands/notice/events.rs
Normal file
2
src/commands/notice/mod.rs
Normal file
2
src/commands/notice/mod.rs
Normal file
|
@ -0,0 +1,2 @@
|
|||
pub mod birthday;
|
||||
pub mod events;
|
20
src/commands/user_interactions/headpat.rs
Normal file
20
src/commands/user_interactions/headpat.rs
Normal file
|
@ -0,0 +1,20 @@
|
|||
use poise;
|
||||
use serenity::all::User;
|
||||
|
||||
use super::interaction::send_with_embed;
|
||||
use crate::types::{Error, Context};
|
||||
|
||||
#[poise::command(
|
||||
slash_command,
|
||||
description_localized("en-US", "Headpat all your friends!")
|
||||
)]
|
||||
pub async fn headpat(ctx: Context<'_>,
|
||||
#[description = "Who is the lucky one?"]
|
||||
user: User
|
||||
) -> Result<(), Error> {
|
||||
let title = "HEADPATS!";
|
||||
let desc = format!("{} headpats {}", ctx.author(), user);
|
||||
send_with_embed(ctx, "headpat", &title, &desc).await?;
|
||||
ctx.reply("Done!").await?;
|
||||
Ok(())
|
||||
}
|
20
src/commands/user_interactions/hug.rs
Normal file
20
src/commands/user_interactions/hug.rs
Normal file
|
@ -0,0 +1,20 @@
|
|||
use poise;
|
||||
use serenity::all::User;
|
||||
|
||||
use super::interaction::send_with_embed;
|
||||
use crate::types::{Error, Context};
|
||||
|
||||
#[poise::command(
|
||||
slash_command,
|
||||
description_localized("en-US", "Hug all your friends!")
|
||||
)]
|
||||
pub async fn hug(ctx: Context<'_>,
|
||||
#[description = "Who is the lucky one?"]
|
||||
user: User
|
||||
) -> Result<(), Error> {
|
||||
let title = "HUGS!";
|
||||
let desc = format!("{} hugs {}", ctx.author(), user);
|
||||
send_with_embed(ctx, "hug", &title, &desc).await?;
|
||||
ctx.reply("Done!").await?;
|
||||
Ok(())
|
||||
}
|
38
src/commands/user_interactions/interaction.rs
Normal file
38
src/commands/user_interactions/interaction.rs
Normal file
|
@ -0,0 +1,38 @@
|
|||
use anyhow::anyhow;
|
||||
use serenity::all::{Colour, CreateEmbed, CreateMessage};
|
||||
use tenorv2::tenor_builder::Tenor;
|
||||
|
||||
use crate::{types::Context, util::{gifs::get_random_tenor_gif, utilities}};
|
||||
|
||||
pub(super) async fn send_with_embed(ctx: Context<'_>, query: &str, title: &str, desc: &str) -> anyhow::Result<()> {
|
||||
let tenor_response = Tenor::new()?
|
||||
.random(true)
|
||||
.search(query).await?;
|
||||
|
||||
const LIMIT: u8 = 20;
|
||||
let url = get_random_tenor_gif(tenor_response, LIMIT).await?;
|
||||
|
||||
let embed = CreateEmbed::new()
|
||||
.color(Colour::new(rand::random::<u32>() % 0xFFFFFF))
|
||||
.title(title)
|
||||
.description(desc)
|
||||
.image(url.as_str());
|
||||
|
||||
if ctx.guild_id().is_none() {
|
||||
return Err(anyhow!("Guild id not available in context"));
|
||||
}
|
||||
|
||||
utilities::get_system_channel(
|
||||
ctx.guild_id().unwrap(), ctx.http()
|
||||
).await?
|
||||
.send_message(
|
||||
ctx.http(),
|
||||
CreateMessage::new().add_embed(embed)
|
||||
).await?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub(super) async fn send(ctx: Context<'_>, msg: &str) -> anyhow::Result<()> {
|
||||
Ok(())
|
||||
}
|
6
src/commands/user_interactions/mod.rs
Normal file
6
src/commands/user_interactions/mod.rs
Normal file
|
@ -0,0 +1,6 @@
|
|||
pub use headpat::*;
|
||||
pub use hug::*;
|
||||
|
||||
pub mod interaction;
|
||||
pub mod headpat;
|
||||
pub mod hug;
|
|
@ -8,7 +8,7 @@ use std::sync::Arc;
|
|||
use crate::util::debug::send_error;
|
||||
use crate::util::utilities;
|
||||
|
||||
use crate::commands::moove::{moove, moove_check};
|
||||
use crate::commands::moover::moove::{moove, moove_check};
|
||||
|
||||
pub async fn handle(ctx: Context, msg: Message) {
|
||||
if msg.author.bot {
|
||||
|
|
|
@ -30,7 +30,7 @@ async fn announce_event(guild_id: GuildId, name: &str, special_message: &str, ht
|
|||
.color(Colour::new(rand::random::<u32>() % 0xFFFFFF))
|
||||
.title("Today's event is:");
|
||||
|
||||
let system_channel = utilities::get_system_channel(guild_id, http.clone()).await?;
|
||||
let system_channel = utilities::get_system_channel(guild_id, &http).await?;
|
||||
|
||||
if special_message.contains("http") {
|
||||
event_embed = event_embed.description(name);
|
||||
|
@ -65,7 +65,7 @@ async fn celebrate_birthday(guild_id: GuildId, user_id: UserId, nick: &str, http
|
|||
}
|
||||
};
|
||||
|
||||
let system_channel = utilities::get_system_channel(guild_id, http.clone()).await?;
|
||||
let system_channel = utilities::get_system_channel(guild_id, &http).await?;
|
||||
|
||||
let mut embed = CreateEmbed::new()
|
||||
.color(Colour::new(rand::random::<u32>() % 0xFFFFFF))
|
||||
|
|
|
@ -2,4 +2,4 @@
|
|||
|
||||
pub type Error = Box<dyn std::error::Error + Send + Sync>;
|
||||
// replace () with Data if you ever need to store some additional data
|
||||
// pub type Context<'a> = poise::Context<'a, (), Error>;
|
||||
pub type Context<'a> = poise::Context<'a, (), Error>;
|
||||
|
|
9
src/util/gifs.rs
Normal file
9
src/util/gifs.rs
Normal file
|
@ -0,0 +1,9 @@
|
|||
use tenorv2::{tenor, tenor_types::{MediaFilter, TenorError}, JsonValue};
|
||||
|
||||
pub async fn get_random_tenor_gif(tenor_response: JsonValue, limit: u8) -> Result<String, TenorError> {
|
||||
let index = rand::random::<usize>() % limit as usize;
|
||||
match tenor::get_gif_url(MediaFilter::gif, tenor_response) {
|
||||
Ok(urls) => Ok(urls[index].clone()),
|
||||
Err(e) => Err(e)
|
||||
}
|
||||
}
|
|
@ -1,2 +1,3 @@
|
|||
pub mod debug;
|
||||
pub mod utilities;
|
||||
pub mod gifs;
|
|
@ -4,7 +4,7 @@ use serenity::{all::{ChannelId, CreateMessage, GuildId, Message}, http::Http};
|
|||
|
||||
use anyhow::Context;
|
||||
|
||||
pub async fn get_system_channel(guild_id: GuildId, http: Arc<Http>) -> anyhow::Result<ChannelId> {
|
||||
pub async fn get_system_channel(guild_id: GuildId, http: &Http) -> anyhow::Result<ChannelId> {
|
||||
return http.get_guild(guild_id).await?.system_channel_id
|
||||
.context(format!("System channel of guild: {} not found", guild_id.get()));
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue