feat: implemented new slash commands
This commit is contained in:
parent
05829327d6
commit
23f5009c4a
16 changed files with 118 additions and 8 deletions
|
@ -1,2 +1,11 @@
|
||||||
pub mod moove;
|
pub use moover::*;
|
||||||
pub mod say;
|
pub use notice::*;
|
||||||
|
pub use other::*;
|
||||||
|
pub use user_interactions::*;
|
||||||
|
|
||||||
|
pub mod moover;
|
||||||
|
pub mod notice;
|
||||||
|
pub mod user_interactions;
|
||||||
|
pub mod other;
|
||||||
|
|
||||||
|
pub mod channel_test;
|
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
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::debug::send_error;
|
||||||
use crate::util::utilities;
|
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) {
|
pub async fn handle(ctx: Context, msg: Message) {
|
||||||
if msg.author.bot {
|
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))
|
.color(Colour::new(rand::random::<u32>() % 0xFFFFFF))
|
||||||
.title("Today's event is:");
|
.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") {
|
if special_message.contains("http") {
|
||||||
event_embed = event_embed.description(name);
|
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()
|
let mut embed = CreateEmbed::new()
|
||||||
.color(Colour::new(rand::random::<u32>() % 0xFFFFFF))
|
.color(Colour::new(rand::random::<u32>() % 0xFFFFFF))
|
||||||
|
|
|
@ -2,4 +2,4 @@
|
||||||
|
|
||||||
pub type Error = Box<dyn std::error::Error + Send + Sync>;
|
pub type Error = Box<dyn std::error::Error + Send + Sync>;
|
||||||
// replace () with Data if you ever need to store some additional data
|
// 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 debug;
|
||||||
pub mod utilities;
|
pub mod utilities;
|
||||||
|
pub mod gifs;
|
|
@ -4,7 +4,7 @@ use serenity::{all::{ChannelId, CreateMessage, GuildId, Message}, http::Http};
|
||||||
|
|
||||||
use anyhow::Context;
|
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
|
return http.get_guild(guild_id).await?.system_channel_id
|
||||||
.context(format!("System channel of guild: {} not found", guild_id.get()));
|
.context(format!("System channel of guild: {} not found", guild_id.get()));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue