58 lines
1.7 KiB
Rust
58 lines
1.7 KiB
Rust
use poise::CreateReply;
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
use crate::{
|
|
utils::{check_user_subscription, Extract, Recordable},
|
|
Context, Error,
|
|
};
|
|
|
|
#[derive(Serialize, Deserialize, Extract)]
|
|
pub struct Options;
|
|
|
|
impl Recordable for Options {
|
|
async fn run(self, ctx: Context<'_>) -> Result<(), Error> {
|
|
let guild_id = ctx.guild_id().ok_or("This command must be used in a server")?;
|
|
let user_id = ctx.author().id;
|
|
|
|
// Check if user has Patreon subscription
|
|
if !check_user_subscription(ctx, user_id).await {
|
|
ctx.send(CreateReply::default()
|
|
.content("❌ You must be a Patreon subscriber to use this command. Use `/patreon info` for more information.")
|
|
.ephemeral(true)
|
|
).await?;
|
|
return Ok(());
|
|
}
|
|
|
|
// Insert or update the patreon_link entry
|
|
sqlx::query!(
|
|
"INSERT INTO patreon_link (user_id, guild_id, linked_at) VALUES (?, ?, NOW())
|
|
ON DUPLICATE KEY UPDATE guild_id = ?",
|
|
user_id.get(),
|
|
guild_id.get(),
|
|
guild_id.get()
|
|
)
|
|
.execute(&ctx.data().database)
|
|
.await?;
|
|
|
|
ctx.send(
|
|
CreateReply::default()
|
|
.content("✅ Successfully linked your Patreon subscription to this server!")
|
|
.ephemeral(true),
|
|
)
|
|
.await?;
|
|
|
|
Ok(())
|
|
}
|
|
}
|
|
|
|
/// Link your Patreon subscription to this server to allow other users Patreon access.
|
|
#[poise::command(
|
|
slash_command,
|
|
rename = "link",
|
|
identifying_name = "patreon_link",
|
|
guild_only = true
|
|
)]
|
|
pub async fn link(ctx: Context<'_>) -> Result<(), Error> {
|
|
(Options {}).run(ctx).await
|
|
}
|