length check & embed colour
This commit is contained in:
parent
f7ef7f1b64
commit
bcb0f2470a
@ -11,7 +11,7 @@ from os import getenv
|
|||||||
from time import process_time
|
from time import process_time
|
||||||
|
|
||||||
import aiohttp
|
import aiohttp
|
||||||
from discord import TextChannel, Embed
|
from discord import TextChannel, Embed, Colour
|
||||||
from discord import app_commands
|
from discord import app_commands
|
||||||
from discord.ext import commands, tasks
|
from discord.ext import commands, tasks
|
||||||
from discord.errors import Forbidden
|
from discord.errors import Forbidden
|
||||||
@ -146,7 +146,7 @@ class TaskCog(commands.Cog):
|
|||||||
if not articles:
|
if not articles:
|
||||||
log.debug("No articles found")
|
log.debug("No articles found")
|
||||||
|
|
||||||
embeds = await self.get_articles_as_embeds(api, session, sub.id, sub.mutators, filters, articles)
|
embeds = await self.get_articles_as_embeds(api, session, sub.id, sub.mutators, filters, articles, Colour.from_str("#" + sub.embed_colour))
|
||||||
await self.send_embeds_in_chunks(embeds, channels)
|
await self.send_embeds_in_chunks(embeds, channels)
|
||||||
|
|
||||||
async def get_articles_as_embeds(
|
async def get_articles_as_embeds(
|
||||||
@ -156,7 +156,8 @@ class TaskCog(commands.Cog):
|
|||||||
sub_id: int,
|
sub_id: int,
|
||||||
mutators: dict[str, list[dict]],
|
mutators: dict[str, list[dict]],
|
||||||
filters: list[dict],
|
filters: list[dict],
|
||||||
articles: list[Article]
|
articles: list[Article],
|
||||||
|
embed_colour: str
|
||||||
) -> list[Embed]:
|
) -> list[Embed]:
|
||||||
"""
|
"""
|
||||||
Process articles and return their respective embeds.
|
Process articles and return their respective embeds.
|
||||||
@ -164,7 +165,7 @@ class TaskCog(commands.Cog):
|
|||||||
|
|
||||||
embeds = []
|
embeds = []
|
||||||
for article in articles:
|
for article in articles:
|
||||||
embed = await self.process_article(api, session, sub_id, mutators, filters, article)
|
embed = await self.process_article(api, session, sub_id, mutators, filters, article, embed_colour)
|
||||||
if embed:
|
if embed:
|
||||||
embeds.append(embed)
|
embeds.append(embed)
|
||||||
|
|
||||||
@ -209,7 +210,8 @@ class TaskCog(commands.Cog):
|
|||||||
sub_id: int,
|
sub_id: int,
|
||||||
mutators: dict[str, list[dict]],
|
mutators: dict[str, list[dict]],
|
||||||
filters: list[dict],
|
filters: list[dict],
|
||||||
article: Article
|
article: Article,
|
||||||
|
embed_colour: str
|
||||||
) -> Embed | None:
|
) -> Embed | None:
|
||||||
"""
|
"""
|
||||||
Process a given Article.
|
Process a given Article.
|
||||||
@ -242,7 +244,7 @@ class TaskCog(commands.Cog):
|
|||||||
return
|
return
|
||||||
|
|
||||||
if not blocked:
|
if not blocked:
|
||||||
return await article.to_embed(session)
|
return await article.to_embed(session, embed_colour)
|
||||||
|
|
||||||
def mutate_article(self, article: Article, mutators: list[dict]):
|
def mutate_article(self, article: Article, mutators: list[dict]):
|
||||||
|
|
||||||
|
14
src/feed.py
14
src/feed.py
@ -79,8 +79,7 @@ class Article:
|
|||||||
mutator_value = mutator["value"]
|
mutator_value = mutator["value"]
|
||||||
|
|
||||||
if mutator_value in mutator_map:
|
if mutator_value in mutator_map:
|
||||||
func = mutator_map[mutator_value]
|
setattr(self, attr, mutator_map[mutator_value](getattr(self, attr)))
|
||||||
setattr(self, attr, func(getattr(self, attr)))
|
|
||||||
log.debug("mutated %s, to: %s", attr, getattr(self, attr))
|
log.debug("mutated %s, to: %s", attr, getattr(self, attr))
|
||||||
else:
|
else:
|
||||||
log.warn("Unknown mutator value '%s', skipping", mutator["value"])
|
log.warn("Unknown mutator value '%s', skipping", mutator["value"])
|
||||||
@ -116,7 +115,7 @@ class Article:
|
|||||||
image_content = image_element.get("content")
|
image_content = image_element.get("content")
|
||||||
return image_content if validators.url(image_content) else None
|
return image_content if validators.url(image_content) else None
|
||||||
|
|
||||||
async def to_embed(self, session: aiohttp.ClientSession) -> Embed:
|
async def to_embed(self, session: aiohttp.ClientSession, colour: Colour) -> Embed:
|
||||||
"""Creates and returns a Discord Embed object from the article.
|
"""Creates and returns a Discord Embed object from the article.
|
||||||
|
|
||||||
Parameters
|
Parameters
|
||||||
@ -143,12 +142,18 @@ class Article:
|
|||||||
icon_url = self.source.icon_url if validators.url(self.source.icon_url) else None
|
icon_url = self.source.icon_url if validators.url(self.source.icon_url) else None
|
||||||
thumb_url = await self.get_thumbnail_url(session) # validation done inside func
|
thumb_url = await self.get_thumbnail_url(session) # validation done inside func
|
||||||
|
|
||||||
|
# Combined length validation
|
||||||
|
# Can't exceed combined 6000 characters, [400 Bad Request] if failed.
|
||||||
|
combined_length = len(title) + len(desc) + (len(author) * 2)
|
||||||
|
cutoff = combined_length - 6000
|
||||||
|
desc = shorten(desc, cutoff) if cutoff > 0 else desc
|
||||||
|
|
||||||
embed = Embed(
|
embed = Embed(
|
||||||
title=title,
|
title=title,
|
||||||
description=desc,
|
description=desc,
|
||||||
timestamp=self.published,
|
timestamp=self.published,
|
||||||
url=embed_url,
|
url=embed_url,
|
||||||
colour=Colour.blue()
|
colour=colour
|
||||||
)
|
)
|
||||||
|
|
||||||
embed.set_thumbnail(url=icon_url)
|
embed.set_thumbnail(url=icon_url)
|
||||||
@ -284,6 +289,7 @@ class Subscription(DjangoDataModel):
|
|||||||
extra_notes: str
|
extra_notes: str
|
||||||
filters: list[int]
|
filters: list[int]
|
||||||
mutators: dict[str, list[dict]]
|
mutators: dict[str, list[dict]]
|
||||||
|
embed_colour: str
|
||||||
active: bool
|
active: bool
|
||||||
channels_count: int
|
channels_count: int
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user