Apply patreon sharing across web/bot

This commit is contained in:
jude
2025-10-20 18:36:28 +01:00
parent 91310d47d3
commit 1d8fd39d13
11 changed files with 61 additions and 101 deletions

View File

@@ -9,24 +9,25 @@ use poise::{
use crate::{
consts::{CNC_GUILD, SUBSCRIPTION_ROLES},
ApplicationContext, Context, Error,
ApplicationContext, Context, Database, Error,
};
/// Check if this user/guild combination should be considered subscribed.
/// If the guild has a patreon linked, check the user involved in the link.
/// Otherwise, check the user and the guild's owner
pub async fn check_subscription(
ctx: &Context<'_>,
ctx: impl CacheHttp,
database: impl Executor<'_, Database = Database>,
user_id: UserId,
guild_id: Option<GuildId>,
) -> bool {
if let Some(subscription_guild) = *CNC_GUILD {
let user_subscribed = check_user_subscription(ctx, user_id).await;
let user_subscribed = check_user_subscription(&ctx, user_id).await;
let owner_subscribed = match guild_id {
Some(guild_id) => {
if let Some(owner) = ctx.cache().unwrap().guild(guild_id).map(|g| g.owner_id) {
check_user_subscription(ctx, owner).await
check_user_subscription(&ctx, owner).await
} else {
false
}
@@ -38,13 +39,13 @@ pub async fn check_subscription(
let link_subscribed = match guild_id {
Some(guild_id) => {
if let Ok(row) = sqlx::query!(
"SELECT user_id FROM patreon_link WHERE user_id = ?",
"SELECT user_id FROM patreon_link WHERE guild_id = ?",
guild_id.get()
)
.fetch_one(&ctx.data().database)
.fetch_one(database)
.await
{
check_user_subscription(ctx, row.user_id).await
check_user_subscription(&ctx, row.user_id).await
} else {
false
}
@@ -116,6 +117,7 @@ pub trait Extract {
}
pub use extract_derive::Extract;
use sqlx::Executor;
macro_rules! extract_arg {
($ctx:ident, $name:ident, String) => {