diff --git a/jarvis/cogs/reddit.py b/jarvis/cogs/reddit.py index d0089eb..fbf996b 100644 --- a/jarvis/cogs/reddit.py +++ b/jarvis/cogs/reddit.py @@ -8,7 +8,7 @@ from asyncpraw.models.reddit.submission import Submission from asyncpraw.models.reddit.submission import Subreddit as Sub from asyncprawcore.exceptions import Forbidden, NotFound, Redirect from jarvis_core.db import q -from jarvis_core.db.models import Subreddit, SubredditFollow +from jarvis_core.db.models import Subreddit, SubredditFollow, UserSetting from naff import Client, Cog, InteractionContext, Permissions from naff.client.utils.misc_utils import get from naff.models.discord.channel import ChannelTypes, GuildText @@ -269,11 +269,15 @@ class RedditCog(Cog): embeds = await self.post_embeds(subreddit, post) if post.over_18 and not ctx.channel.nsfw: - try: - await ctx.author.send(embeds=embeds) - await ctx.send("Hey! Due to content, I had to DM the result to you") - except Exception: - await ctx.send("Hey! Due to content, I cannot share the result") + setting = await UserSetting.find_one( + q(user=ctx.author.id, type="reddit", setting="dm_nsfw") + ) + if setting and setting.value: + try: + await ctx.author.send(embeds=embeds) + except Exception: + pass + await ctx.send("Hey! Due to content, I cannot share the result") else: await ctx.send(embeds=embeds) @@ -317,11 +321,15 @@ class RedditCog(Cog): embeds = await self.post_embeds(subreddit, post) if post.over_18 and not ctx.channel.nsfw: - try: - await ctx.author.send(embeds=embeds) - await ctx.send("Hey! Due to content, I had to DM the result to you") - except Exception: - await ctx.send("Hey! Due to content, I cannot share the result") + setting = await UserSetting.find_one( + q(user=ctx.author.id, type="reddit", setting="dm_nsfw") + ) + if setting and setting.value: + try: + await ctx.author.send(embeds=embeds) + except Exception: + pass + await ctx.send("Hey! Due to content, I cannot share the result") else: await ctx.send(embeds=embeds) @@ -353,11 +361,15 @@ class RedditCog(Cog): embeds = await self.post_embeds(subreddit, post) if post.over_18 and not ctx.channel.nsfw: - try: - await ctx.author.send(embeds=embeds) - await ctx.send("Hey! Due to content, I had to DM the result to you") - except Exception: - await ctx.send("Hey! Due to content, I cannot share the result") + setting = await UserSetting.find_one( + q(user=ctx.author.id, type="reddit", setting="dm_nsfw") + ) + if setting and setting.value: + try: + await ctx.author.send(embeds=embeds) + except Exception: + pass + await ctx.send("Hey! Due to content, I cannot share the result") else: await ctx.send(embeds=embeds) @@ -389,11 +401,15 @@ class RedditCog(Cog): embeds = await self.post_embeds(subreddit, post) if post.over_18 and not ctx.channel.nsfw: - try: - await ctx.author.send(embeds=embeds) - await ctx.send("Hey! Due to content, I had to DM the result to you") - except Exception: - await ctx.send("Hey! Due to content, I cannot share the result") + setting = await UserSetting.find_one( + q(user=ctx.author.id, type="reddit", setting="dm_nsfw") + ) + if setting and setting.value: + try: + await ctx.author.send(embeds=embeds) + except Exception: + pass + await ctx.send("Hey! Due to content, I cannot share the result") else: await ctx.send(embeds=embeds) @@ -413,14 +429,34 @@ class RedditCog(Cog): embeds = await self.post_embeds(post.subreddit, post) if post.over_18 and not ctx.channel.nsfw: - try: - await ctx.author.send(embeds=embeds) - await ctx.send("Hey! Due to content, I had to DM the result to you") - except Exception: - await ctx.send("Hey! Due to content, I cannot share the result") + setting = await UserSetting.find_one( + q(user=ctx.author.id, type="reddit", setting="dm_nsfw") + ) + if setting and setting.value: + try: + await ctx.author.send(embeds=embeds) + except Exception: + pass + await ctx.send("Hey! Due to content, I cannot share the result") else: await ctx.send(embeds=embeds) + @reddit.subcommand( + sub_cmd_name="dm_nsfw", sub_cmd_description="DM NSFW posts if channel isn't NSFW" + ) + @slash_option(name="dm", description="Send DM?", opt_type=OptionTypes.BOOLEAN, required=True) + async def _reddit_dm(self, ctx: InteractionContext, dm: bool) -> None: + setting = await UserSetting.find_one( + q(user=ctx.author.id, type="reddit", setting="dm_nsfw") + ) + if not setting: + setting = UserSetting.find_one( + q(user=ctx.author.id, type="reddit", setting="dm_nsfw", value=dm) + ) + setting.value = dm + await setting.commit() + await ctx.send(f"Reddit DM NSFW setting is now set to {dm}", ephemeral=True) + def setup(bot: Client) -> None: """Add RedditCog to JARVIS""" diff --git a/poetry.lock b/poetry.lock index 2697614..59e1b34 100644 --- a/poetry.lock +++ b/poetry.lock @@ -307,7 +307,7 @@ python-versions = ">=3.5" [[package]] name = "jarvis-core" -version = "0.9.2" +version = "0.10.1" description = "JARVIS core" category = "main" optional = false @@ -328,7 +328,7 @@ umongo = "^3.1.0" type = "git" url = "https://git.zevaryx.com/stark-industries/jarvis/jarvis-core.git" reference = "main" -resolved_reference = "83117c1b3c5540acadeac3005f4d8e69cbf743fc" +resolved_reference = "06a6dd8434b42cd4df7ee073eedbe2a3430ab379" [[package]] name = "jinxed"