Merge branch 'reddit_fix' into 'dev'

Reddit fix

See merge request stark-industries/jarvis/jarvis-bot!55
This commit is contained in:
Zeva Rose 2022-05-25 16:04:39 +00:00
commit 1452f85f84
2 changed files with 69 additions and 30 deletions

View file

@ -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, Extension, InteractionContext, Permissions
from naff.client.utils.misc_utils import get
from naff.models.discord.channel import ChannelTypes, GuildText
@ -56,7 +56,7 @@ class RedditCog(Extension):
fields = []
content = ""
og_post = None
if not post.is_self:
if "crosspost_parent_list" in vars(post):
og_post = post # noqa: F841
post = await self.api.submission(post.crosspost_parent_list[0]["id"])
await post.load()
@ -76,9 +76,14 @@ class RedditCog(Extension):
break
if "selftext" in vars(post) and post.selftext:
text = post.selftext
if post.spoiler:
text = "||" + text + "||"
content += "\n\n" + post.selftext
if len(content) > 900:
content = content[:900] + "..."
if post.spoiler:
content += "||"
content += f"\n\n[View this post]({url})"
if not images and not content:
@ -264,10 +269,14 @@ class RedditCog(Extension):
embeds = await self.post_embeds(subreddit, post)
if post.over_18 and not ctx.channel.nsfw:
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)
await ctx.send("Hey! Due to content, I had to DM the result to you")
except Exception:
pass
await ctx.send("Hey! Due to content, I cannot share the result")
else:
await ctx.send(embeds=embeds)
@ -312,10 +321,14 @@ class RedditCog(Extension):
embeds = await self.post_embeds(subreddit, post)
if post.over_18 and not ctx.channel.nsfw:
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)
await ctx.send("Hey! Due to content, I had to DM the result to you")
except Exception:
pass
await ctx.send("Hey! Due to content, I cannot share the result")
else:
await ctx.send(embeds=embeds)
@ -348,10 +361,14 @@ class RedditCog(Extension):
embeds = await self.post_embeds(subreddit, post)
if post.over_18 and not ctx.channel.nsfw:
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)
await ctx.send("Hey! Due to content, I had to DM the result to you")
except Exception:
pass
await ctx.send("Hey! Due to content, I cannot share the result")
else:
await ctx.send(embeds=embeds)
@ -384,10 +401,14 @@ class RedditCog(Extension):
embeds = await self.post_embeds(subreddit, post)
if post.over_18 and not ctx.channel.nsfw:
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)
await ctx.send("Hey! Due to content, I had to DM the result to you")
except Exception:
pass
await ctx.send("Hey! Due to content, I cannot share the result")
else:
await ctx.send(embeds=embeds)
@ -403,19 +424,37 @@ class RedditCog(Extension):
await post.load()
except (NotFound, Forbidden, Redirect) as e:
self.logger.debug(f"Submission {sid} raised {e.__class__.__name__} in post")
await ctx.send("Subreddit may be private, quarantined, or nonexistent.", ephemeral=True)
await ctx.send("Post could not be found.", ephemeral=True)
return
embeds = await self.post_embeds(post.subreddit, post)
if post.over_18 and not ctx.channel.nsfw:
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)
await ctx.send("Hey! Due to content, I had to DM the result to you")
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(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"""

4
poetry.lock generated
View file

@ -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"