184 lines
5.2 KiB
Rust
184 lines
5.2 KiB
Rust
use chrono::offset::Utc;
|
|
use poise::{
|
|
serenity_prelude as serenity,
|
|
serenity_prelude::{CreateEmbed, CreateEmbedFooter, Mentionable},
|
|
CreateReply,
|
|
};
|
|
|
|
use crate::{models::CtxData, Context, Error, THEME_COLOR};
|
|
|
|
fn footer(ctx: Context<'_>) -> CreateEmbedFooter {
|
|
let shard_count = ctx.serenity_context().cache.shard_count();
|
|
let shard = ctx.serenity_context().shard_id;
|
|
|
|
CreateEmbedFooter::new(format!(
|
|
"{}\nshard {} of {}",
|
|
concat!(env!("CARGO_PKG_NAME"), " ver ", env!("CARGO_PKG_VERSION")),
|
|
shard,
|
|
shard_count,
|
|
))
|
|
}
|
|
|
|
/// Get an overview of bot commands
|
|
#[poise::command(slash_command)]
|
|
pub async fn help(ctx: Context<'_>) -> Result<(), Error> {
|
|
let footer = footer(ctx);
|
|
|
|
ctx.send(
|
|
CreateReply::default().ephemeral(true).embed(
|
|
CreateEmbed::new()
|
|
.title("Help")
|
|
.color(*THEME_COLOR)
|
|
.description(
|
|
"__Info Commands__
|
|
`/help` `/info` `/donate` `/dashboard` `/clock`
|
|
*run these commands with no options*
|
|
|
|
__Reminder Commands__
|
|
`/remind` - Create a new reminder that will send a message at a certain time
|
|
`/timer` - Start a timer from now, that will count time passed. Also used to view and remove timers
|
|
|
|
__Reminder Management__
|
|
`/del` - Delete reminders
|
|
`/look` - View reminders
|
|
`/pause` - Pause all reminders on the channel
|
|
`/offset` - Move all reminders by a certain time
|
|
`/nudge` - Move all new reminders on this channel by a certain time
|
|
|
|
__Todo Commands__
|
|
`/todo` - Add, view and manage the server, channel or user todo lists
|
|
|
|
__Setup Commands__
|
|
`/timezone` - Set your timezone (necessary for `/remind` to work properly)
|
|
`/dm allow/block` - Change your DM settings for reminders.
|
|
|
|
__Advanced Commands__
|
|
`/macro` - Record and replay command sequences
|
|
",
|
|
)
|
|
.footer(footer),
|
|
),
|
|
)
|
|
.await?;
|
|
|
|
Ok(())
|
|
}
|
|
|
|
/// Get information about the bot
|
|
#[poise::command(slash_command)]
|
|
pub async fn info(ctx: Context<'_>) -> Result<(), Error> {
|
|
let footer = footer(ctx);
|
|
|
|
let _ = ctx
|
|
.send(
|
|
CreateReply::default().ephemeral(true).embed(
|
|
CreateEmbed::new()
|
|
.title("Info")
|
|
.description(
|
|
"Help: `/help`
|
|
|
|
**Welcome to Reminder Bot!**
|
|
Developer: <@203532103185465344>
|
|
Icon: <@253202252821430272>
|
|
Find me on https://discord.jellywx.com and on https://github.com/JellyWX :)
|
|
|
|
Invite the bot: https://invite.reminder-bot.com/
|
|
Use our dashboard: https://reminder-bot.com/",
|
|
)
|
|
.footer(footer)
|
|
.color(*THEME_COLOR),
|
|
),
|
|
)
|
|
.await;
|
|
|
|
Ok(())
|
|
}
|
|
|
|
/// Details on supporting the bot and Patreon benefits
|
|
#[poise::command(slash_command)]
|
|
pub async fn donate(ctx: Context<'_>) -> Result<(), Error> {
|
|
let footer = footer(ctx);
|
|
|
|
ctx.send(CreateReply::default().embed(CreateEmbed::new().title("Donate")
|
|
.description("Thinking of adding a monthly contribution?
|
|
Click below for my Patreon and official bot server :)
|
|
|
|
**https://www.patreon.com/jellywx/**
|
|
**https://discord.jellywx.com/**
|
|
|
|
When you subscribe, Patreon will automatically rank you up on our Discord server (make sure you link your Patreon and Discord accounts!)
|
|
With your new rank, you'll be able to:
|
|
• Set repeating reminders with `interval`, `natural` or the dashboard
|
|
• Use unlimited uploads on SoundFX
|
|
|
|
(Also, members of servers you __own__ will be able to set repeating reminders via commands)
|
|
|
|
Just $2 USD/month!
|
|
|
|
*Please note, you must be in the JellyWX Discord server to receive Patreon features*")
|
|
.footer(footer)
|
|
.color(*THEME_COLOR)
|
|
),
|
|
)
|
|
.await?;
|
|
|
|
Ok(())
|
|
}
|
|
|
|
/// Get the link to the online dashboard
|
|
#[poise::command(slash_command)]
|
|
pub async fn dashboard(ctx: Context<'_>) -> Result<(), Error> {
|
|
let footer = footer(ctx);
|
|
|
|
ctx.send(
|
|
CreateReply::default().ephemeral(true).embed(
|
|
CreateEmbed::new()
|
|
.title("Dashboard")
|
|
.description("**https://reminder-bot.com/dashboard**")
|
|
.footer(footer)
|
|
.color(*THEME_COLOR),
|
|
),
|
|
)
|
|
.await?;
|
|
|
|
Ok(())
|
|
}
|
|
|
|
/// View the current time in your selected timezone
|
|
#[poise::command(slash_command)]
|
|
pub async fn clock(ctx: Context<'_>) -> Result<(), Error> {
|
|
ctx.defer_ephemeral().await?;
|
|
|
|
let tz = ctx.timezone().await;
|
|
let now = Utc::now().with_timezone(&tz);
|
|
|
|
ctx.send(CreateReply::default().ephemeral(true).content(format!(
|
|
"Time in **{}**: `{}`",
|
|
tz,
|
|
now.format("%H:%M")
|
|
)))
|
|
.await?;
|
|
|
|
Ok(())
|
|
}
|
|
|
|
/// View the current time in a user's selected timezone
|
|
#[poise::command(context_menu_command = "View Local Time")]
|
|
pub async fn clock_context_menu(ctx: Context<'_>, user: serenity::User) -> Result<(), Error> {
|
|
ctx.defer_ephemeral().await?;
|
|
|
|
let user_data = ctx.user_data(user.id).await?;
|
|
let tz = user_data.timezone();
|
|
|
|
let now = Utc::now().with_timezone(&tz);
|
|
|
|
ctx.send(CreateReply::default().ephemeral(true).content(format!(
|
|
"Time in {}'s timezone: `{}`",
|
|
user.mention(),
|
|
now.format("%H:%M")
|
|
)))
|
|
.await?;
|
|
|
|
Ok(())
|
|
}
|